Amazon redshift 如果红移中存在表,则从表中删除行,否则忽略删除

Amazon redshift 如果红移中存在表,则从表中删除行,否则忽略删除,amazon-redshift,Amazon Redshift,我用的是红移。如果红移表存在,我需要一个从该表中删除所选行的查询,否则只需忽略该语句。红移的SQL方言不包含对流语句的控制,如if。。那么,您将无法在一条SQL语句中完成这项工作 您的应用程序或流程将需要首先查询红移表元数据,以确定表是否存在,例如 select 1 from pg_tables where schemaname = 'myschema' and tablename = 'myschema'; 如果返回数据(即表存在),则应用程序或进程将执行delete语句,如果未返回数据,则

我用的是红移。如果红移表存在,我需要一个从该表中删除所选行的查询,否则只需忽略该语句。

红移的SQL方言不包含对流语句的控制,如if。。那么,您将无法在一条SQL语句中完成这项工作

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

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

如果返回数据(即表存在),则应用程序或进程将执行delete语句,如果未返回数据,则应用程序或进程将不执行任何操作。基本上,你需要在红移的外部处理“如果这样,那么就这样做”的逻辑。

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


但是,也许您不想在Python中实现它。你只是喜欢红移(它很可爱)。您可以在红移中运行
DELETE
查询。如果该表不存在,则查询失败,不会发生任何事情。如果该表为空,则删除数据。在此处生成错误没有坏处。

您必须提供更多信息。你的问题没有多大帮助