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

From: tushar <tushar(dot)ahuja(at)enterprisedb(dot)com>
To: PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org>
Subject: After dropping the rule - Not able to insert / server crash (one time ONLY)
Date: 2017-12-11 10:24:32
Message-ID: dd3f25fd-8374-eec0-3021-d9cfea5c251f@enterprisedb.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: 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

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Dilip Kumar 2017-12-11 11:03:20 Re: After dropping the rule - Not able to insert / server crash (one time ONLY)
Previous Message Masahiko Sawada 2017-12-11 10:20:25 Re: [HACKERS] Transactions involving multiple postgres foreign servers