PostgreSQL Copy Table 教程
本文带你一步一步学习如何拷贝已存在的表,包括表结构和数据。主要使用PostgreSql的copy表语句。
1. 介绍PostgreSQL copy表语句
为了完整拷贝表,包括表结构和数据,需要使用下面语句:
CREATE TABLE new_table AS TABLE existing_table;
只拷贝结构,创建表时需增加With no data
子句:
CREATE TABLE new_table AS TABLE existing_table WITH NO DATA;
从已存在表中拷贝部分数据,使用下面语句:
CREATE TABLE new_table AS SELECT*FROM existing_tableWHERE condition;
where子句定义查询条件,用于筛选数据。但并不拷贝原表的索引和约束。
2. copy表示例
下面语句创建新表 contracts 用于演示:
CREATE TABLE contacts(
id SERIAL PRIMARY KEY,
first_name VARCHAR NOT NULL,
last_name VARCHAR NOT NULL,
email VARCHAR NOT NULL UNIQUE
);
该表有两个索引,主键索引和唯一索引。接着插入一些示例数据:
INSERT INTO contacts(first_name, last_name, email)
VALUES('John','Doe','john.doe@postgresqltutorial.com'),
('David','William','david.william@postgresqltutorial.com');
为了拷贝contacts
至新表,如 contacts_backup
,使用下面语句:
CREATE TABLE contact_backup AS TABLE contacts;
该语句创建表 contact_backup
,其结构与 contacts
一样,另外也拷贝了数据。
下面对拷贝表进行验证:
SELECT * FROM contact_backup;
id | first_name | last_name | email
1 | John | Doe | john.doe@postgresqltutorial.com
2 | David | William | david.william@postgresqltutorial.com(2 rows)
返回两行,与期望一致。
检验下备份表结构:
test=# \d contact_backup;
Table "public.contact_backup" Column | Type | Modifiers
id | integer |
first_name | character varying |
last_name | character varying |
email | character varying |
从输出能看到,其结构与原表结构一样,除了索引。为了给备份表增加主键和唯一约束,需要使用 alter table
语句:
ALTER TABLE contact_backup ADD PRIMARY KEY(id);
ALTER TABLE contact_backup ADD UNIQUE(email);
再次查看备份表结构:
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)
3. 总结
本文带你学习PostgreSql的拷贝表功能,包括拷贝结构和数据。
本文参考链接:https://blog.csdn.net/neweastsun/article/details/109210456