【问题标题】:Delete rows from a table if table exists in Redshift otherwise ignore deletion如果 Redshift 中存在表,则从表中删除行,否则忽略删除
【发布时间】:2017-08-21 09:24:55
【问题描述】:

我正在使用 Redshift。如果表存在,我想要一个查询从红移表中删除选定的行,否则忽略该语句。

【问题讨论】:

  • 您必须提供更多信息。你的问题不是很有帮助

标签: amazon-redshift


【解决方案1】:

Redshift 的 SQL 方言不包含像 IF.. THEN 这样的流控制语句,因此您无法在单个 SQL 语句中执行此操作。

您的应用程序或进程将需要首先查询 Redshift 表元数据以确定表是否存在,例如

select 1 from pg_tables where schemaname = 'myschema' and tablename = 'myschema';

如果返回数据(即表存在),则应用程序或进程将执行删除语句,如果没有返回数据,则应用程序或进程不执行任何操作。基本上,您需要在 Redshift 外部处理“如果这样做,则执行此操作”逻辑。

【讨论】:

    【解决方案2】:

    我推荐@Nathan 的回答。我会使用 python/psycopg2 来设置这个逻辑。第一个查询将检查表在pg_tables 中是否存在(例如SELECT count(1) FROM pg_tables WHERE tablename='foo'),并将结果存储在一个变量中。然后,您将检查该变量的结果以决定是否启动第二个查询(您的删除)。

    但是,也许您不想在 Python 中执行此操作。你只是关于 Redshift (这很甜蜜)。您可以在 Redshift 中运行 DELETE 查询。如果该表不存在,则查询失败并且没有任何反应。如果表是,则删除数据。在这里生成错误并没有什么坏处。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-08
      • 1970-01-01
      • 2020-09-23
      • 1970-01-01
      相关资源
      最近更新 更多