PostgreSQL提供了多种不同的复制表的方法,它们的差异在于是否需要复制表结构或者数据,这篇文章主要介绍了PostgreSQL复制表的5种方式,需要的朋友可以参考下
PostgreSQL 提供了多种不同的复制表的方法,它们的差异在于是否需要复制表结构或者数据。
CREATE TABLE AS SELECT 语句
CREATE TABLE AS SELECT 语句可以用于复制表结构和数据,但是不会复制索引。
我们可以使用以下语句基于 employee 复制一个新表 emp2,包括表中的数据:
CREATE TABLE emp2
AS
SELECT * FROM employee;
如果只想要复制表结构,不复制数据,可以增加 WITH NO DATA 子句:
CREATE TABLE emp2
AS
SELECT * FROM employee
WITH NO DATA;
或者也可以使用一个不返回任何结果的查询语句,例如:
CREATE TABLE emp2
AS
SELECT * FROM employee
WHERE FALSE;
这种复制方法不会创建任何索引或者约束,例如主键、外键以及 NOT NULL 约束等。
CREATE TABLE LIKE 语句
CREATE TABLE LIKE 语句也可以用于复制表结构:
CREATE TABLE emp3
(LIKE employee);
语法中的括号是必不可少的,而且这种方法不会复制数据,但是会复制字段的 NOT NULL 约束。
CREATE TABLE AS TABLE 语句
CREATE TABLE AS TABLE 语句可以复制表结构和数据,例如:
CREATE TABLE emp4
AS
TABLE employee
WITH NO DATA;
这种语法不会复制索引、外键以及非空约束等。
如果不需要复制数据,可以使用 WITH NO DATA 子句:
CREATE TABLE emp4
AS
TABLE employee
WITH NO DATA;
SELECT INTO 语句
SELECT INTO 语句可以复制表结构和数据,但是不包含索引等。例如:
SELECT * INTO emp5 FROM employee;
PostgreSQL 推荐使用 CREATE TABLE AS 替代 SELECT INTO 语句实现类似效果,因为前者适用性更广,功能更全。
CREATE TABLE INHERITS 语句
PostgreSQL 支持 CREATE TABLE 语句的 INHERIT 子句,用于继承表结构。这种复制表的方法和其他方法有所区别,任何针对父表的修改通常也会自动修改子表。
另外,这种方法还可以为子表定义额外的字段。例如:
CREATE TABLE emp5 (
notes text NOT NULL
)
INHERITS ( employee );
其中,notes 是我们额外定义的字段,其他字段继承 employee。
使用 psql \d 命令查看 emp5 的结构如下:
\d emp5
Table "public.emp5"
Column | Type | Collation | Nullable | Default
-----------+------------------------+-----------+----------+---------
emp_id | integer | | not null |
emp_name | character varying(50) | | not null |
sex | character varying(10) | | not null |
dept_id | integer | | not null |
manager | integer | | |
hire_date | date | | not null |
job_id | integer | | not null |
salary | numeric(8,2) | | not null |
bonus | numeric(8,2) | | |
email | character varying(100) | | not null |
notes | text | | not null |
Check constraints:
"ck_emp_salary" CHECK (salary > 0::numeric)
"ck_emp_sex" CHECK (sex::text = ANY (ARRAY['男'::character varying, '女'::character varying]::text[]))
Inherits: employee
到此这篇关于PostgreSQL 复制表的 5 种方式的文章就介绍到这了,更多相关PostgreSQL 复制表内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!
本文标题为:PostgreSQL 复制表的 5 种方式详解
- SQL Server 2022 AlwaysOn新特性之包含可用性组详解 2023-07-29
- Mongodb启动报错完美解决方案:about to fork child process,waiting until server is ready for connections. 2023-07-16
- SQLSERVER调用C#的代码实现 2023-07-29
- redis清除数据 2023-09-13
- MySQL8.0.28安装教程详细图解(windows 64位) 2023-07-26
- Oracle 删除大量表记录操作分析总结 2023-07-23
- 搭建单机Redis缓存服务的实现 2023-07-13
- Numpy中如何创建矩阵并等间隔抽取数据 2023-07-28
- 在阿里云CentOS 6.8上安装Redis 2023-09-12
- 基于Python制作一个简单的文章搜索工具 2023-07-28