Postgresql: Verwenden des NULL-Werts beim Einfügen und Aktualisieren von Zeilen mit vorbereiteten Anweisungen

Manchmal muss ich einige Nullwerte in die Tabelle einfügen oder sie aktualisieren, indem ich den Wert auf NULL setze.

Ich habe irgendwo in der postgresql-Dokumentation gelesen, dass dies nicht möglich ist, aber möglich istTricket mit dem Standardwert:

<code>pg_query("INSERT INTO my_table (col_a, col_b) VALUES ('whatever', default)
</code>

PS: Ich weiß, dass ich in diesem Beispiel das gleiche Ergebnis mit habe

<code>pg_query("INSERT INTO my_table (col_a) VALUES ('whatever')
</code>

Aber die Probleme kommen mit den vorbereiteten Aussagen:

<code>pg_prepare($pgconn, 'insert_null_val', "INSERT INTO my_table (col_a, col_b) VALUES ($1, default)");
pg_exec($pgconn, 'insert_null_val', array('whatever'));
//this works, but
pg_prepare($pgconn, 'insert_null_val', "INSERT INTO my_table (col_a, col_b) VALUES ($1, $2)");
pg_exec($pgconn, 'insert_null_val', array('whatever', 'NULL'));
//insert into the table the string 'NULL'.
//instead using array('whatever', '') it assume the col_b as empty value, not NULL.
</code>

Das gleiche Problem tritt bei der Aktualisierungsabfrage auf.

Ich denke, dass es eine Lösung gibt, weil pgmyadmin das kann (oder wie es scheint), und geschrieben ist, ich php (ich glaube nicht, dass es die vorbereiteten Anweisungen sowieso nicht verwendet)

Wenn Sie sich fragen, warum ich mit Nullwerten in meinen Tabellen palysen muss, lassen Sie mich ein Beispiel werfen (vielleicht gibt es einen besseren Weg als den Nullwert): Angenommen, ich habe die Benutzertabelle und die E-Mail-Spalte: Diese kann leer sein , ist aber ein eindeutiger Index .. 2 leere Emails sindgleich und verletzt die eindeutige Einschränkung, während 2NULL Werte sind nicht gleich und können koexistieren.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage