Обсуждение: Backend assertion failure on \d

Поиск
Список
Период
Сортировка

Backend assertion failure on \d

От
Alan Li
Дата:
Running the following against HEAD and REL8_3_6:

create table foo (a varchar(500));
create view bar as select case foo.a when '1' then 'foo' else 'bar' end as fa from foo;
\d bar

Causes as assertion in the backend:

TRAP: FailedAssertion("!(((((Node*)(((list_head(((OpExpr *) w)->args))->data.ptr_value)))->type) == T_CaseTestExpr) || ((((Node*)(((list_head(((OpExpr *) w)->args))->data.ptr_value)))->type) == T_Const))", File: "ruleutils.c", Line: 4587
)
LOG:  server process (PID 28408) was terminated by signal 6: Aborted

Attached is a simple patch that appears to fix this problem, not sure if it suffices in general.

Alan
Вложения

Re: Backend assertion failure on \d

От
Heikki Linnakangas
Дата:
Alan Li wrote:
> Running the following against HEAD and REL8_3_6:

Same problem exists in 8.2 and 8.1 as well. The code in ruleutils.c is 
similar in 8.0 as well, except that the Assertion isn't there.

> create table foo (a varchar(500));
> create view bar as select case foo.a when '1' then 'foo' else 'bar' end as
> fa from foo;
> \d bar
> 
> Causes as assertion in the backend:
> 
> TRAP: FailedAssertion("!(((((Node*)(((list_head(((OpExpr *)
> w)->args))->data.ptr_value)))->type) == T_CaseTestExpr) ||
> ((((Node*)(((list_head(((OpExpr *) w)->args))->data.ptr_value)))->type) ==
> T_Const))", File: "ruleutils.c", Line: 4587
> )
> LOG:  server process (PID 28408) was terminated by signal 6: Aborted
> 
> Attached is a simple patch that appears to fix this problem, not sure if it
> suffices in general.

Looks good to me, at least.

--   Heikki Linnakangas  EnterpriseDB   http://www.enterprisedb.com


Re: Backend assertion failure on \d

От
Tom Lane
Дата:
Alan Li <alanwli@gmail.com> writes:
> Running the following against HEAD and REL8_3_6:
> create table foo (a varchar(500));
> create view bar as select case foo.a when '1' then 'foo' else 'bar' end as
> fa from foo;
> \d bar
> Causes as assertion in the backend:

Thanks for the report.  Looks like I forgot to consider the possibility
that type coercion nodes would get inserted atop the CaseTestExpr.
You can break the other paths here too if you try things likecase foo when true then ...
where foo is of a domain over boolean.

Will fix.
        regards, tom lane