なぜx IS NOT NULL
等しくないのNOT x IS NULL
ですか?
このコード:
CREATE TABLE bug_test (
id int,
name text
);
INSERT INTO bug_test
VALUES (1, NULL);
DO $$
DECLARE
v_bug_test bug_test;
BEGIN
RAISE NOTICE '%: %', v_bug_test, (v_bug_test IS NULL);
RAISE NOTICE '%: %', v_bug_test, (v_bug_test IS NOT NULL);
RAISE NOTICE '%: %', v_bug_test, (NOT v_bug_test IS NULL);
SELECT *
INTO v_bug_test
FROM bug_test
WHERE id = 1;
RAISE NOTICE '%: %', v_bug_test, (v_bug_test IS NULL);
RAISE NOTICE '%: %', v_bug_test, (v_bug_test IS NOT NULL);
RAISE NOTICE '%: %', v_bug_test, (NOT v_bug_test IS NULL);
END
$$;
DROP TABLE bug_test;
次の出力が得られます。
(,): t
(,): f
(,): f
(1,): f
(1,): f ???
(1,): t
私はこの出力を取得することを期待していますが:
(,): t
(,): f
(,): f
(1,): f
(1,): t <<<
(1,): t
id
実際のコードベースで確認するためにコードを切り替えましたが、問題を探すのに数時間費やした後です。
rec_variable IS NOT NULL
かどうかをチェックされ、すべての列がNULLではありませんが、rec_variable IS NULL
かどうかをチェックされ、すべての列がNULLです。したがってNOT rec_variable IS NULL
、私が期待したものを与えます-「何かが中にありますか?」という質問に対する答え。