場合によっては、テーブルにいくつかの null 値を挿入するか、値を NULL に設定して更新する必要があります。
Postgres のドキュメントのどこかで、これは実行できないが、デフォルト値でだまされる可能性があることを読みました。
pg_query("INSERT INTO my_table (col_a, col_b) VALUES ('whatever', default)
この例では、次の場合と同じ結果になることがわかっています。
pg_query("INSERT INTO my_table (col_a) VALUES ('whatever')
しかし、準備されたステートメントには問題があります。
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.
同じ問題が update ステートメントにも当てはまります。
pgmyadminはそれを行うことができる(またはできるように見える)ため、解決策があると思います。
テーブルで null 値を使用する必要がある理由を知りたい場合は、例を挙げてみましょう (null 値よりも優れた方法があるのではないでしょうか?)。
空にすることもできますが、一意のインデックスを持つ列を持つusers
テーブルがあるとします。email
2 つの空のメールは等しく、一意の制約に違反しますが、2 つのNULL値は等しくなく、共存できます。