Вопрос

If I have schemas SCHEMA1 with tables tbl_one and tbl_two, SCHEMA2 with table tbl_tree, how to use in PostgreSQL command setval():

SELECT SETVAL('SCHEMA1.tbl_one_id_seq', 234) FROM SCHEMA1.tbl_one;
SELECT SETVAL('SCHEMA1.tbl_two_id_seq', 345) FROM SCHEMA1.tbl_two;
SELECT SETVAL('SCHEMA2.tbl_tree_id_seq', 456) FROM SCHEMA2.tbl_tree;

These don't work.

Это было полезно?

Решение 2

You don't need the FROM clause. Just:

SELECT SETVAL('SCHEMA1.tbl_one_id_seq', 234);

In future, when you say "it doesn't work" you should be specific about what error message you get exactly.

Possibly your schema is case-perserved? If so, you want:

SELECT SETVAL('"SCHEMA1"."tbl_one_id_seq"', 234);

Note the quotes on the identifier to prevent case-folding.

Другие советы

Try ALTER SEQUENCE SCHEMA1.tbl_one_id_seq RESTART WITH 234 and so forth.

Note the lower case spelling of 'schema1.tbl_one_id_seq'. Unless you double-quoted names when creating objects, you need to lower case the name here.

SELECT setval('schema1.tbl_one_id_seq', max(id))
FROM   SCHEMA1.tbl_one    -- case irrelevant while not double-quoted

Fetching the maximum id, btw - else you wouldn't need to select from the table.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top