PostgreSQL Copy Table 教程

it2025-04-18  4

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的拷贝表功能,包括拷贝结构和数据。

最新回复(0)