【问题标题】:Create a table from another table从另一个表创建一个表
【发布时间】:2014-12-26 22:05:20
【问题描述】:

我想从另一个表(模式副本)创建一个表,但不是数据,只是模式。是否有 SQL 或 Postgres 方式来执行此操作?希望也能复制索引和约束。

此外,一旦创建表,就可以使架构保持同步,以防将来对原始表进行任何更改。将为我节省模式的手动同步。可能是 Postgres 有什么东西?

【问题讨论】:

  • 为什么需要这个?您要解决的根本问题是什么?听起来好像您应该重新考虑创建表和约束的方式。你有什么结构化的方法来做到这一点吗?当使用结构清晰的 SQL 脚本(存储在版本控制系统中)时,您可以随时在您想要的任何数据库中重新创建表。我们在使用 Liquibase 方面有很好的经验。

标签: sql postgresql


【解决方案1】:

使用CREATE TABLE AS SELECT,其中SELECT 不返回任何内容。

CREATE TABLE 
    new_table 
AS 
    SELECT 
        * 
    FROM 
        old_table 
    WHERE 
        FALSE=TRUE

【讨论】:

    【解决方案2】:

    只复制结构

    Select * into newtable from oldtable where 1=2
    

    【讨论】:

    • select .. into ... 是一种旧的已弃用语法,仅用于向后兼容。最好使用标准 SQL:create table newtable as select * from ...
    【解决方案3】:

    是的,使用create table like

    create table new_table (like old_table);
    

    更多详情见手册:
    http://www.postgresql.org/docs/current/static/sql-createtable.html

    like 子句将复制索引和检查约束,但不复制外键约束。

    但它不会使 new_table 与旧表“同步” - 我不清楚您为什么要这样做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-05
      • 2011-04-10
      • 1970-01-01
      • 2022-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多