如何在不知道 table 是否存在的情况下对 "Create view" 中的 table 执行计数
How to perform count on table in "Create view" without knowing if table exists
我有一段代码 运行,它调用 postgresql 并且正在(在循环中)用于大量模式。除了 1 table 可选地出现在模式中之外,这些模式具有相同的布局。
在代码的一部分中,对该特定 table 的行进行了简单计数。但是,由于此 table 可选地出现在架构中,因此它可能不存在。在那种情况下,计数应该 return 0.
当然可以分两步搞定:
(简化代码:)
1 首先检查table是否存在
SELECT *
FROM information_schema.tables
WHERE table_schema = 'X'
AND table_name = 'import'
LIMIT 1;
2 接下来,如果 table 存在,则对 table 的计数进行二次调用。
Select count(*) as freq from X.import
如果table不存在,直接return0,不二次调用
但是在这种情况下,代码用于创建视图。所以电话会是这样的:
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
当然这段代码不会起作用,因为如果导入不是模式 X 的一部分,那么除了在 THEN 子句中使用 X.import 之外它不会起作用。
是否有解决此问题的方法,或者我是否缺少其他一些简单的解决方案?
These schemas have identical layouts apart from 1 table which is
optionally present in the schema.
table 的存在会破坏某些东西吗?为什么不在缺少它的地方添加它并在这些环境中将其留空。
我猜这个问题的答案属于两大类之一:
- "I don't have access/permission." 或 "I'm not sure what the repercussions are."
在这种情况下,请与您的团队讨论并确定谁可以提供帮助。保持模式标准化应该是重中之重
- "Other things check if the table exists, adding it will break things."
根据环境之间的 DDL 差异预测逻辑是处理功能切换的糟糕方法。也许应该将项目添加到待办事项列表中以进行更改,以便您可以标准化架构。
我有一段代码 运行,它调用 postgresql 并且正在(在循环中)用于大量模式。除了 1 table 可选地出现在模式中之外,这些模式具有相同的布局。
在代码的一部分中,对该特定 table 的行进行了简单计数。但是,由于此 table 可选地出现在架构中,因此它可能不存在。在那种情况下,计数应该 return 0.
当然可以分两步搞定:
(简化代码:)
1 首先检查table是否存在
SELECT *
FROM information_schema.tables
WHERE table_schema = 'X'
AND table_name = 'import'
LIMIT 1;
2 接下来,如果 table 存在,则对 table 的计数进行二次调用。
Select count(*) as freq from X.import
如果table不存在,直接return0,不二次调用
但是在这种情况下,代码用于创建视图。所以电话会是这样的:
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
当然这段代码不会起作用,因为如果导入不是模式 X 的一部分,那么除了在 THEN 子句中使用 X.import 之外它不会起作用。
是否有解决此问题的方法,或者我是否缺少其他一些简单的解决方案?
These schemas have identical layouts apart from 1 table which is optionally present in the schema.
table 的存在会破坏某些东西吗?为什么不在缺少它的地方添加它并在这些环境中将其留空。
我猜这个问题的答案属于两大类之一:
- "I don't have access/permission." 或 "I'm not sure what the repercussions are."
在这种情况下,请与您的团队讨论并确定谁可以提供帮助。保持模式标准化应该是重中之重
- "Other things check if the table exists, adding it will break things."
根据环境之间的 DDL 差异预测逻辑是处理功能切换的糟糕方法。也许应该将项目添加到待办事项列表中以进行更改,以便您可以标准化架构。