我有一段代码正在运行,它调用postgresql并且正在一大堆模式中使用(在循环中)。除了1个表之外,这些模式具有相同的布局,该表可选地存在于模式中。
在代码的一部分中,对此特定表的行进行简单计数。但是,由于此表可选地存在于模式中,因此可能不存在。在这种情况下,计数应返回0.
当然,我可以分两步完成:
(简化代码:)
1首先检查表格是否存在
SELECT *
FROM information_schema.tables
WHERE table_schema = 'X'
AND table_name = 'import'
LIMIT 1;
2如果表存在,则对表的计数进行二次调用。
Select count(*) as freq from X.import
如果表格不存在,只需返回0,不进行二次调用。
但是在这种情况下,代码用于创建视图。所以电话会是这样的:
CREATE OR REPLACE VIEW Y AS
WITH TABLES AS (SELECT table_schema||'.'||table_name FROM information_schema.tables)
SELECT CASE
WHEN 'X.import' in (SELECT * FROM TABLES)
THEN (SELECT count(*) FROM X.import)
ELSE 0
END
当然,这个代码不起作用,因为除了在THEN子句中使用X.import之外,如果import不是模式X的一部分,它就不会有用。
有没有解决方法,或者我错过了一些其他简单的解决方案?
答案 0 :(得分:0)
这些模式除了1个表之外具有相同的布局 可选地存在于模式中。
桌子的存在会破坏什么吗?为什么不将它添加到缺少的位置并在这些环境中保留为空。
我猜这个问题的答案分为两大类:
在这种情况下,请与您的团队交谈并找出谁可以提供帮助。保持模式标准化应该是首要任务
预测环境之间DDL差异的逻辑是处理功能切换的一种不好的方法。也许应该将项目添加到待办事项中以更改内容,以便您可以标准化架构。