广告位联系
返回顶部
分享到

PostgreSQL复制表的5种方法

PostgreSQL 来源:互联网 作者:佚名 发布时间:2023-01-22 10:05:37 人浏览
摘要

PostgreSQL 提供了多种不同的复制表的方法,它们的差异在于是否需要复制表结构或者数据。 CREATE TABLE AS SELECT 语句 CREATE TABLE AS SELECT 语句可以用于复制表结构和数据,但是不会复制索引

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

CREATE TABLE AS SELECT 语句

CREATE TABLE AS SELECT 语句可以用于复制表结构和数据,但是不会复制索引。

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

1

2

3

CREATE TABLE emp2

AS

SELECT * FROM employee;

如果只想要复制表结构,不复制数据,可以增加 WITH NO DATA 子句:

1

2

3

4

CREATE TABLE emp2

AS

SELECT * FROM employee

WITH NO DATA;

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

1

2

3

4

CREATE TABLE emp2

AS

SELECT * FROM employee

WHERE FALSE;

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

CREATE TABLE LIKE 语句

CREATE TABLE LIKE 语句也可以用于复制表结构:

1

2

CREATE TABLE emp3

(LIKE employee);

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

CREATE TABLE AS TABLE 语句

CREATE TABLE AS TABLE 语句可以复制表结构和数据,例如:

1

2

3

4

CREATE TABLE emp4

AS

TABLE employee

WITH NO DATA;

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

如果不需要复制数据,可以使用 WITH NO DATA 子句:

1

2

3

4

CREATE TABLE emp4

AS

TABLE employee

WITH NO DATA;

SELECT INTO 语句

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

1

SELECT * INTO emp5 FROM employee;

PostgreSQL 推荐使用 CREATE TABLE AS 替代 SELECT INTO 语句实现类似效果,因为前者适用性更广,功能更全。

CREATE TABLE INHERITS 语句

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

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

1

2

3

4

CREATE TABLE emp5 (

    notes text NOT NULL

)

INHERITS ( employee );

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

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

\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


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 : https://blog.csdn.net/horses/article/details/128697909
相关文章
  • postgresql使用dblink跨库增删改查的步骤介绍
    postgresql使用dblink跨库增删改查 一、使用步骤 1、创建dblink扩展,连接与被连接的两个数据库都要执行下面sql 1 create extension if not exists dblin
  • PostgreSQL复制表的5种方法
    PostgreSQL 提供了多种不同的复制表的方法,它们的差异在于是否需要复制表结构或者数据。 CREATE TABLE AS SELECT 语句 CREATE TABLE AS SELECT 语句可以
  • postgresql13主从搭建Ubuntu的教程

    postgresql13主从搭建Ubuntu的教程
    先安装完数据库以后,安装路径如下: 数据库安装完毕以后, 服务的安装路径为:/usr/lib/postgresql/13/bin/ 数据路径为:/var/lib/postgresql/13/ma
  • Postgresql删除数据库表中重复数据的几种方法
    一直使用Postgresql数据库,有一张表是这样的: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 DROP TABLE IF EXISTS public.devicedata; CREATE TABLE public.devicedata ( Id varchar(20
  • PostgreSQL HOT与PHOT有哪些区别

    PostgreSQL HOT与PHOT有哪些区别
    1、HOT概述 PostgreSQL中,由于其多版本的特性,当我们进行数据更新时,实际上并不是直接修改元数据,而是通过新插入一行数据来进行间接
  • PostgreSQL索引失效会发生什么?

    PostgreSQL索引失效会发生什么?
    前段时间碰到个奇怪的索引失效的问题,实际情况类似下面这样: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 bill=# begin; BEGIN bill=*# create inde
  • PostgreSQL pg_filenode.map文件介绍

    PostgreSQL pg_filenode.map文件介绍
    今天在网上看到有人问误删pg_filenode.map该如何恢复或者重建,解决这个问题前我们先来了解下pg_filenode.map文件。 对于PostgreSQL中的每张表在磁
  • PostgreSQL limit的神奇作用介绍
    最近碰到这样一个SQL引发的性能问题,SQL内容大致如下: 1 2 3 4 5 6 7 SELECT * FROM t1 WHERE id = 999 AND (case $1 WHEN true THEN info = $2 ELSE info = $3 end) l
  • PostgreSql生产级别数据库安装要注意事项

    PostgreSql生产级别数据库安装要注意事项
    我让公司的小伙伴写一个生产级别的PostgreSQL的安装文档,结果他和我说:不是用一个命令就能安装好么?还用写文档么?。我知道他想说的
  • PostgreSQL12.5中分区表的一些操作介绍
    1、创建一个有DEFAULT的分区表 1、先创建主表 1 2 3 4 5 6 7 8 9 10 11 12 13 14 create table tbl_log ( id serial, create_time timestamp(0) without time zone, remark char
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计