Re: BUG #15294: Phantom read in serializable transaction when yourename schema.

Поиск
Список
Период
Сортировка
От Olav Gjerde
Тема Re: BUG #15294: Phantom read in serializable transaction when yourename schema.
Дата
Msg-id CAJ7kQyHnFKRm0BEy=uSaFSOrJChBv6DFWYTkCKTEbzvWZiSNTg@mail.gmail.com
обсуждение исходный текст
Ответ на Re: BUG #15294: Phantom read in serializable transaction when yourename schema.  (Andres Freund <andres@anarazel.de>)
Список pgsql-bugs
Thank you for your reply. I understand that this is difficult to get
to work right, could this be improved with adding a warning message
for the user?

On Tue, Jul 24, 2018 at 9:30 PM, Andres Freund <andres@anarazel.de> wrote:
> Hi,
>
> On 2018-07-24 19:14:52 +0000, PG Bug reporting form wrote:
>> The following bug has been logged on the website:
>>
>> Bug reference:      15294
>> Logged by:          Olav Gjerde
>> Email address:      olav@backupbay.com
>> PostgreSQL version: 10.4
>> Operating system:   Linux olav-system 4.15.0-29-generic #31-Ubuntu SMP
>> Description:
>>
>> We are developing a process where we want to rename schema when deploying a
>> data model to "prod".
>>
>> When using serializable you will not get any phantom reads if you use UPDATE
>> statements. But if you rename the schema name you will.
>>
>> You can do the following to reproduce this error
>>
>> CREATE SCHEMA prod;
>> CREATE SCHEMA staging;
>> CREATE SCHEMA history;
>>
>> CREATE TABLE prod.link(id serial, text text);
>> CREATE TABLE staging.link(id serial, text text);
>>
>> INSERT INTO prod.link (text) VALUES ('prod link text');
>> INSERT INTO staging.link (text) VALUES ('staging link text');
>>
>> Now start the first read transaction:
>> BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;
>> select * from prod.link;
>>  id |      text
>> ----+----------------
>>   1 | prod link text
>> (1 row)
>>
>>
>> Then open another session and start new transaction where you rename schema
>> names and commit
>> BEGIN TRANSACTION;
>>
>> DROP SCHEMA history CASCADE;
>> ALTER SCHEMA prod RENAME TO history;
>> ALTER SCHEMA staging RENAME TO prod;
>> COMMIT;
>>
>> Now go back to the first session and continue within the same transaction:
>> select * from prod.link;
>>  id |       text
>> ----+-------------------
>>   1 | staging link text
>> (1 row)
>>
>> Is this an error? Or have I misunderstood something? Are transactions not
>> supported for schema renames?
>
> Transactions are supported, but DDL basically is processed as READ
> COMMITTED. There's not really a good way around that - you have to use
> the newer table definition etc, otherwise you might e.g. insert rows
> that violate newly added constraints and such.
>
> Btw, although that's unrelated in this case, you really can only rely on
> serializable if all the participating transactions use serializable.
>
> Greetings,
>
> Andres Freund



--
Kind Regards / Med Vennlig Hilsen

Olav Grønås Gjerde

BackupBay Gjerde
Asalvegen 19
4051 SOLA
Norway
Phone: +47 918 000 59


В списке pgsql-bugs по дате отправления:

Предыдущее
От: Thomas Munro
Дата:
Сообщение: Re: BUG #15290: Stuck Parallel Index Scan query
Следующее
От: Olga Lytvynova-Bogdanova
Дата:
Сообщение: TIMESTAMP(TZ) range