Как в случае добавления записи вернуть True?

В 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.

Выберите подход, который наиболее подходит для ваших потребностей и требований вашего приложения. Конечно, в каждом случае требуется настройка таблицы и запроса в соответствии с вашей схемой базы данных.