leere zeichenketten

Hallo,
ich moechte verhindern, dass in manchen Spalten leere Strings abgelegt werden. Mache ich das ueber einen Trigger oder kann man das auch anders loesen?

Vielen Dank, Torsten

ich wuerde hiermit meine Frage zurueckziehen, da Postgresql das zumindest beim Testen mit

insert … values("");

anscheinend eh nicht zulaesst (oder doch auf andere Art?).

Torsten

Hallo Torsten,

Das kannst Du mittels eines Triggers lösen. Aber welchen Wert willst in die Spalte schreiben? Übrig bleibt doch nur der Wert ‘null’, und das heißt der Wert in der Spalte ist unbestimmt.



mfg

fristo

Hallo,

Fristo: danke, ja. Strings in ‘’ setzten!
Nun bezieht sich die Fehlermeldung eindeutig auf mein check-constrain (spaltenname <> ‘’). Ich hoffe, dass damit die Moeglichkeit, einen “leeren string” einzugeben nicht gegeben ist.

db=> insert into foo.test2 values(’’);
ERROR: new row for relation “test2” violates check constraint “test2_spalte_check”


Ich bin noch ein bischen im Anfaengerstadium, weswegen Begriffen, wie “leere Zeichenketten” und “unbestimmter Wert” noch etwas ungeheuer sind.

Habe ich also mit unten stehender Definition “leere strings” verhindert?
create table tabelle (
spaltenname varchar(100) check(spaltenname <> ‘’)
);

Dank & Gruss, Torsten

Hallo Torsten,

[quote=“tor”]Habe ich also mit unten stehender Definition “leere strings” verhindert?
create table tabelle (
spaltenname varchar(100) check(spaltenname <> ‘’)
)]

Ja? Du bist Dir im klaren, dass wenn die Bedinngung check(spaltenname <> ‘’) nicht erfullt wird, kein INSERT oder UPDATE der gesamten Zeile erfolgt!



mfg

fristo

Ach ja… aehh. Also doch Trigger, nicht wahr?

Torsten

Hallo Torsten,

die Entscheidung, die Du treffen muss, hängt von Deiner Applikation ab und die kenne ich nicht.

Aber warum willst Du keine Spalten mit einem leeren String zulassen? In die Spalte muss doch irgend ein Wert eingetragen werden!



mfg

fristo

Es geht einfach nur darum, dass ein Programm (Bohrdatenbank), dass ansonsten primaer auf Access-Datenbanken zugreift, irgendwann ueber seine odbc-Schnittstelle mit einer zentralisierten Postgressql-DB zusammenarbeiten soll. In der Definition der Spalten in Access ist bei den Textspalten jedes Mal die Option “keine leeren Zeichenfolgen” angeschaltet. Fuer mich ein Indiz, dass dies einen Grund haben koennte. Folglich: entweder es liegt ein Wert vor oder das Feld ist auf NULL gesetzt. Es ist vielleicht auch eine Begrifflichkeit, an der ich hier haenge…

Gruss, Torsten

Ja, wie wäre es denn mit dem NOT NULL -constraint für die Spalten?

Damit sagt man einer Datenbank doch, dass in dieser Spalte keine
leeren Einträge sein dürfen.

Oder habe ich da etwas falsch verstanden?

Nichts anderes steckt auch hinter dem “keine leeren Werte” von
Access!

Gruß
Yves :slight_smile:

congor: NOT NULL und ein leerer String sind zwei unterschiedliche Werte.

NOT NULL bedeutet, das rein gar nichts vorhanden ist, auch kein leerer String. Der Wert ist schlicht nicht definiert.

Ein leerer String kann eine Zeichenkette ohne Inhalt sein, wobei jedoch immer noch ein String vorhanden ist.

Letzteres kannst du nicht mit einem NOT NULL Constraint abfangen.

congor: NOT NULL und ein leerer String sind zwei unterschiedliche Werte.

NOT NULL bedeutet, das rein gar nichts vorhanden ist, auch kein leerer String. Der Wert ist schlicht nicht definiert.

Ein leerer String kann eine Zeichenkette ohne Inhalt sein, wobei jedoch immer noch ein String vorhanden ist.

Letzteres kannst du nicht mit einem NOT NULL Constraint abfangen.

Ja, das ist mir schon klar. HAtte leeren “Wert” gelesen, wie du
ja auch sicherlich in meiner Antwort siehst. Ich meine wohl, bezogen auf Access, die “Eingabe erforderlich” option.

Nur, wenn er schon sagt, dass nicht einmal leere ZEichenfolgen
erlaubt sind, dann würde ich doch das NOT NULL-Constraint erst
recht einschalten, sonst geht zwar “” (‘’ geht übrigens) nicht,
aber es wird NULL gehen!

Gruß
Yves