如何修复域 tebool 在 plpgsql 函数中不允许空值
how to fix domain tebool does not allow null values in plpgsql function
我正在寻找从 Postgres 9.1 开始在 plpgsql 方法中使用 tebool 类型记录的方法
我试过了
CREATE DOMAIN tebool AS bool DEFAULT false NOT NULL;
create temp table test ( test tebool ) on commit drop ;
CREATE OR REPLACE FUNCTION test()
RETURNS numeric AS $$
DECLARE
r_test test;
begin
return 0;
end; $$ language plpgsql;
select test();
但出现错误
ERROR: domain tebool does not allow null values
CONTEXT: PL/pgSQL function test() line 5 during statement block local variable initialization
********** Error **********
ERROR: domain tebool does not allow null values
SQL state: 23502
Context: PL/pgSQL function test() line 5 during statement block local variable initialization
如何解决这个问题以便创建这样的记录变量?
域 tebool 默认值为 false,因此 plpgsql 必须对其赋值为 false,不应抛出错误。
似乎域类型的默认值是 而不是 用作初始值设定项(在 plpgsql 中)
明显的解决方法:明确地初始化它(为 true 或 false):
CREATE DOMAIN tebool AS bool DEFAULT false NOT NULL;
CREATE temp table ztest ( ztest tebool ) on commit drop ;
CREATE OR REPLACE FUNCTION ztest()
RETURNS numeric AS $$
DECLARE
r_test tebool = False;
BEGIN
RETURN 0;
END; $$ language plpgsql;
SELECT ztest();
我正在寻找从 Postgres 9.1 开始在 plpgsql 方法中使用 tebool 类型记录的方法
我试过了
CREATE DOMAIN tebool AS bool DEFAULT false NOT NULL;
create temp table test ( test tebool ) on commit drop ;
CREATE OR REPLACE FUNCTION test()
RETURNS numeric AS $$
DECLARE
r_test test;
begin
return 0;
end; $$ language plpgsql;
select test();
但出现错误
ERROR: domain tebool does not allow null values
CONTEXT: PL/pgSQL function test() line 5 during statement block local variable initialization
********** Error **********
ERROR: domain tebool does not allow null values
SQL state: 23502
Context: PL/pgSQL function test() line 5 during statement block local variable initialization
如何解决这个问题以便创建这样的记录变量?
域 tebool 默认值为 false,因此 plpgsql 必须对其赋值为 false,不应抛出错误。
似乎域类型的默认值是 而不是 用作初始值设定项(在 plpgsql 中) 明显的解决方法:明确地初始化它(为 true 或 false):
CREATE DOMAIN tebool AS bool DEFAULT false NOT NULL;
CREATE temp table ztest ( ztest tebool ) on commit drop ;
CREATE OR REPLACE FUNCTION ztest()
RETURNS numeric AS $$
DECLARE
r_test tebool = False;
BEGIN
RETURN 0;
END; $$ language plpgsql;
SELECT ztest();