У меня есть следующий сценарий создания PostgreSQL

CREATE SEQUENCE seq_tbl_ct_yr2_id  START (select max(ct_tran_id)+1 tranid from tbl_ct);

Это не создает последовательность, возникающую в результате следующей ошибки:

ОШИБКА: синтаксическая ошибка около "(" СТРОКА 1: создание последовательности test_1 start (выберите 1)

Для тестовых целей я тестировал следующие скрипты

create sequence test start 1 -- this works

create sequence test_1 start (select 1) -- this doesnt work 

Как это побороть ??

Примечание: PostgreSQL 9.2

0
user4193320 22 Янв 2015 в 09:41

2 ответа

Лучший ответ
DO
$$
declare
start_id int;
begin
select max(ct_tran_id)+1 from tbl_ct  into start_id;
execute 'CREATE SEQUENCE seq_tbl_ct_yr2_id  START '||start_id||'';
end;
$$

Тест с использованием

select nextval('seq_tbl_ct_yr2_id')

sql-do

0
Vivek S. 22 Янв 2015 в 06:49

Вы не можете указать начальное значение в качестве подвыбора. Однако вы можете установить для последовательности конкретное значение с помощью setval()

CREATE SEQUENCE seq_tbl_ct_yr2_id;
select setval('seq_tbl_ct_yr2_id', (select max(ct_tran_id)+1 tranid from  tbl_ct));
3
a_horse_with_no_name 22 Янв 2015 в 06:55