我使用PostgreSQL 10.3。
以下陈述给出了相同的结果:true
;
SELECT ROW() IS NULL;
SELECT ROW() IS NOT NULL;
和下一个
SELECT ROW() = ROW();
给出:
"ERROR: cannot compare rows of zero length"
因此,如果一行是零长度,那么它是未知,未知还是两者 ?
而且,我如何检查行是否为零长度?
蒂亚
答案 0 :(得分:0)
https://www.postgresql.org/docs/current/static/functions-comparison.html
如果表达式是行值,则行时IS NULL为真 表达式本身为null或当所有行的字段为空时,while 当行表达式本身为非null且全部为时,IS NOT NULL为true 行的字段为非null。由于这种行为,IS NULL和 IS NOT NULL并不总是返回行值的反向结果 表达式
关于告诉行属性计数的方法。我不确定如何做到整洁,但你可以想到很多猴子的方式,例如:
t=# SELECT count(1) from (select json_object_keys(row_to_json(ROW(1,2,3)))) a;
count
-------
3
(1 row)
t=# SELECT count(1) from (select json_object_keys(row_to_json(ROW()))) a;
count
-------
0
(1 row)
答案 1 :(得分:0)
PostgreSQL不允许比较零长度的行。
要检查行的大小,请尝试pg_column_size:
CREATE TEMPORARY TABLE t (a TEXT, b TEXT);
INSERT INTO t VALUES ('foo','bar'),('foo','bar2');
SELECT pg_column_size(a)+pg_column_size(b) FROM t;
检查是否零:
SELECT pg_column_size(ROW())-24=0