我想转储按主键排序的表的全部内容。直觉上,我想做一个
SELECT * FROM %table_name% ORDER BY %primary_key_of(table_name)%;
这将由外部工具运行,知道表的列表,但不知道它们的主键。
如果没有更好的选择,我们可以假设所有主键都是单列的。
我使用的是 PostgreSQL-9.5,但可以升级。
我想转储按主键排序的表的全部内容。直觉上,我想做一个
SELECT * FROM %table_name% ORDER BY %primary_key_of(table_name)%;
这将由外部工具运行,知道表的列表,但不知道它们的主键。
如果没有更好的选择,我们可以假设所有主键都是单列的。
我使用的是 PostgreSQL-9.5,但可以升级。
默认情况下,simple
SELECT * FROM %table_name%
不会按主键对结果进行排序。但是您可以获得表的主键列的列表:
ORDER BY
然后在子句中使用此列构建动态查询。如果您在不同的模式中有多个同名的表,请添加
INNER JOIN pg_namespace sch ON sch.oid = tbl.relnamespace
并WHERE
设置条件。sch.nspname
您可以在 1 个查询中获取所有表的 PK:
我相信如果你在你的主键上放置一个聚集索引,那么 PG 默认会使用它。未经检验的假设:)
根据https://www.postgresql.org/docs/current/static/sql-cluster.html