Сгенерировать последовательность новых значений в динамическом sql

create sequence seq;

create table test(
    col int
);


do $$
begin
    EXECUTE 'INSERT INTO test
    (col)
    select '||nextval('seq')||' from generate_series(1,5)' ;
end;
$$ language plpgsql

это приводит к таким же значениям для всех 5 строк, кажется, nextval('seq')выполняется только один раз.

Вопрос: Как (...) EXECUTE 'вставить в тест (col) выбрать 91533 из generate_series (1,5)' ; (...), поскольку он работает в обычном SQL-запросе?

sql,postgresql,postgresql-9.6,

1

Ответов: 1


1 принят

Вы добавляете результат netval к строке (которая является вашим динамическим запросом).

Так что это точно так же, как если бы вы делали это:

(...)
    EXECUTE 'INSERT INTO test
    (col)
    select nextval(''seq'') from generate_series(1,5)';
(...)

Вместо этого вы должны сделать выборку из последовательности частью вашего динамического запроса.

(Я не знаю postgres, но это скорее общий вопрос dbms. Это было бы так же в Oracle, но с другим синтаксисом).

SQL, PostgreSQL, PostgreSQL-9,6,
Похожие вопросы