首页 > 数据库 >PostgreSQL 创建相同结构的表

PostgreSQL 创建相同结构的表

时间:2024-11-13 20:16:53浏览次数:3  
标签:... PostgreSQL name 相同 constraint column 创建 index table

我们经常会遇到这样的需求,就是我有一个表 A,现在表 A 由于设计的时候存在一些缺陷,我现在需要创建一个相同结构的表 B 但是不需要表 A 的数据,只需要保持其原来的表设计即可。有啥快速的方法没有。下面我介绍下几种常见的方法和每种方法的缺点以及最好的方法。

方法一:
BEGIN;
CREATE TABLE B AS SELECT * FROM A LIMIT 1;
DELETE FROM B;
COMMIT;
缺点:该方法表 B 不会包含关于表 A 中的各种约束信息,索引等。

方法二:
CREATE TABLE B AS SELECT * FROM A LIMIT 1 WITH NO DATA;
说明:方法二巧妙的运用了 WITH NO DATA 来实现无数据的结构复制。但是关于索引等约束还是没有。

方法三:
CREATE TABLE B (LIKE A);
说明:与前面的方法类似,只是语句实现上更加的简明。

方法四:
CREATE TABLE B (LIKE A INCLUDING ALL);
说明:该方法可以保留在原表 A 上的约束和索引信息。也是经常使用的方法。下面介绍一下这个选项。


CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXISTS ] table_name ( [
  { column_name data_type [ COLLATE collation ] [ column_constraint [ ... ] ]
    | table_constraint
    | LIKE source_table [ like_option ... ] }
    [, ... ]
] )
[ INHERITS ( parent_table [, ... ] ) ]
[ PARTITION BY { RANGE | LIST | HASH } ( { column_name | ( expression ) } [ COLLATE collation ] [ opclass ] [, ... ] ) ]
[ USING method ]
[ WITH ( storage_parameter [= value] [, ... ] ) | WITHOUT OIDS ]
[ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ]
[ TABLESPACE tablespace_name ]

CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXISTS ] table_name
    OF type_name [ (
  { column_name [ WITH OPTIONS ] [ column_constraint [ ... ] ]
    | table_constraint }
    [, ... ]
) ]
[ PARTITION BY { RANGE | LIST | HASH } ( { column_name | ( expression ) } [ COLLATE collation ] [ opclass ] [, ... ] ) ]
[ USING method ]
[ WITH ( storage_parameter [= value] [, ... ] ) | WITHOUT OIDS ]
[ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ]
[ TABLESPACE tablespace_name ]

CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXISTS ] table_name
    PARTITION OF parent_table [ (
  { column_name [ WITH OPTIONS ] [ column_constraint [ ... ] ]
    | table_constraint }
    [, ... ]
) ] { FOR VALUES partition_bound_spec | DEFAULT }
[ PARTITION BY { RANGE | LIST | HASH } ( { column_name | ( expression ) } [ COLLATE collation ] [ opclass ] [, ... ] ) ]
[ USING method ]
[ WITH ( storage_parameter [= value] [, ... ] ) | WITHOUT OIDS ]
[ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ]
[ TABLESPACE tablespace_name ]

其中 column_constraint 是:

[ CONSTRAINT constraint_name ]
{ NOT NULL |
  NULL |
  CHECK ( expression ) [ NO INHERIT ] |
  DEFAULT default_expr |
  GENERATED ALWAYS AS ( generation_expr ) STORED |
  GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY [ ( sequence_options ) ] |
  UNIQUE index_parameters |
  PRIMARY KEY index_parameters |
  REFERENCES reftable [ ( refcolumn ) ] [ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ]
    [ ON DELETE referential_action ] [ ON UPDATE referential_action ] }
[ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]

table_constraint 是:

[ CONSTRAINT constraint_name ]
{ CHECK ( expression ) [ NO INHERIT ] |
  UNIQUE ( column_name [, ... ] ) index_parameters |
  PRIMARY KEY ( column_name [, ... ] ) index_parameters |
  EXCLUDE [ USING index_method ] ( exclude_element WITH operator [, ... ] ) index_parameters [ WHERE ( predicate ) ] |
  FOREIGN KEY ( column_name [, ... ] ) REFERENCES reftable [ ( refcolumn [, ... ] ) ]
    [ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ] [ ON DELETE referential_action ] [ ON UPDATE referential_action ] }
[ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]

like_option 是:

{ INCLUDING | EXCLUDING } { COMMENTS | CONSTRAINTS | DEFAULTS | GENERATED | IDENTITY | INDEXES | STATISTICS | STORAGE | ALL }

partition_bound_spec 是:

IN ( partition_bound_expr [, ...] ) |
FROM ( { partition_bound_expr | MINVALUE | MAXVALUE } [, ...] )
  TO ( { partition_bound_expr | MINVALUE | MAXVALUE } [, ...] ) |
WITH ( MODULUS numeric_literal, REMAINDER numeric_literal )

UNIQUE、PRIMARY KEY以及EXCLUDE约束中的index_parameters是:

[ INCLUDE ( column_name [, ... ] ) ]
[ WITH ( storage_parameter [= value] [, ... ] ) ]
[ USING INDEX TABLESPACE tablespace_name ]

一个EXCLUDE约束中的exclude_element是:

{ column_name | ( expression ) } [ opclass ] [ ASC | DESC ] [ NULLS { FIRST | LAST } ]

标签:...,PostgreSQL,name,相同,constraint,column,创建,index,table
From: https://blog.csdn.net/2401_83375581/article/details/143651345

相关文章

  • more Layer Architecture in Python and postgreSQL17.0
    postgreSQLscript:createtableSchool--創建表(SchoolIdchar(5)NOTNULLPRIMARYKEY,SchoolNamevarchar(500)NOTNULLDEFAULT'',SchoolTelNovarchar(8)NULLDEFAULT'');model:#encoding:utf-8#版权所有20......
  • HarmonyOS Next 入门实战 - 创建项目、主题适配
    ​开发一个简单的demo,其中涉及一些鸿蒙应用开发的知识点,其中涉及导航框架,常用组件,列表懒加载,动画,深色模式适配,关系型数据库等内容,在实践中学习和熟悉鸿蒙应用开发。​​​​首先下载并安装DevEcoStudio开发环境,下载完成后按照提示安装即可,过程不在多说。DevEcoStudio-Harmo......
  • 使用 WinNTSetup 来安装 Windows 11 24H2 或 Windows Server 2025 可以帮助你快速创建
    使用WinNTSetup来安装Windows1124H2或WindowsServer2025可以帮助你快速创建和部署操作系统。以下是详细的步骤:1.准备工作在开始之前,确保你已经具备以下条件:WinNTSetup 工具。可以从官方网站或者其他可信的来源下载WinNTSetup。Windows1124H2或WindowsServe......
  • Python 桌面应用开发:使用 Tkinter 创建 GUI 应用程序
    Python桌面应用开发:使用Tkinter创建GUI应用程序引言随着计算机技术的飞速发展,桌面应用程序依然在许多领域中发挥着重要作用。Python作为一种强大的编程语言,提供了多种工具和库来创建桌面应用程序。其中,Tkinter是Python的标准GUI(图形用户界面)库,易于使用且功能强......
  • 使用 PowerShell 创建多个 .reg 文件进行分段(切片)并且能够在执行时按顺序合并并执行,我
    使用PowerShell创建多个.reg文件进行分段(切片)并且能够在执行时按顺序合并并执行,我们可以按照以下步骤进行:目标:将一个大的 .reg 文件分割成多个小文件。每个小文件(分段)都将是一个有效的 .reg 文件,可以独立执行。使用PowerShell自动生成这些分段 .reg 文件,并执行它......
  • java 创建对象有几种方式?
    1、使用new关键字,最常见的创建方式,通过调用类的构造方法(构造器)来创建对象。2、使用反射,通过java的反射API可以动态的创建对象,反射允许在运行时获取类的信息,并且可以调用类的构造方法创建对象。3、使用克隆,如果一个类实现了Cloneable接口并重写了Object类的clone()方法,那么可以通......
  • 如何选择CMS网站管理系统来创建网站呢?
    在网站规划中,选择一个合适的CMS(内容管理系统)尤其重要。CMS是一种用于制作、编辑和管理网站内容的建站工具,它能降低建站的难度、节省建站的时间、提高网站创建的效率和质量。当然、想提高网站创建的质量,还是得选对CMS,但是市场上有各种不同类型的CMS品牌,那么如何选择适合自己......
  • mysql创建表
    创建表创建表要先选中数据库名createtable表名(列名类型)来进行创建,列名可以存在多个,表名和列名不可以一样,想要一样的话就要使用反引号把表名和列名引起来列名在前面,类型在后面查看所有表showtables查看当前数据库所有表 查看指定表的结构desc表名;把表的特征描述出......
  • PostgreSQL的奥秘:深入探究事务与锁的秘密世界
    PostgreSQL事务1.概述在数据库系统中,事务(Transaction)是执行数据库操作的最小逻辑单位。它确保了一组操作的完整性和一致性。事务可以通过显式的BEGIN、COMMIT和ROLLBACK语句块来控制,也可以在自动提交模式(autocommit)下隐式执行单条语句。在自动提交模式下,每条SQL......
  • 匿名内部类、Lambda表达式 应用于创建线程
    匿名内部类的几大作用:1.完成接口实现关系 / 完成类继承关系2.方法重写3.创建对象而Lambda表达式的作用:主要用于实现函数式接口,即用于实现单一抽象方法接口。所以可以用Lambda表达式实现的函数式接口都可以转换成匿名内部类的形式。方式一Threadt=newThread(){/......