我第一次找到非常方便的导入方式"去年的数据"到今年的数据" 这很有效:
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)命令?
欢迎任何其他有关展示情况的建议。
答案 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 ...