PostgreSQL ALTER SEQUENCE в функции - PullRequest
       2

PostgreSQL ALTER SEQUENCE в функции

2 голосов
/ 25 января 2012

У меня есть триггерная функция:

CREATE OR REPLACE FUNCTION update_aaa() RETURNS TRIGGER AS $$
DECLARE maxid INTEGER;
BEGIN
    SELECT MAX(id) INTO maxid FROM aaa;
    ALTER SEQUENCE aaa_id_seq RESTART WITH maxid;
END;
$$ LANGUAGE plpgsql;

И есть ошибка:

ERROR:  syntax error at or near "$1"
Line 1: ALTER SEQUENCE aaa_id_seq RESTART WITH  $1 

Почему $ 1?
Какая ошибка?

Ответы [ 3 ]

5 голосов
/ 25 января 2012

Может быть, использовать setval функцию вместо alter sequence ... restart with?

SELECT pg_catalog.setval('aaa_id_seq'::regclass, maxid, false);
0 голосов
/ 25 января 2012

Ваша таблица, вероятно, пуста, поэтому

SELECT MAX(id) INTO maxid FROM aaa;

возвращает NULL;

Измените запрос на

SELECT COALESCE(MAX(id), <some_appropriate_value>) INTO maxid FROM aaa;
0 голосов
/ 25 января 2012

Я думаю, вам нужно использовать EXECUTE для команд определения данных (например, ALTER) в PL / pgSQL. И вам нужно LOCK TABLE aaa IN SHARE MODE; перед вычислением MAX (id), чтобы предотвратить одновременное изменение данных таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...