【问题标题】:How to convert multiple tables with same columns into one table in postgress如何在postgres中将具有相同列的多个表转换为一个表
【发布时间】:2016-03-09 21:09:01
【问题描述】:

我有一个 Postgres 数据库,其中包含 200 多个分别具有相同列名和数据类型的表。我想将它们全部加入一个表中,我该如何实现?

我有 Postgres 9.4 和 pgAdmin 设置。

【问题讨论】:

  • 可能是CREATE TABLE foo AS SELECT * FROM table1 UNION ALL SELECT * FROM table2 UNION ALL ...?
  • @DanielLyons 这将是我在 2015 年写的最长的 sql 语句!有没有办法一次加载所有表?或者使用 pgql 和一些 shell 脚本!
  • 愚蠢的问题会产生愚蠢的解决方案。 :) 没有内置的方法可以做到这一点。显然,您可以编写脚本;如果您使用 bash,您可能会发现 psql -c -At 是一组有用的标志,您可以查询信息架构以获取表列表。
  • 另外,您可以先创建表,然后发出 200 个INSERT INTO foo SELECT * FROM tableN 语句。
  • 其实你只是启发了我!我可以编写一个 shell 脚本来生成所有表名(我有一个所有表名的 sql 转储),然后按照您的建议运行查询!但我想知道是否有更好的方法!

标签: postgresql psql pgadmin


【解决方案1】:

如果表具有相同的列名和类型,那么您可以创建一个父表并安排所有其他表从父表继承。之后,对父表的查询会自动查询所有的子表。

首先创建一个空父表,其定义与您已有的 200 个表相同。

然后,在 200 个表中的每一个上使用 ALTER TABLE 以使它们从父表继承。

CREATE TABLE myparenttable( LIKE mychildtable1 );

-- Repeat this for each of the child tables
ALTER TABLE mychildtable1 INHERIT myparenttable;

另请参阅:postgresql 手册中的Inheritance

【讨论】:

  • 有没有办法从 psql 中指定模式?像这样 psql -h localhost -d postgres -U postgres --schema mySchema -f data.sql
  • 好吧,我在 sql 中添加了架构,就像 mySchema.tablename 一样
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-21
  • 2020-01-14
  • 1970-01-01
  • 2020-03-04
  • 2020-07-11
相关资源
最近更新 更多