Skip to main content
 首页 » 数据库

PostgreSQL Copy Table 教程

2022年07月19日118jiqing9006

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
阅读延展