PostgreSQL,使用预定义列创建表AS

时间:2018-01-07 18:53:44

标签: postgresql

我第一次找到非常方便的导入方式"去年的数据"到今年的数据" 这很有效:

DROP TABLE IF EXISTS mytable;
CREATE TABLE mytable AS
SELECT col1, col2, col3, col4 
  FROM dblink('host=localhost port=xxxx user=xxxx password=xxxx dbname=mylastyeardb',
              'SELECT col1, col2, col3, col4
               FROM mytable 
               WHERE TRIM(col1)<>'''' ')
               AS x(col1 text, col2 text, col3 text, col4 text);

ALTER TABLE mytable ADD COLUMN cols_id SERIAL PRIMARY KEY; 

因为&#39; cols_id&#39;从旧表不适合新表可能一些有经验的用户知道如何在CREATE TABLE AS中设置一个表,它具有&#39; cols_id&#39;作为(序列)主键很好的有序和作为第一列。也许这样我可以避免使用第二个(ALTER)命令?

欢迎任何其他有关展示情况的建议。

1 个答案:

答案 0 :(得分:1)

你要么create table,要么定义它的结构(在一个语句中有所有方便的快捷方式和选项),要么create table as select,“继承”[部分]结构。因此,如果您需要主键,则无论如何都需要alter tabale ...

要将id作为第一列放在一个语句中,您只需使用虚拟值,例如序号:

t=# create table s as select row_number() over()  as id,chr(n) from generate_series(197,200) n;
SELECT 4
t=# select * from s;
 id | chr
----+-----
  1 | Å
  2 | Æ
  3 | Ç
  4 | È
(4 rows)

当然之后你仍然需要创建序列,将其值默认分配给id列并在ot上添加主键。这使得它有更多的陈述,然后你有ATM ...