如果Redshift中存在表,则从表中删除行,否则忽略删除

时间:2017-08-21 09:24:56

标签: amazon-redshift

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

2 个答案:

答案 0 :(得分:1)

Redshift的SQL方言不包含IF等控制流语句。那么你就无法在单个SQL语句中执行此操作。

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

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

如果返回数据(即表存在),则应用程序或进程将执行delete语句,如果没有返回数据,则应用程序或进程不执行任何操作。基本上你需要在Redshift外部处理“if this then that this”逻辑。

答案 1 :(得分:0)

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

但是,也许你不想在Python中这样做。你只是关于Redshift(它很可爱)。您可以在Redshift中运行DELETE查询。如果该表不存在,则查询失败并且没有任何反应。如果是表,则删除数据。这里产生错误没有坏处。