我正在使用一个使用(本地)postgres 数据库并将一些信息存储在临时表中的 Windows 应用程序。我想看看临时表,但是 pgadmin 和 dbVis 告诉我:ERROR: cannot access temporary tables of other sessions
在尝试查询数据时。我尝试更改架构和表的权限,但这似乎没有帮助,即使我使用与程序本身相同的用户访问数据库(至少在 dbVis 中)。是否有我可以在我的数据库中更改的设置,允许我对数据库中的所有会话进行“root”访问?
我有一个查询(针对 Postgres 和 Informix),其中NOT IN
包含一个子查询,该子查询在某些情况下返回NULL
值,导致该子句(以及整个查询)无法返回任何内容。
理解这一点的最佳方式是什么?我认为NULL
没有价值的东西,因此不希望查询失败,但显然这不是考虑NULL
.
代表什么NVL
?我说的是 Oracle 和 Informix(也许还有其他一些)函数用于从查询结果中过滤掉非 NULL 值(类似于COALESCE
其他数据库)。
我可以CASE
用来选择在SELECT
查询 (Postgres) 中显示哪些列,如下所示:
SELECT CASE WHEN val = 0 THEN column_x
WHEN val = 1 THEN column_y
ELSE 0
END AS update, ...
Run Code Online (Sandbox Code Playgroud)
UPDATE
在 Postgres 中执行查询时是否有可能发生类似的事情(即选择应该更新哪些列)?我假设不是,因为我找不到任何关于此的信息,但也许有人有一个聪明的选择(除了使用过程或使用 a 更新每一列CASE
来确定是否应为该列的值分配一个新值或简单地重新分配现有的价值)。如果没有简单的选择,我当然也会接受它作为答案。
额外信息:在我的情况下,我有 14 个可能的列可以更新,每个匹配行只更新一个(要更新的表与查询中的另一个表连接)。要更新的行数很可能会有所不同,可能是数十或数百。我相信加入条件的索引已经到位。