Обсуждение: Re: [HACKERS] Re: [GENERAL] drop/rename table and transactions

Поиск
Список
Период
Сортировка

Re: [HACKERS] Re: [GENERAL] drop/rename table and transactions

От
"Mike Mascari"
Дата:
> Vadim Mikheev wrote:
> Bruce Momjian wrote:
> >
> > > if PostgreSQL could successfully rollback DDL statements sanely (and
thus
> > > diverge from ORACLE). I guess I don't expect that to happen
successfully
> > > until
> > > something the equivalent of TABLESPACES is implemented and there is a
> > > disassociation between table names, index names and their filesystem
> > > counterparts and to be able to "undo" filesystem operations. That, it
seems
> > > to
> > > me, will be a major undertaking and not going to happen any time
soon...
> >
> > Ingres has table names that don't match on-disk file names, and it is a
> > pain to administer because you can't figure out what is going on at the
> > file system level.  Table files have names like AAAHFGE.
>
> I have to say that I'm going to change on-disk database/table/index
> file names to _OID_! This is required by WAL because of inside of
> log records there will be just database/table/index oids, not names,
> and after crash recovery will not be able to read pg_class to get
> database/table/index name using oid ...
>
> Vadim

Will that aid in fixing a problem such as this:

session 1:

CREATE TABLE example1(value int4);
BEGIN;

session 2:

BEGIN;
ALTER TABLE example1 RENAME TO example2;

session 1:

INSERT INTO example1 VALUES (1);
END;
NOTICE: Abort Transaction and not in in-progress state
ERROR: Cannot write block 0 of example1 [test] blind

session 2:

END;
NOTICE: Abort Transaction and not in in-progress state
ERROR: Cannot write block 0 of example1 [test] blind

Just curious,

Mike (implicit commit) Mascari




Re: [HACKERS] Re: [GENERAL] drop/rename table and transactions

От
Vadim Mikheev
Дата:
Mike Mascari wrote:
>
> Will that aid in fixing a problem such as this:
>
> session 1:
>
> CREATE TABLE example1(value int4);
> BEGIN;
>
> session 2:
>
> BEGIN;
> ALTER TABLE example1 RENAME TO example2;
>
> session 1:
>
> INSERT INTO example1 VALUES (1);
> END;
> NOTICE: Abort Transaction and not in in-progress state
> ERROR: Cannot write block 0 of example1 [test] blind
>
> session 2:
>
> END;
> NOTICE: Abort Transaction and not in in-progress state
> ERROR: Cannot write block 0 of example1 [test] blind

Seems that oid file names will fix this...
Currently, each shared buffer description structure has
database/table names for the purposes of "blind" writes
(when backend cache hasn't entry for relation and so
bufmgr can't use cache to get names from oids).
ALTER TABLE ... RENAME renames relation file(s) but doesn't
change relation name inside shbuffers...

> Mike (implicit commit) Mascari

-:)))

Vadim