当前位置: 七九推 > IT编程>数据库>MSSQL > PostgreSQL 复制表的 5 种方式详解

PostgreSQL 复制表的 5 种方式详解

2023年01月20日 MSSQL 我要评论
postgresql 提供了多种不同的复制表的方法,它们的差异在于是否需要复制表结构或者数据。create table as select 语句create table as select 语句可以用

postgresql 提供了多种不同的复制表的方法,它们的差异在于是否需要复制表结构或者数据。

create table as select 语句

create table as select 语句可以用于复制表结构和数据,但是不会复制索引。

我们可以使用以下语句基于 employee 复制一个新表 emp2,包括表中的数据:

create table emp2 
as
select * from employee;

如果只想要复制表结构,不复制数据,可以增加 with no data 子句:

create table emp2 
as
select * from employee
with no data;

或者也可以使用一个不返回任何结果的查询语句,例如:

create table emp2 
as
select * from employee
where false;

这种复制方法不会创建任何索引或者约束,例如主键、外键以及 not null 约束等。

create table like 语句

create table like 语句也可以用于复制表结构:

create table emp3 
(like employee);

语法中的括号是必不可少的,而且这种方法不会复制数据,但是会复制字段的 not null 约束。

create table as table 语句

create table as table 语句可以复制表结构和数据,例如:

create table emp4 
as 
table employee
with no data;

这种语法不会复制索引、外键以及非空约束等。

如果不需要复制数据,可以使用 with no data 子句:

create table emp4 
as 
table employee
with no data;

select into 语句

select into 语句可以复制表结构和数据,但是不包含索引等。例如:

select * into emp5 from employee;

postgresql 推荐使用 create table as 替代 select into 语句实现类似效果,因为前者适用性更广,功能更全。

create table inherits 语句

postgresql 支持 create table 语句的 inherit 子句,用于继承表结构。这种复制表的方法和其他方法有所区别,任何针对父表的修改通常也会自动修改子表。

另外,这种方法还可以为子表定义额外的字段。例如:

create table emp5 (
    notes text not null
) 
inherits ( employee );

其中,notes 是我们额外定义的字段,其他字段继承 employee。

使用 psql \d 命令查看 emp5 的结构如下:

\d emp5

                        table "public.emp5"
  column   |          type          | collation | nullable | default
-----------+------------------------+-----------+----------+---------
 emp_id    | integer                |           | not null |
 emp_name  | character varying(50)  |           | not null |
 sex       | character varying(10)  |           | not null |
 dept_id   | integer                |           | not null |
 manager   | integer                |           |          |
 hire_date | date                   |           | not null |
 job_id    | integer                |           | not null |
 salary    | numeric(8,2)           |           | not null |
 bonus     | numeric(8,2)           |           |          |
 email     | character varying(100) |           | not null |
 notes     | text                   |           | not null |
check constraints:
    "ck_emp_salary" check (salary > 0::numeric)
    "ck_emp_sex" check (sex::text = any (array['男'::character varying, '女'::character varying]::text[]))
inherits: employee

到此这篇关于postgresql 复制表的 5 种方式的文章就介绍到这了,更多相关postgresql 复制表内容请搜索七九推以前的文章或继续浏览下面的相关文章希望大家以后多多支持七九推!

(0)
打赏 微信扫一扫 微信扫一扫

相关文章:

  • Kotlin关于协程是什么的探究

    Kotlin关于协程是什么的探究

    kotlin协程是什么本文只是自己经过研究后,对 kotlin 协程的理解概括,如有偏差,还请斧正。简要概括:协程是 kotlin 提供的一套线程 api 框架... [阅读全文]
  • sqlserver 合并列数据的实现

    sqlserver 合并列数据的实现

    sql server 递归查询树型结构某节点的所有上级节点,并且把这些所有上级节点多行拼接为一行,即合并列数据with eps_root(pk_eps, pk_... [阅读全文]
  • SQLServer 清理日志的实现

    SQLServer 清理日志的实现

    本文以sql2012为例第一步,(查询日志中文件名和大小):use 数据库名goselect file_id, name,size,* from sys.dat... [阅读全文]
  • SQL 嵌套查询的具体使用

    嵌套查询又称子查询,有select子查询,where子查询,from子查询,exists子查询。插入数据#创建表及插入记录create table class ( cid int…

    2023年01月27日 数据库
  • Nginx中Location配置超详细讲解

    Nginx中Location配置超详细讲解

    一、语法location 是 nginx 中一个非常核心的配置,关于location,举个简单的配置例子:server { listen 80; s... [阅读全文]
  • SQLserver中的any和all运算符的用法

    SQLserver中的any和all运算符的用法

    一,sql server any 运算符any 是一个逻辑运算符 ,它将值与子查询返回的一组进行比较。any运算符必须要结合比较运算符使用,>,>=... [阅读全文]

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2023  七九推 保留所有权利. 粤ICP备17035492号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com