九月 19, 2023
摘要:在本教程中,我们将逐步向您展示如何使用 PostgreSQL 中各种形式的复制表语句复制现有表,包括表结构和数据。
目录
PostgreSQL 复制表语句简介
要完全复制一个表,包括表结构和数据,请使用以下语句:
CREATE TABLE new_table AS
TABLE existing_table;
要不带数据的复制表结构,请将WITH NO DATA
子句添加到CREATE TABLE
语句中,如下所示:
CREATE TABLE new_table AS
TABLE existing_table
WITH NO DATA;
要从现有表复制表,并包含部分的数据,请使用以下语句:
CREATE TABLE new_table AS
SELECT
*
FROM
existing_table
WHERE
condition;
查询的 WHERE 子句中的条件,定义了现有表的哪些行将复制到新表。
请注意,上述所有语句都只复制表结构和数据,但不复制现有表的索引和约束。
PostgreSQL 复制表示例
以下语句创建一个新表,名为contacts
,用于演示:
CREATE TABLE contacts(
id SERIAL PRIMARY KEY,
first_name VARCHAR NOT NULL,
last_name VARCHAR NOT NULL,
email VARCHAR NOT NULL UNIQUE
);
在此表中,我们有两个索引:一个索引用于主键,另一个索引用于 UNIQUE 约束。
让我们向contacts
表中插入一些行:
INSERT INTO contacts(first_name, last_name, email)
VALUES('John','Doe','john.doe@rockdata.net'),
('David','William','david.william@rockdata.net');
要将contacts
复制到新表(例如contacts_backup
表),请使用以下语句:
CREATE TABLE contact_backup
AS TABLE contacts;
该语句创建一个名为contact_backup
的新表,其结构与contacts
表相同。此外,它将数据从contacts
表复制到contact_backup
表。
我们使用以下 SELECT 语句来检查contact_backup
表的数据:
SELECT * FROM contact_backup;
id | first_name | last_name | email
----+------------+-----------+------------------------------
1 | John | Doe | john.doe@rockdata.net
2 | David | William | david.william@rockdata.net
(2 rows)
它按预期返回两行。
要检查contact_backup
表的结构:
test=# \d contact_backup;
Table "public.contact_backup"
Column | Type | Modifiers
------------+-------------------+-----------
id | integer |
first_name | character varying |
last_name | character varying |
email | character varying |
正如您在输出中看到的,除了索引之外,contact_backup
表的结构与contacts
表相同。
要将主键和UNIQUE
约束添加到contact_backup
表中,请使用以下 ALTER TABLE 语句:
ALTER TABLE contact_backup ADD PRIMARY KEY(id);
ALTER TABLE contact_backup ADD UNIQUE(email);
要再次查看contact_backup
表的结构,可以使用\d
命令:
test=# \d contact_backup;
Table "public.contact_backup"
Column | Type | Modifiers
------------+-------------------+-----------
id | integer | not null
first_name | character varying |
last_name | character varying |
email | character varying |
Indexes:
"contact_backup_pkey" PRIMARY KEY, btree (id)
"contact_backup_email_key" UNIQUE CONSTRAINT, btree (email)
在本教程中,您学习了如何使用 PostgreSQL 中各种形式的复制表语句将现有表复制到新表。