如何使用序列字段创建 table AS SELECT
How create a table AS SELECT with a serial field
此查询已经有效。
CREATE TABLE source.road_nodes (
node_id serial,
node TEXT
);
-- SAVE UNIQUE NODES AND ASIGN ID
INSERT INTO source.road_nodes (node)
SELECT DISTINCT node
FROM
(
(SELECT DISTINCT node_begin AS node
FROM map.rto)
UNION
(SELECT DISTINCT node_end AS node
FROM map.rto)
) as node_pool;
我想知道是否有办法使用
创建 table
CREATE TABLE source.road_nodes AS SELECT ( ... )
不必创建 table 然后执行插入。
关键是如何创建序列栏。
您可以将 table 创建为 select:
create table source.road_nodes as
select (row_number() over())::int node_id, node::text
from (
select node_begin node from map.rto
union
select node_end node from map.rto
) sub;
并且 table 中的数据将符合预期,但列 node_id
将没有默认值。
但是,您可以手动添加适当的 default
post 事实:
create sequence road_nodes_node_id_seq;
select setval('road_nodes_node_id_seq',
(select node_id from source.road_nodes order by 1 desc limit 1));
alter table source.road_nodes alter node_id set not null; -- not necessary
alter table source.road_nodes alter node_id set default
nextval('road_nodes_node_id_seq'::regclass);
此查询已经有效。
CREATE TABLE source.road_nodes (
node_id serial,
node TEXT
);
-- SAVE UNIQUE NODES AND ASIGN ID
INSERT INTO source.road_nodes (node)
SELECT DISTINCT node
FROM
(
(SELECT DISTINCT node_begin AS node
FROM map.rto)
UNION
(SELECT DISTINCT node_end AS node
FROM map.rto)
) as node_pool;
我想知道是否有办法使用
创建 tableCREATE TABLE source.road_nodes AS SELECT ( ... )
不必创建 table 然后执行插入。
关键是如何创建序列栏。
您可以将 table 创建为 select:
create table source.road_nodes as
select (row_number() over())::int node_id, node::text
from (
select node_begin node from map.rto
union
select node_end node from map.rto
) sub;
并且 table 中的数据将符合预期,但列 node_id
将没有默认值。
但是,您可以手动添加适当的 default
post 事实:
create sequence road_nodes_node_id_seq;
select setval('road_nodes_node_id_seq',
(select node_id from source.road_nodes order by 1 desc limit 1));
alter table source.road_nodes alter node_id set not null; -- not necessary
alter table source.road_nodes alter node_id set default
nextval('road_nodes_node_id_seq'::regclass);