sql - 如何仅在表存在时删除 Amazon Redshift 中的表

标签 sql amazon-web-services amazon-redshift

我正在尝试在 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/

相关文章:

java - SQLite 如何 - 在 JOIN 中按值求和

MYSQL 对 Group By 表的计数

mysql - SQL - 如何获取单元格的特定值?

linux - Amazon AWS EC2 使用 sudo rm -rf */意外删除了根目录。我怎样才能恢复它?

binary - 计算 Redshift 列中每个位位置中 '1' 值的数量

c# - 如何从 ASP.NET 向导中的动态输入和步骤中收集值

amazon-web-services - 为什么 AWS Elastic Beanstalk 显示了一半的数字?作为健康主机计数的实例数?

amazon-redshift - 为什么 GROUPBY 和 ORDERBY 的顺序在 Redshift 中很重要?

python - Redshift UDF 表名?

amazon-web-services - AWS 访问 key ID 需要订阅该服务