Обсуждение: Re: [GENERAL] Can Postgres 8.x start if some disks containing tablespaces are not mounted?
Re: [GENERAL] Can Postgres 8.x start if some disks containing tablespaces are not mounted?
От
"Gurjeet Singh"
Дата:
On Mon, Mar 31, 2008 at 11:40 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
One of the gripes I have with postgres is that, that it won't even complain if one of the segments of a relation goes missing unless the missing segment is referred to by an index!!!
The most troublesome part is that count(*) (i.e seq scan) scans only upto the last sequential segment found. Here's a case in example:
Healthy:
--------
count(*) : 2187001
size: 2441 MB
segments: 17651, .1, .2
Corrupt: 17651.1 missing
-------------------------
count(*) : 917503
size: 1024 MB
segments: 17651, .2
select max(a) from temp: 2187001 (uses index to locate the last tuple in segment .2)
select a from temp where a = (select max(a) from temp)/2
ERROR: could not read block 156214 of relation 1663/11511/17651: read only 0 of 8192 bytes
retore missing segment:
-----------------------
select a from temp where a = (select max(a) from temp)/2
: 1093500
I think that the counter-argument would be that this has never been reported in the field, but I wish our metadata records this somehow, and reports an ERROR if it finds that a segment is missing.
Best regards,
--
gurjeet[.singh]@EnterpriseDB.com
singh.gurjeet@{ gmail | hotmail | indiatimes | yahoo }.com
EnterpriseDB http://www.enterprisedb.com
Mail sent from my BlackLaptop device
It will start, but you will have unpleasant failures when you try to use"Morris Goldstein" <morris.x.goldstein@gmail.com> writes:
> Suppose I have a database with $PGDATA on /dev/sda, and a tablespace
> directory on /dev/sdb. Will Postgres start successfully if /dev/sda is
> mounted and /dev/sdb is not? If not, why not?
tables in the secondary tablespace ... note that if autovacuum is on,
that is likely to happen even without any explicit action on your part.
One of the gripes I have with postgres is that, that it won't even complain if one of the segments of a relation goes missing unless the missing segment is referred to by an index!!!
The most troublesome part is that count(*) (i.e seq scan) scans only upto the last sequential segment found. Here's a case in example:
Healthy:
--------
count(*) : 2187001
size: 2441 MB
segments: 17651, .1, .2
Corrupt: 17651.1 missing
-------------------------
count(*) : 917503
size: 1024 MB
segments: 17651, .2
select max(a) from temp: 2187001 (uses index to locate the last tuple in segment .2)
select a from temp where a = (select max(a) from temp)/2
ERROR: could not read block 156214 of relation 1663/11511/17651: read only 0 of 8192 bytes
retore missing segment:
-----------------------
select a from temp where a = (select max(a) from temp)/2
: 1093500
I think that the counter-argument would be that this has never been reported in the field, but I wish our metadata records this somehow, and reports an ERROR if it finds that a segment is missing.
Best regards,
--
gurjeet[.singh]@EnterpriseDB.com
singh.gurjeet@{ gmail | hotmail | indiatimes | yahoo }.com
EnterpriseDB http://www.enterprisedb.com
Mail sent from my BlackLaptop device