在一个语句中使用 PRIMARY KEY 创建 TABLE AS (PostgreSQL)
Posted
技术标签:
【中文标题】在一个语句中使用 PRIMARY KEY 创建 TABLE AS (PostgreSQL)【英文标题】:CREATE TABLE AS with PRIMARY KEY in one statement (PostgreSQL) 【发布时间】:2012-06-25 22:39:21 【问题描述】:有没有办法在单个“CREATE TABLE AS”语句中设置主键?
示例 - 我希望将以下内容写入 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 个)?
【问题讨论】:
【参考方案1】:请参见下面的命令,它将创建一个包含所有约束且没有数据的新表。在 postgres 9.5 中工作
CREATE TABLE IF NOT EXISTS <ClonedTableName>(like <OriginalTableName> including all)
【讨论】:
【参考方案2】:在 mysql 中,两者都可以在一个命令中实现
命令是
create table new_tbl (PRIMARY KEY(`id`)) as select * from old_tbl;
id
是主键为 old_tbl 的列
完成...
【讨论】:
投反对票,因为这是 mysql 语法,而不是 postgres(根据问题)。在 postgres 中是不可能的。 好吧,在发布问题的同时,我在 mysql 中遇到了完全相同的问题,我自己用这个命令解决了这个问题,所以我认为这对我的朋友可能有用。(除了我不允许尚未发表评论,并认为 Postgre SQL 的 SQL 语法将相同,所以我将其发布为答案)无论如何感谢您扩展我对 postgre sql 的知识...... 投票赞成,即使这不是对我有用的问题;)【参考方案3】:你可以这样做
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;
【讨论】:
这对 Postgres 无效 看起来像 Oracle 语法【参考方案4】:如果您想创建一个与另一个表具有相同表结构的新表,您可以在一个语句中执行此操作(创建新表和设置主键),如下所示:
create table mytable_clone (like mytable including defaults including constraints including indexes);
【讨论】:
【参考方案5】:根据手册:create table 和 create table as 您可以:
先用主键创建表,稍后再使用select into 先创建表,稍后使用添加主键但不是两者都 create table as with primary key - 你想要的。
【讨论】:
在这两个选项中,在数据加载后创建主键(及其关联索引)可能会更快。【参考方案6】:不,没有更短的方法来创建表和主键。
【讨论】:
以上是关于在一个语句中使用 PRIMARY KEY 创建 TABLE AS (PostgreSQL)的主要内容,如果未能解决你的问题,请参考以下文章
如何在 postgres 中集群我的 PRIMARY KEY
为啥必须将表中的至少一列(在 MySQL 中)分配为 PRIMARY KEY,以便表通过 JDBC 接受 UPDATE 和 INSERT 语句?
使用实体框架添加记录时违反链接记录的PRIMARY KEY约束
Flink 实战系列Incremental snapshot for tables requires primary key, but table test.ab doesn’t have pri
Flink 实战系列Incremental snapshot for tables requires primary key, but table test.ab doesn’t have pri