如何在postgresql查询中创建一个串行字段?

时间:2015-05-06 16:36:05

标签: postgresql

在postgresql中更新/插入非常慢。因此,通常更快地使用新字段/行创建新表,然后替换旧表

问题是我需要一个自动数字,所以在这种情况下我必须先创建表并稍后再插入。

有没有办法在select中创建一个自动数字字段,所以我可以使用

CREATE TABLE source.road_nodes AS 
     SELECT serial_field, node

而不是CREATE TABLE + INSERT

CREATE TABLE source.road_nodes (
    node_id serial,
    node TEXT
);

INSERT INTO source.road_nodes (node)
SELECT DISTINCT  node
FROM
   (
       SELECT DISTINCT node_begin AS node
       FROM source.vzla_rto
   ) as node_pool;

1 个答案:

答案 0 :(得分:0)

在某种程度上这是可能的。您可以利用the PostgreSQL documentation - 8.1.4. Serial Types状态:

这一事实
  

CREATE TABLE tablename ( colname SERIAL );

  相当于指定:

     

CREATE SEQUENCE tablename_colname_seq; CREATE TABLE tablename ( colname integer NOT NULL DEFAULT nextval('tablename_colname_seq') ); ALTER SEQUENCE tablename_colname_seq OWNED BY tablename.colname;

单独创建序列并将下一个值设为列的默认值,实际上将其设为SERIAL列。

CREATE SEQUENCE road_nodes_node_id_seq;
CREATE TABLE road_nodes AS 
     SELECT DISTINCT ON (node) nextval('road_nodes_node_id_seq') AS node_id, node FROM vzla_rto;
ALTER TABLE road_nodes ALTER node_id SET NOT NULL, ALTER COLUMN node_id SET DEFAULT nextval('road_nodes_node_id_seq');

您可以保留序列,并在重新创建表时将其重置为一个。

我不会说这是一种优雅的方式,可能最简单的方法就是单独创建表格。