Postgres: синтаксическая ошибка при попытке создать несколько хранимых процедур из одного файла

#postgresql #stored-procedures

#postgresql #хранимые процедуры

Вопрос:

Я использую Postgres версии 13.1. Я хочу иметь один файл, в котором я мог бы хранить все хранимые процедуры и создавать их одним выстрелом. Но когда я помещаю несколько хранимых процедур в один файл, я получаю следующую ошибку. Чего мне не хватает?

В моем файле test.sql у меня есть следующее содержимое:

 create or replace procedure tmp1( 
)
language plpgsql as
$
declare
  l_count integer;
begin
  select 1 into l_count;
  raise info 'count: %', l_count;
end;
$

create or replace procedure tmp2( 
)
language plpgsql as
$
declare
  l_count integer;
begin
  select 1 into l_count;
  raise info 'count: %', l_count;
end;
$
 

Если у меня есть только первая процедура, она создается, и я могу успешно ее вызвать. Но в тот момент, когда у меня появляется вторая идентичная процедура с другим именем, она выдает следующую ошибку (при запуске из psql):

 psql=> i test.sql
psql:test.sql:23: ERROR:  syntax error at or near "create"
LINE 12: create or replace procedure tmp2( 
 

Комментарии:

1. Точка с запятой должна быть после всего create procedure/function оператора (как и для любых других операторов в сценариях), и это не обязательно в конце тела: create function ... as $$ begin ...end $$;

Ответ №1:

Хорошо — сразу после публикации я попытался поставить «;» после окончания первой процедуры, и это работает