首页 > 数据库 >PostgreSQL 复制表的 5 种方式详解

PostgreSQL 复制表的 5 种方式详解

时间:2023-06-11 10:33:52浏览次数:414  
标签:语句 PostgreSQL CREATE 详解 复制 employee TABLE SELECT

 

PostgreSQL 提供了多种不同的复制表的方法,它们的差异在于是否需要复制表结构或者数据。

CREATE TABLE AS SELECT 语句可以用于复制表结构和数据,但是不会复制索引。

我们可以使用以下语句基于 employee 复制一个新表 emp2,包括表中的数据:

1 2 3 CREATE TABLE emp2 AS SELECT * FROM employee;

如果只想要复制表结构,不复制数据,可以增加 WITH NO DATA 子句:

1 2 3 4 CREATE TABLE emp2 AS SELECT * FROM employee WITH NO DATA;

或者也可以使用一个不返回任何结果的查询语句,例如:

1 2 3 4 CREATE TABLE emp2 AS SELECT * FROM employee WHERE FALSE;

这种复制方法不会创建任何索引或者约束,例如主键、外键以及 NOT NULL 约束等。

 

CREATE TABLE LIKE 语句

CREATE TABLE LIKE 语句也可以用于复制表结构:

1 2 CREATE TABLE emp3 (LIKE employee);

语法中的括号是必不可少的,而且这种方法不会复制数据,但是会复制字段的 NOT NULL 约束。

CREATE TABLE AS TABLE 语句

CREATE TABLE AS TABLE 语句可以复制表结构和数据,例如:

1 2 3 4 CREATE TABLE emp4 AS TABLE employee WITH NO DATA;

这种语法不会复制索引、外键以及非空约束等。

如果不需要复制数据,可以使用 WITH NO DATA 子句:

1 2 3 4 CREATE TABLE emp4 AS TABLE employee WITH NO DATA;

SELECT INTO 语句

SELECT INTO 语句可以复制表结构和数据,但是不包含索引等。例如:

1 SELECT * INTO emp5 FROM employee;

PostgreSQL 推荐使用 CREATE TABLE AS 替代 SELECT INTO 语句实现类似效果,因为前者适用性更广,功能更全。

CREATE TABLE INHERITS 语句

PostgreSQL 支持 CREATE TABLE 语句的 INHERIT 子句,用于继承表结构。这种复制表的方法和其他方法有所区别,任何针对父表的修改通常也会自动修改子表。

另外,这种方法还可以为子表定义额外的字段。例如:

1 2 3 4 CREATE TABLE emp5 (     notes text NOT NULL ) INHERITS ( employee );

其中,notes 是我们额外定义的字段,其他字段继承 employee。

使用 psql \d 命令查看 emp5 的结构如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 \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,CREATE,详解,复制,employee,TABLE,SELECT
From: https://www.cnblogs.com/pythonClub/p/17472584.html

相关文章

  • postgresql/lightdb批量导入导出数据系列copy/ltuldr/ltldr/lt_bulkload及最佳实践推
    文件位于服务器上,这就限制了使用范围。为此,对于导出,lightdb提供了高性能导出版本ltuldr。对于导入,lightdb在23.1之前提供lt_bulkload,见下文;从23.1开始,支持和oraclesql*loader对应的ltldr。copy可用于快速导入和导出数据,主要用途如下:TheCOPYcommandmovesdatabetweenPostg......
  • K8S 证书详解(认证)
    K8S证书介绍在Kube-apiserver中提供了很多认证方式,其中最常用的就是TLS认证,当然也有BootstrapToken,BasicAuth认证等,只要有一个认证通过,那么Kube-apiserver即认为认证通过。下面就主要讲解TLS认证。如果你是使用kubeadm安装的Kubernetes,则会自动生成集群所需的证......
  • iptables使用详解
    一、iptables简介iptables是linux自带的一款防火墙工具,它能帮助我们基于规则完成数据包过滤、数据包重定向和网络地址转换功能。   严格的说,iptables其实不是真正的防火墙,我们可以把它理解成一个客户端代理,用户通过iptables这个代理,将用户的安全设定执行到对应的”安全框架”......
  • INFINI Labs 产品更新 | Easysearch 新增跨集群复制 (CCR)、支持快照生命周期管理 (SL
    INFINILabs产品重量级更新!!!本次更新了很多亮点功能,如Easysearch新增跨集群复制(CCR)、支持快照生命周期管理(SLM)功能等;支持多集群、跨版本的搜索基础设施统一管控平台Console新增了免费授权申请功能等。欢迎大家下载使用。Console在线体验:http://demo.infini.cloud(......
  • 详解Python线程对象daemon属性对线程退出的影响
    进程、线程的概念以及多线程编程的基础知识请参考文末给出的方式在公众号历史文章中查找相关文章进行阅读。本文重点介绍线程对象daemon属性在线程退出时产生的作用和影响。首先,我们来看一下官方文档对守护线程(daemonthread)的描述:再来看一下官方文档对线程对象daemon属性的描述:可......
  • mysql 主从复制 原理
     mysql主从复制定义mysql主从复制是一种数据同步的技术,它可以让一个或多个从数据库(slave)复制主数据库(master)的数据变化。这样可以提高数据库的可用性、性能和扩展性,也可以实现读写分离和数据备份。mysql主从复制原理mysql主从复制的原理是基于二进制日志(binlog)的,主数据库......
  • Python正则表达式常用flag含义与用法详解
    Python正则表达式模块re中很多函数都支持一个flag参数,用来对正则表达式进行补充说明,例如findall(pattern,string,flags=0)match(pattern,string,flags=0)search(pattern,string,flags=0)sub(pattern,repl,string,count=0,flags=0)split(pattern,string,maxsplit=0,fla......
  • PostgreSQL常用运维SQL
    一、数据库连接1、获取数据库实例连接数selectcount(*)frompg_stat_activity;2、获取数据库最大连接数showmax_connections3、查询当前连接数详细信息select*frompg_stat_activity;4、查询数据库中各个用户名对应的数据库连接数selectusename,count(*)fr......
  • NGINX配置详解
    NGINX配置详解关于ngx虽然一直在用,但是对其配置及详细作用有些一知半解,本周趁有时间刚好一起梳理下。本篇文章将包括常用的ngx功能,如代理及负载均衡等,争取内容尽量全面丰富一些。什么是NGXNginx是开源的轻量级Web服务器、反向代理服务器,以及负载均衡器和HTTP缓存器。其特......
  • 详解Angular路由之子路由
    原文:https://www.jb51.net/article/213074.htm一、子路由语法二、实例1、新建2个组件修改其内容2、修改路由配置3、修改product.component.ts的模版一、子路由语法二、实例在商品详情页面,除了显示商品id信息,还显示了商品描述,和销售员的信息。通过子路由实现商品......