我正在使用Redshift。如果表存在,我想要一个查询从redshift表中删除选定的行,否则只需忽略该语句。
答案 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
查询。如果该表不存在,则查询失败并且没有任何反应。如果是表,则删除数据。这里产生错误没有坏处。