Postgresql: использование значения «NULL» при вставке и обновлении строк с помощью подготовленных операторов

иногда мне нужно вставить в таблицу несколько нулевых значений или обновить их, установив значение в NULL.

Я где-то читал в документации postgresql, что это невозможно сделать, но может быть tricket со значением по умолчанию:

pg_query("INSERT INTO my_table (col_a, col_b) VALUES ('whatever', default) 

ps: Я знаю, что в этом примере у меня будет тот же результат с

 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. 

Такая же проблема возникает с запросом на обновление.

Я думаю, что есть решение, потому что pgmyadmin может это сделать (или похоже, что он может), и написано i php (я не думаю, что он не использует подготовленные заявления в любом случае)

Если вы задаетесь вопросом, почему мне нужно лавировать с нулевыми значениями в моих таблицах, позвольте мне привести пример (возможно, есть способ лучше, чем нулевое значение): предположим, что у меня есть таблица пользователя, а адрес электронной почты: этот может быть пустым , но является уникальным индексом. 2 пустое письмо равно и нарушает единственное ограничение, а 2 значения NULL не равны и могут сосуществовать.

В качестве параметра используйте литерал NULL php :

 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));