【问题标题】:PostgreSQL - Dynamic addition of large no of columnsPostgreSQL - 动态添加大量列
【发布时间】:2015-02-03 14:34:29
【问题描述】:

假设我有一个名为 tracker 的表,其中包含 (issue_id,ingest_date,verb,priority)

我想在此表中添加 50 列。

列是(string_ch_01,string_ch_02,.....,string_ch_50),数据类型为varchar

有没有更好的方法来使用单个过程添加列而不是执行以下 alter 命令 50 次?

ALTER TABLE tracker ADD COLUMN string_ch_01 varchar(1020);

【问题讨论】:

  • 真正的问题是:您认为为什么需要这 50 列?您要解决的问题是什么?按顺序编号的列通常表示错误的(非规范化)数据库设计。而且这个案例听起来好像你真的只需要一个一对多的关系
  • 我正在创建 50 列,因为我的工具提供了创建他/她自己的字段集的权限。我可以接受(非规范化)数据库设计,因为它是一种更好的数据挖掘方式。注意:我只需要一对一的关系。
  • hstore 列可能是更好的选择。
  • 谢谢。但是我的 postgre 版本( 8.0 )不支持它。 'hstore' 仅适用于 9.1 版。你能帮我用一个程序(PL/SQL 程序)来实现它吗?
  • 您应该升级到现在仍在维护的版本(例如 9.4),而不是尝试使用那个过时且不受支持的版本。 (顺便说一句:它是 Postgres,而不是 Postgre)

标签: postgresql multiple-columns alter-table query-performance


【解决方案1】:

是的,更好的方法是一次发出一个包含所有列的 ALTER TABLE:

ALTER TABLE tracker
   ADD COLUMN string_ch_01 varchar(1020),
   ADD COLUMN string_ch_02 varchar(1020),
   ...
   ADD COLUMN string_ch_50 varchar(1020)
;

当新列有 DEFAULT 非空子句时尤其好,因为它们中的每一个都会重写整个表,而不是如果它们被分组在一个 ALTER TABLE 中只重写一次。

【讨论】:

  • 谢谢丹尼尔。我目前正在使用 Postgre 8.0 版。因此,上面的代码显示了语法错误。
猜你喜欢
  • 2020-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多