如果表存在,如何在Amazon Redshift中删除表

Ric*_*yes 2 sql amazon-web-services amazon-redshift

我正在尝试在Amazon Redshift中实现一个需要自动重新创建某些表的ETL过程,并且我需要脚本只有当这些表已经存在于数据库中时才删除它们.

是否有任何表格目录,我可以检查是否存在表格?或者类似于DROP TABLE IF EXISTSPSQL 的命令?

Mas*_*aki 5

更新:

现在,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;
Run Code Online (Sandbox Code Playgroud)

这是一个示例结果.

 schemaname | tablename 
------------+-----------
 my_schema  | access_log
 my_schema  | error_log
 my_schema  | vmstats_log
 public     | users
 public     | groups
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅以下链接.