📜  PostgreSQL – 复制表

📅  最后修改于: 2022-05-13 01:57:15.770000             🧑  作者: Mango

PostgreSQL – 复制表

本文将重点介绍将现有表复制到 PostgreSQL 中的新表。这在创建新表时可能会派上用场,这些新表要么具有相同的数据,要么具有相同表的数据并对它们执行某些操作。

我们将讨论以下 3 种情况:

  1. 具有相同结构和数据的复制表。
  2. 具有相同结构且没有数据的复制表。
  3. 具有相同结构和部分数据的复制表。

复制具有相同结构和数据的表

要复制包含其所有结构和数据的表,请使用以下查询:

Syntax:
CREATE TABLE new_table AS TABLE old_table;

例子:

让我们向数据库添加一个包含idfirst_namelast_nameemail 列的表:



CREATE TABLE students(
   id SERIAL PRIMARY KEY,
   first_name VARCHAR,
   last_name VARCHAR,
   email VARCHAR UNIQUE
);

让我们在学生表中插入一些数据:

INSERT INTO students(first_name, last_name, email)
VALUES('Virender', 'Sehwag', 'virender.sehwag@gfg.com'),
    ('Hardik', 'Pandiya', 'hardik.Pandiya@gfg.com');

现在检查表中的数据:

SELECT * FROM students;

如果一切正常,输出如下:

现在将学生表复制到名为copy_students表的新表。

CREATE TABLE copy_students AS TABLE students;

上述查询将创建一个名为copy_students的新表,其结构和数据与学生表相同。

现在检查copy_students表的数据:

SELECT * FROM copy_students;

输出:



复制结构相同且无数据的表

WITH NO DATA子句用于使用以下查询复制没有数据的表结构:

Syntax:
CREATE TABLE new_table AS TABLE old_table WITH NO DATA;

例子:

让我们使用我们之前创建的学生表:

CREATE TABLE without_data_students AS TABLE students WITH NO DATA;

执行上面的查询,得到与没有数据的students结构相同的表without_data_students。

SELECT * FROM without_data_students;

输出:

复制具有相同结构和部分数据的表

以下查询可用于根据指定条件复制表:

Syntax:
CREATE TABLE new_table AS TABLE old_table WHERE condition;

例子:

让我们在学生表中插入更多行:



INSERT INTO students(first_name, last_name, email)
VALUES('Shreyas', 'Iyer', 'shreyas.iyer@gfg.com'),
    ('Rishabh', 'Pant', 'rishabh.pant@gfg.com');

现在学生表将包含以下数据:

SELECT * FROM students;

现在学生表将如下所示:

让我们创建一个表copy_partial_students ,只有 id 1 和 3:

CREATE TABLE copy_partial_students AS SELECT * FROM students WHERE  id IN (1, 3);

除了* ,您还可以定义要复制的列名称。结果表列的名称和数据类型与 SELECT 子句的输出列相同。

现在检查copy_partial_students表的数据:

SELECT * FROM copy_partial_students;

输出: