欢迎投稿

今日深度:

PostgreSQL复制表的5种方式详解,

PostgreSQL复制表的5种方式详解,


目录
  • CREATE TABLE AS SELECT 语句
  • CREATE TABLE LIKE 语句
  • CREATE TABLE AS TABLE 语句
  • SELECT INTO 语句
  • CREATE TABLE INHERITS 语句

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 复制表内容请搜索PHP之友以前的文章或继续浏览下面的相关文章希望大家以后多多支持PHP之友!

您可能感兴趣的文章:
  • Postgresql删除数据库表中重复数据的几种方法详解
  • PostgreSQL怎么创建分区表详解
  • 浅谈PostgreSQL表分区的三种方式
  • postgresql 实现字符串分割字段转列表查询

www.htsjk.Com true http://www.htsjk.com/shujukunews/45282.html NewsArticle PostgreSQL复制表的5种方式详解, 目录 CREATE TABLE AS SELECT 语句 CREATE TABLE LIKE 语句 CREATE TABLE AS TABLE 语句 SELECT INTO 语句 CREATE TABLE INHERITS 语句 PostgreSQL 提供了多种不同的复制表的方法,它们...
评论暂时关闭