Я хочу загрузить некоторые функции SQL в пустую базу данных через psql:
psql -d my_database -f fuctions.sql --set ON_ERROR_STOP=1
Я использую --set ON_ERROR_STOP=1
, потому что хочу, чтобы psql не работал, если скрипт содержит ошибки.
Содержание functions.sql
:
CREATE or REPLACE FUNCTION test_function() RETURNS INT AS $$
SELECT id from test_table;
$$ LANGUAGE sql;
Моя проблема в том, что psql проверяет, существует ли test_table
при загрузке функции, и терпит неудачу с этой ошибкой:
ERROR: relation "test_table" does not exist LINE 2: SELECT id from test_table;
Но я не хочу, чтобы psql проверял, существует ли таблица, потому что я создам эту таблицу позже.
Следующие обходные пути будут работать, но я не могу их использовать:
- Игнорировать ошибки. Я хочу, чтобы psql завершал работу с ошибкой, если скрипт содержит, например, синтаксические ошибки sql.
- Используйте функции plpgsql вместо sql. Конечно, я мог бы, но простые функции SQL часто являются лучшим выбором.
- Сначала создайте таблицу. Мой реальный сценарий на самом деле сложнее, чем этот пример.