After dropping the rule - Not able to insert / server crash (one timeONLY)

Поиск
Список
Период
Сортировка
От tushar
Тема After dropping the rule - Not able to insert / server crash (one timeONLY)
Дата
Msg-id dd3f25fd-8374-eec0-3021-d9cfea5c251f@enterprisedb.com
обсуждение исходный текст
Ответы Re: After dropping the rule - Not able to insert / server crash (onetime ONLY)  (Dilip Kumar <dilipbalaut@gmail.com>)
Список pgsql-hackers
Hi,

While testing something , I found that even after rule has dropped  not 
able to insert data  and in an another scenario , there is a Crash/

Please refer this scenario's -

1) Rows not inserted after dropping the RULE

postgres=# create table e(n int);
CREATE TABLE
postgres=# create rule e1 as on insert to e do instead nothing;
CREATE RULE
postgres=# create function e11(n int) returns int as $$ begin insert 
into e values(10); return 1; end; $$ language 'plpgsql';
CREATE FUNCTION
postgres=# select e11(1);
  e11
-----
    1
(1 row)

postgres=# select e11(1);
  e11
-----
    1
(1 row)

postgres=# select * from e;  => Expected , due to  the RULE enforced
  n
---
(0 rows)


postgres=# drop rule e1 on e;  ==>Drop the rule
DROP RULE

postgres=# select e11(1);  =>again try to insert into table
  e11
-----
    1
(1 row)

postgres=# select * from e;  =>This time , value should be inserted but 
still showing 0 row.
  n
---
(0 rows)



2)Server crash (one time)

postgres=# create table en(n int);
CREATE TABLE
postgres=# create function en1(n int) returns int as $$ begin insert 
into en values(10); return 1; end; $$ language 'plpgsql';
CREATE FUNCTION
postgres=#
postgres=# select en1(1);
  en1
-----
    1
(1 row)

postgres=# select * from en;
  n
----
  10
(1 row)

postgres=# create rule en11 as on insert to en do instead nothing;
CREATE RULE
postgres=# select en1(1);
ostgres=# select en1(1);
TRAP: FailedAssertion("!(!stmt->mod_stmt)", File: "pl_exec.c", Line: 3721)
server closed the connection unexpectedly
     This probably means the server terminated abnormally
     before or while processing the request.
The connection to the server was lost. Attempting reset: 2017-12-11 
10:05:57.847 GMT [18493] LOG:  server process (PID 18604) was terminated 
by signal 6: Aborted
2017-12-11 10:05:57.847 GMT [18493] DETAIL:  Failed process was running: 
select en1(1);
2017-12-11 10:05:57.847 GMT [18493] LOG:  terminating any other active 
server processes
2017-12-11 10:05:57.847 GMT [18498] WARNING:  terminating connection 
because of crash of another server process
2017-12-11 10:05:57.847 GMT [18498] DETAIL:  The postmaster has 
commanded this server process to roll back the current transaction and 
exit, because another server process exited abnormally and possibly 
corrupted shared memory.
2017-12-11 10:05:57.847 GMT [18498] HINT:  In a moment you should be 
able to reconnect to the database and repeat your command.
Failed.
!> 2017-12-11 10:05:57.849 GMT [18493] LOG:  all server processes 
terminated; reinitializing


again try to connect and fire this same query -

postgres=# select en1(1);  =>This time no crash but again rows not inserted
  en1
-----
    1
(1 row)

This is not a regression, i am able to see such behavior in v9.6 as well.

-- 
regards,tushar
EnterpriseDB  https://www.enterprisedb.com/
The Enterprise PostgreSQL Company



В списке pgsql-hackers по дате отправления:

Предыдущее
От: Masahiko Sawada
Дата:
Сообщение: Re: [HACKERS] Transactions involving multiple postgres foreign servers
Следующее
От: Dilip Kumar
Дата:
Сообщение: Re: After dropping the rule - Not able to insert / server crash (onetime ONLY)