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