【问题标题】:PostgreSQL - Duplicate table in parts, empty other fields, rename tablePostgreSQL - 部分重复表,清空其他字段,重命名表
【发布时间】:2016-10-10 06:49:41
【问题描述】:

总的来说,我对 PostgreSQL 或 SQL 很陌生,所以我不知道我的问题是否简单而愚蠢——提前抱歉。

我的情况如下:

  • 我有一个包含 57 列和 219 个条目的表
  • 我每年都需要这张桌子
  • 应将某些列的数据转移到重复表中(例如前四列)
  • 应清空其他列
  • 该表有一个触发器,该触发器也应该转移到新表中
  • 表名如“xxx_2017”,新表名应为“xxx_2018”

注意:整个过程最后会绑定到一个php-website上的一个按钮

我认为第一步应该是带有一些特殊调整的 SELECT (CREATE TABLE xx AS SELECT … FROM yy) 的纯 SQL,但是重命名似乎更复杂,因为我需要将“旧”表名称的最后四位数字保存到一个变量为 INT 或类似变量,需要先将其计数,然后才能将变量赋予我的“新”表的名称。

我知道我是在没有太多基础工作的情况下提出问题,而且我不希望有一个完整且有效的解决方案——当然,如果你愿意,你也可以随意发布一个。但我需要的是一些建议以帮助完成这项工作。

谢谢!


编辑 1
我所知道的是,我可以使用所有数据(SELECT *)复制表,然后像UPDATE table_name SET column1 = NULL, column2 = NULL, column3 = NULL 一样删除数据。但是我需要更新 53 列,因为我只需要 4 列的数据。

【问题讨论】:

    标签: php sql database postgresql


    【解决方案1】:

    create table xxx_2018 as select * from xxx_2017;' is to usecreate table ... like ...` 构造的替代解决方案(它仅创建表,还提供复制约束等选项;不复制数据):

    create table xxx_2018 like xxx_2017 including all;
    insert into xxx_2018(<<4 columns you would like to fill>>) select <<4 columns you would like to fill>> from xxx_2017;
    create trigger xxx_2018_trigger ... on xxx_2018 execute procedure trigger_procedure();
    

    参考: https://www.postgresql.org/docs/9.1/static/sql-createtable.html(“喜欢”段落)

    【讨论】:

      猜你喜欢
      • 2020-03-22
      • 1970-01-01
      • 2011-01-08
      • 2019-09-30
      • 1970-01-01
      • 2020-06-19
      • 1970-01-01
      • 2017-05-19
      • 2021-05-20
      相关资源
      最近更新 更多