PostgreSQL Copy Table 教程

本文详细介绍如何在PostgreSQL中拷贝已存在的表及其数据,包括表结构的完整复制及部分数据的选择性复制,并演示了如何手动添加约束。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值