You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求获取现有Redshift集群全Schema全表DDL以跨区新建集群

获取Redshift全库表DDL的可行方案

方法1:用Redshift原生函数pg_get_tabledef

Redshift自带的pg_get_tabledef函数可以直接生成单表的DDL,结合系统表pg_tables就能批量导出所有非系统表的DDL:

批量列出各表DDL

SELECT 
    schemaname,
    tablename,
    pg_get_tabledef(schemaname || '.' || tablename) AS table_ddl
FROM 
    pg_tables
WHERE 
    schemaname NOT IN ('pg_catalog', 'information_schema');

生成合并后的完整DDL

如果需要把所有DDL合并成一个字符串方便导出,用STRING_AGG:

SELECT STRING_AGG(pg_get_tabledef(schemaname || '.' || tablename), ';' || CHR(10)) AS full_ddl
FROM pg_tables
WHERE schemaname NOT IN ('pg_catalog', 'information_schema');

方法2:修复awslabs的视图脚本

你用的那个视图脚本失效,大概率是权限不足或者版本兼容问题,试试下面简化后的版本:

  1. 确保执行用户有SELECT权限访问pg_catalog下的系统表
  2. 运行以下脚本创建视图:
CREATE OR REPLACE VIEW v_generate_tbl_ddl AS
SELECT
    n.nspname AS schemaname,
    c.relname AS tablename,
    pg_get_tabledef(n.nspname || '.' || c.relname) AS ddl
FROM
    pg_catalog.pg_class c
JOIN
    pg_catalog.pg_namespace n ON c.relnamespace = n.oid
WHERE
    c.relkind = 'r'
    AND n.nspname NOT IN ('pg_catalog', 'information_schema');

创建完成后,执行SELECT * FROM v_generate_tbl_ddl;就能拿到所有表的DDL。

方法3:用AWS CLI批量导出

如果SQL层面操作受限,试试用AWS CLI的redshift-data工具:

# 先导出所有非系统表的列表
aws redshift-data execute-statement --cluster-identifier 你的集群名 --database 你的数据库名 --sql "SELECT schemaname || '.' || tablename FROM pg_tables WHERE schemaname NOT IN ('pg_catalog', 'information_schema')" --output text > tables_list.txt

# 循环生成每个表的DDL并写入文件
while read table; do
    aws redshift-data execute-statement --cluster-identifier 你的集群名 --database 你的数据库名 --sql "SELECT pg_get_tabledef('$table')" --output text >> all_tables_ddl.sql
done < tables_list.txt

记得替换命令里的集群名和数据库名。

内容的提问来源于stack exchange,提问作者Sumant Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 19:10:31