在一个语句中使用PRIMARY KEY创建表AS(PostgreSQL)

时间:2012-06-24 09:37:54

标签: postgresql primary-key create-table

有没有办法在单个“CREATE TABLE AS”语句中设置PRIMARY KEY?

示例 - 我希望将以下内容写入1个语句而不是2:

 CREATE TABLE "new_table_name" AS SELECT a.uniquekey, a.some_value + b.some_value FROM "table_a" AS a, "table_b" AS b WHERE a.uniquekey=b.uniquekey;
 ALTER TABLE "new_table_name" ADD PRIMARY KEY (uniquekey);

是否有更好的方法可以做到这一点(假设有超过2个表,例如10个)?

6 个答案:

答案 0 :(得分:40)

根据手册:create tablecreate table as,您可以:

    首先使用主键
  • 创建表,然后使用选择
  • 首先将表格设为,稍后再使用添加主键

但不是两个使用主键创建表 - 你想要的。

答案 1 :(得分:13)

如果要创建一个具有与另一个表相同的表结构的新表,可以在一个语句(创建新表和设置主键)中执行此操作,如下所示:

create table mytable_clone (like mytable including defaults including constraints including indexes);

答案 2 :(得分:0)

不,没有更短的方法来创建表和主键。

答案 3 :(得分:0)

在mysql中,两个都可以在一个命令中

命令是

create table new_tbl (PRIMARY KEY(`id`)) as select * from old_tbl;

其中id是主键为old_tbl的列

...完成

答案 4 :(得分:0)

请参见下面的命令,它将创建一个具有所有约束且没有数据的新表。在postgres 9.5中工作

CREATE TABLE IF NOT EXISTS <ClonedTableName>(like <OriginalTableName> including all)

答案 5 :(得分:-4)

你可以这样做

CREATE TABLE IOT (EMPID,ID,Name, CONSTRAINT PK PRIMARY KEY( ID,EMPID)) 
 ORGANIZATION INDEX NOLOGGING COMPRESS 1 PARALLEL 4
AS SELECT 1 as empid,2 id,'XYZ' Name FROM dual;