在PostgreSQL中创建序列
我正在尝试使用以下查询在PostgreSQL中创建一个新序列,起始值为所有表中所有可用ID的最大值:在PostgreSQL中创建序列,sql,postgresql,Sql,Postgresql,我正在尝试使用以下查询在PostgreSQL中创建一个新序列,起始值为所有表中所有可用ID的最大值: CREATE SEQUENCE idschema.global_id_sequence INCREMENT 1 START ( SELECT MAX(t.max_id) FROM ( (SELECT MAX(public.tbl1.id) max_id FROM public.tbl1) UNION (SELECT MAX(public.tbl2.id) max_id
CREATE SEQUENCE idschema.global_id_sequence INCREMENT 1 START (
SELECT MAX(t.max_id) FROM
(
(SELECT MAX(public.tbl1.id) max_id FROM public.tbl1) UNION
(SELECT MAX(public.tbl2.id) max_id FROM public.tbl2) UNION
(SELECT MAX(public.tbl3.id) max_id FROM public.tbl2) UNION
) t
);
这似乎不起作用。如何使用标量或其他方法在PostgreSQL中实现上述功能?您不能使用查询在创建序列中提供起始值。创建序列后,需要使用setval:
create sequence idschema.global_id_sequence;
with global_max as (
select max(max_id) as max_id
from (
SELECT MAX(id) max_id FROM public.tbl1
UNION ALL
SELECT MAX(id) max_id FROM public.tbl2
UNION ALL
SELECT MAX(id) max_id FROM public.tbl3
) t
)
select setval('idschema.global_id_sequence', (select max_id from global_max));
不能使用查询在创建序列中提供起始值。创建序列后,需要使用setval:
create sequence idschema.global_id_sequence;
with global_max as (
select max(max_id) as max_id
from (
SELECT MAX(id) max_id FROM public.tbl1
UNION ALL
SELECT MAX(id) max_id FROM public.tbl2
UNION ALL
SELECT MAX(id) max_id FROM public.tbl3
) t
)
select setval('idschema.global_id_sequence', (select max_id from global_max));
另一种方法是分两部分进行:
CREATE SEQUENCE seq INCREMENT 1 START WITH 1;
SELECT setval('seq',
(SELECT max(val) FROM (
SELECT max(id) AS val FROM t1 UNION ALL
SELECT max(id) AS val FROM t2) j));
查看文档。另一种方法是分两部分进行:
CREATE SEQUENCE seq INCREMENT 1 START WITH 1;
SELECT setval('seq',
(SELECT max(val) FROM (
SELECT max(id) AS val FROM t1 UNION ALL
SELECT max(id) AS val FROM t2) j));
查看文档