postgresql - 在 PostgreSQL 中创建表作为选择

标签 postgresql

PostgreSQL 中的

CREATE TABLE AS SELECT 语句不会使用具有原始表的 NOT NULL 约束的列创建新表。

我的表 tab1 的 col1 和 col2 没有空约束。

创建表 tab1(col1 varchar(23) 不为空,col2 int 不为空)

现在我正在创建一个新表 tab2,其中包含表 tab2 的定义和数据,如下所示:

create table tab2 as select col1,col2 from tab1

但是 tab2 的 col1 和 col2 没有 NOT NULL 约束。如何在原始表的新表列中获取确切的 NOT NULL 约束状态?

如果有任何方法可以使用 CREATE TABLE AS SELECT 语句实现此目的,我们将不胜感激。 Oracle、DB2 中的 CREATE TABLE AS SELECT 语句和 SQLServer 中的 SELECT .. INTO 将 NOT NULL CONSTRAINT 与数据一起复制。

最佳答案

PostgreSQL 中您正在寻找的功能 is in

CREATE TABLE tablename 
(LIKE parent_table INCLUDING CONSTRAINTS) /* other options too */ 

CREATE TABLE AS,据我所知,可以与完全任意的 SELECT 一起使用,PG 不会检查这是否只涉及一个表,更不用说尝试了推断约束。

关于postgresql - 在 PostgreSQL 中创建表作为选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7739521/

相关文章:

database - 订单行导入无法识别产品外部 ID?

postgresql - 使用 exec 而不是 select 调用函数

postgresql - 多个窗函数的累加和

postgresql - Ubuntu 10.04 到 12.04 = PostgreSQL 7.4 数据库替换为空 9.1

ruby-on-rails - PG::InsufficientPrivilege at/ERROR:关系 schema_migrations 的权限被拒绝

sql - 如何对有序行进行分组?

c# - NHibernate:为 Postgres 添加 DbTypes

如果存在外键,则 PostgreSQL 插入

sql - Alfresco 数据库内容大小和内容存储大小 : How to match?

postgresql - SQLAlchemy postgresql.ARRAY 大小