Amazon web services 使用红移或DBT中的'pg_table_def'数据创建表

Amazon web services 使用红移或DBT中的'pg_table_def'数据创建表,amazon-web-services,amazon-redshift,dbt,Amazon Web Services,Amazon Redshift,Dbt,为了从pg_table_def中的所有数据创建一个对我的用户可见的表,我尝试了: 创建表adhoc_schema.pg_table_dump as 挑选* 从pg_表_def ; 但它抛出了一个错误: 列架构名具有不受支持的类型名 从pg_table_def或information_schema.columns创建表的任何方法?pg_table_def是一个leader node系统表,用户表中不支持某些其他数据类型。您需要先转换为文本 但是,这仍然不起作用,因为pg_table_def是一个l

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

创建表adhoc_schema.pg_table_dump as 挑选* 从pg_表_def ; 但它抛出了一个错误:

列架构名具有不受支持的类型名


从pg_table_def或information_schema.columns创建表的任何方法?

pg_table_def是一个leader node系统表,用户表中不支持某些其他数据类型。您需要先转换为文本


但是,这仍然不起作用,因为pg_table_def是一个leader节点表,而您正在创建的表是存储在计算节点上的用户表。您需要从存储在计算节点上的表中提取源信息。由于我不知道您要从pg_table_def中查找什么信息,我无法确切说出您需要哪些信息,但您可以从stv_tbl_perm开始,并加入pg_类和其他表,因为需要更多信息。

从另一个线程中找到此信息,这似乎会有所帮助

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

存储有关表列的信息

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

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

因此,为了清晰起见,请使用重写为“不存在”的示例代码

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'
);
另见


关于查询红移系统表的正式文档:

如果这是来自另一个线程,请确保提供该线程的链接/引用。