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
?
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
?
从另一个线程中找到了这个,这似乎会有所帮助。
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
pg_table_def 是一个领导节点系统表,其中包含一些用户表不支持的附加数据类型。您需要先转换为文本。
但是,这仍然行不通,因为 pg_table_def 是领导节点表,而您正在创建的表是存储在计算节点上的用户表。您需要从存储在计算节点上的表中提取源信息。由于我不知道您要从 pg_table_def 中寻找什么信息,因此我无法确切说明您需要哪些信息,但您可以从 stv_tbl_perm 开始,并在需要更多信息时加入 pg_class 和其他表。