我正在尝试在 Amazon Redshift 中实现一个需要自动重新创建某些表的 ETL 过程,并且我需要脚本仅在这些表已存在于数据库中时才删除这些表。
是否有任何表目录可供我检查表是否存在?或者类似于 PSQL 中的 DROP TABLE IF EXISTS
的命令?
最佳答案
更新:
现在 Redshift 支持带有 IF EXISTS 子句的 DROP TABLE。 http://docs.aws.amazon.com/redshift/latest/dg/r_DROP_TABLE.html
由于 Redshift 不支持 DROP TABLE IF EXISTS
,我们通过获取现有表名来处理它。
为了在 Redshift 上获取表名,我使用了 pg_table_def
表。例如,我运行以下 sql 来获取除系统表之外的所有表名。
SELECT
schemaname, tablename
FROM
pg_table_def
WHERE
schemaname <> 'pg_catalog'
AND schemaname <> 'information_schema'
AND schemaname !~ '^pg_toast'
GROUP BY
schemaname,tablename;
这是一个示例结果。
schemaname | tablename
------------+-----------
my_schema | access_log
my_schema | error_log
my_schema | vmstats_log
public | users
public | groups
有关详细信息,请参阅以下链接。
关于sql - 如何仅在表存在时删除 Amazon Redshift 中的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21637330/