Deleting a table file does not raise an error when the table is touched afterwards, why? - Mailing list pgsql-general

From Daniel Westermann
Subject Deleting a table file does not raise an error when the table is touched afterwards, why?
Date
Msg-id 184509399.5590018.1464622534207.JavaMail.zimbra@dbi-services.com
Whole thread Raw
Responses Re: Deleting a table file does not raise an error when the table is touched afterwards, why?  (Melvin Davidson <melvin6925@gmail.com>)
Re: Deleting a table file does not raise an error when the table is touched afterwards, why?  (Francisco Olarte <folarte@peoplecall.com>)
Re: Deleting a table file does not raise an error when the table is touched afterwards, why?  (Simon Riggs <simon@2ndQuadrant.com>)
Re: Deleting a table file does not raise an error when the table is touched afterwards, why?  (Tom Lane <tgl@sss.pgh.pa.us>)
Re: Deleting a table file does not raise an error when the table is touched afterwards, why?  (Alex Ignatov <a.ignatov@postgrespro.ru>)
Re: Deleting a table file does not raise an error when the table is touched afterwards, why?  (David W Noon <david.w.noon@googlemail.com>)
List pgsql-general
Hi,

I need to understand something: Lets assume I have a table t5 with 1'000'000 rows:

(postgres@[local]:5432) [sample] > select count(*) from t5;
  count  
---------
 1000000
(1 row)

Time: 2363.834 ms
(postgres@[local]:5432) [sample] >

I get the file for that table:

postgres@pg_essentials_p1:/u02/pgdata/PG1/base/16422/ [PG1] oid2name -d sample -t t5
From database "sample":
  Filenode  Table Name
----------------------
     32809          t5


Then I delete the file:

postgres@pg_essentials_p1:/u02/pgdata/PG1/base/16422/ [PG1] rm 32809

When doing the count(*) on the table again:

(postgres@[local]:5432) [sample] > select count(*) from t5;
  count  
---------
 1000000
(1 row)

No issue in the log. This is probably coming from the cache, isn't it? Is this intended and safe?

Then I restart the instance and do the select again:

2016-05-30 19:25:20.633 CEST - 9 - 2777 -  - @ FATAL:  could not open file "base/16422/32809": No such file or directory
2016-05-30 19:25:20.633 CEST - 10 - 2777 -  - @ CONTEXT:  writing block 8192 of relation base/16422/32809

(postgres@[local]:5432) [sample] > select count(*) from t5;
 count  
--------
 437920
(1 row)

Can someone please tell me the intention behind that? From my point of view this is dangerous. If nobody is monitoring the log (which sadly is the case in reality) nobody will notice that only parts of the table are there. Wouldn't it be much more safe to raise an error as soon as the table is touched?

PostgreSQL version:

(postgres@[local]:5432) [sample] > select version();
-[ RECORD 1 ]----------------------------------------------------------------------------------------------------------------------------
version | PostgreSQL 9.4.4 on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-4), 64-bit

Thanks in advance
Daniel

pgsql-general by date:

Previous
From: CN
Date:
Subject: Re: How to find business partners from PostgreSQL communities?
Next
From: Melvin Davidson
Date:
Subject: Re: Deleting a table file does not raise an error when the table is touched afterwards, why?