PostgreSQL – 复制表
本文将重点介绍将现有表复制到 PostgreSQL 中的新表。这在创建新表时可能会派上用场,这些新表要么具有相同的数据,要么具有相同表的数据并对它们执行某些操作。
我们将讨论以下 3 种情况:
- 具有相同结构和数据的复制表。
- 具有相同结构且没有数据的复制表。
- 具有相同结构和部分数据的复制表。
复制具有相同结构和数据的表
要复制包含其所有结构和数据的表,请使用以下查询:
Syntax:
CREATE TABLE new_table AS TABLE old_table;
例子:
让我们向数据库添加一个包含id 、 first_name 、 last_name和email 列的表:
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;
输出: