【发布时间】:2014-06-02 17:17:54
【问题描述】:
我正在尝试编写一个查询来判断表a.t 中名为s 的列是否具有其默认值(这是一个非常大的base64 字符串)。所以我尝试了:
SELECT 1 FROM a.t WHERE s = (
SELECT column_default FROM information_schema.columns
WHERE (table_schema, table_name, column_name) = ('a', 't', 's'))
AND uname = 'joe';
这不起作用,所以我注意到information_schema.columns 的结果中有一些常规查询没有的内容:
SELECT column_default FROM information_schema.columns
WHERE (table_schema, table_name, column_name) = ('a', 't', 's');
column_default | 'data:image/png;base64,iVBO...QmCC'::text
对比
SELECT s FROM a.t WHERE uname = 'joe';
s | data:image/png;base64,iVBO...QmCC
请注意缺少引号和显式转换。
这就是不匹配的原因吗?列s 定义为类型text。
如何更改查询,以便测试列值与其默认值是否相等?
【问题讨论】:
-
对不起,我认为这并不重要,但它是 9.3
-
只要您不知道所有可能的解决方案,任何或所有解决方案都可能取决于使用的版本。例如,
format()是在 9.1 版本中引入的 ...
标签: sql postgresql dynamic-sql postgresql-9.3 column-defaults