1

pg_table_def为了从对我的用户可见的所有数据创建一个表,我尝试了:

create table adhoc_schema.pg_table_dump as ( 
  select *
  from pg_table_def
);

但它会引发错误:

列“schemaname”具有不受支持的类型“name”

pg_table_def有什么方法可以从or创建表information_schema.columns

4

2 回答 2

1

从另一个线程中找到了这个,这似乎会有所帮助。

Amazon 会考虑 INFORMATION_SCHEMA.COLUMNS 使用的内部函数仅使用 Leader-Node 函数。亚马逊并没有明智地重新定义标准化的 INFORMATION_SCHEMA.COLUMNS,而是试图定义自己的专有版本。为此,他们提供了另一个功能 PG_TABLE_DEF 似乎可以满足相同的需求。请注意中心关于将架构添加到 search_path 的注释。

存储有关表列的信息。

PG_TABLE_DEF 仅返回有关用户可见的表的信息。如果 PG_TABLE_DEF 未返回预期结果,请验证 search_path 参数是否设置正确以包含相关模式。

您可以使用 SVV_TABLE_INFO 查看有关表的更全面的信息,包括数据分布偏斜、键分布偏斜、表大小和统计信息。

因此,使用您的示例代码(为了清楚起见,重写为使用 NOT EXISTS),

SET SEARCH_PATH to '$user', 'public', 'target_schema';

SELECT "column" 
FROM dev.fields f
WHERE NOT EXISTS (
  SELECT 1
  FROM PG_TABLE_DEF pgtd
  WHERE pgtd.column = f.field
  AND schemaname = 'target_schema'
);

也可以看看,

关于查询 Redshift 系统表的官方文档:https ://docs.aws.amazon.com/redshift/latest/dg/t_querying_redshift_system_tables.html

于 2020-06-23T13:26:43.117 回答
0

pg_table_def 是一个领导节点系统表,其中包含一些用户表不支持的附加数据类型。您需要先转换为文本。

但是,这仍然行不通,因为 pg_table_def 是领导节点表,而您正在创建的表是存储在计算节点上的用户表。您需要从存储在计算节点上的表中提取源信息。由于我不知道您要从 pg_table_def 中寻找什么信息,因此我无法确切说明您需要哪些信息,但您可以从 stv_tbl_perm 开始,并在需要更多信息时加入 pg_class 和其他表。

于 2020-06-17T16:35:47.693 回答