В PostgreSQL, как и в большинстве СУБД, при добавлении записи в таблицу ожидается возвращение некоторого значения, чтобы подтвердить успешное выполнение операции. Однако, PostgreSQL возвращает специальные значения, не совпадающие с привычными True или False. Рассмотрим несколько возможных способов получения подтверждения о добавлении записи.
Первый способ - использование команды INSERT и проверка количества затронутых строк:
INSERT INTO <table_name> (<column1>, <column2>, ...) VALUES (<value1>, <value2>, ...); SELECT CASE WHEN (SELECT COUNT(*) FROM <table_name>) > <previous_row_count> THEN TRUE ELSE FALSE END;
В данном случае мы добавляем новую запись в таблицу <table_name>
и используем функцию COUNT(*)
, чтобы определить количество строк в таблице до и после выполнения команды INSERT
. Затем, на основе сравнения количества строк, мы возвращаем TRUE или FALSE.
Второй способ - использование команды INSERT RETURNING:
WITH inserted_rows AS ( INSERT INTO <table_name> (<column1>, <column2>, ...) VALUES (<value1>, <value2>, ...) RETURNING * ) SELECT EXISTS (SELECT 1 FROM inserted_rows);
В данном случае мы используем команду INSERT с ключевым словом RETURNING, которое позволяет вернуть данные о добавленной записи. Затем, мы помещаем результат операции INSERT во временную таблицу с помощью конструкции WITH и применяем функцию EXISTS для проверки наличия записей. Функция EXISTS возвращает TRUE, если найдена хотя бы одна запись, и FALSE, если нет.
Третий способ - использование правил (rules):
CREATE RULE insert_rule AS ON INSERT TO <table_name> DO INSTEAD NOTHING; INSERT INTO <table_name> (<column1>, <column2>, ...); SELECT TRUE;
В данном случае мы создаём правило (RULE
) для INSERT
операции на таблицу <table_name>
, которое заменяет операцию INSERT
на пустую операцию DO INSTEAD NOTHING
. Затем, после выполнения команды INSERT
, возвращаем TRUE
.
Выберите подход, который наиболее подходит для ваших потребностей и требований вашего приложения. Конечно, в каждом случае требуется настройка таблицы и запроса в соответствии с вашей схемой базы данных.