Я работаю над прототипом, который использует Postgres в качестве бэкэнда.Я не делаю много SQL, поэтому я чувствую свой путь через это.Я создал .pgsql
файл, который я запускаю с psql
, который выполняет каждый из множества файлов, которые устанавливают мою базу данных, и я использую переменную для определения схемы, которая будет использоваться, чтобы я мог тестировать функции, не испортив свое «добро»Экземпляр:
\set schema_name 'example_schema'
\echo 'The Schema name is' :schema_name
\ir sql/file1.pgsql
\ir sql/file2.pgsql
Это работает хорошо.Я определил несколько функций, которые правильно расширяют :schema_name
:
CREATE OR REPLACE FUNCTION :schema_name.get_things_by_category(...
По причинам, которые я не могу понять, это не работает в моей новейшей функции:
CREATE OR REPLACE FUNCTION :schema_name.update_thing_details(_id uuid, _details text)
RETURNS text
LANGUAGE 'plpgsql'
AS $BODY$
BEGIN
UPDATE :schema_name.things
...
Синтаксическая ошибка указывает, что он интерпретирует :schema_name
буквально после UPDATE
вместо его расширения.Как мне заставить его использовать значение переменной вместо литерального значения здесь?Я понимаю, что, возможно, в BEGIN..END
другой контекст, но наверняка есть способ написать это имя схемы во всех местах?