Re: Re[2]: [PATCH] Optional OR REPLACE in CREATE OPERATOR statement

From: Nikita Malakhov <hukutoc(at)gmail(dot)com>
To: Svetlana Derevyanko <s(dot)derevyanko(at)postgrespro(dot)ru>
Cc: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Subject: Re: Re[2]: [PATCH] Optional OR REPLACE in CREATE OPERATOR statement
Date: 2022-12-12 19:14:08
Message-ID: CAN-LCVPHt0_zdN+9Ktu2oUJTJhDJQxMMoBPbwjN2r+EoLi6PQA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hi,

Svetlana, yes, Tom means that CREATE OR REPLACE should always produce
the same result no matter which branch actually worked - CREATE or REPLACE.
REPLACE case must produce exactly the same result as you've mentioned -
DROP and CREATE.

As for IF NOT EXISTS option I agree, it seems a reasonable addition to
simplify
error handling in scripts, go on.

On Wed, Jul 6, 2022 at 3:01 PM Svetlana Derevyanko <
s(dot)derevyanko(at)postgrespro(dot)ru> wrote:

>
>
> Вторник, 5 июля 2022, 18:29 +03:00 от Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>:
>
> =?UTF-8?B?U3ZldGxhbmEgRGVyZXZ5YW5rbw==?= <s(dot)derevyanko(at)postgrespro(dot)ru
> <http:///compose?To=s(dot)derevyanko(at)postgrespro(dot)ru>> writes:
> > It seems useful to have [OR REPLACE] option in CREATE OPERATOR
> statement, as in CREATE FUNCTION. This option may be good for
> writing extension update scripts, to avoid errors with re-creating the same
> operator.
>
> No, that's not acceptable. CREATE OR REPLACE should always produce
> exactly the same final state of the object, but in this case we cannot
> change the underlying function if the operator already exists.
>
> (At least, not without writing a bunch of infrastructure to update
> existing views/rules that might use the operator; which among other
> things would create a lot of deadlock risks.)
>
> regards, tom lane
>
> Hello,
>
> > CREATE OR REPLACE should always produce exactly the same final state of
> the object,
> > but in this case we cannot change the underlying function if the
> operator already exists.
>
> Do you mean that for existing operator CREATE OR REPLACE should be the
> same as DROP OPERATOR and CREATE OPERATOR, with relevant re-creation of
> existing view/rules/..., using this operator? If yes, what exactly is wrong
> with changing only RESTRICT and JOIN parameters (or is the problem in
> possible user`s confusion with attempts to change something more?). If no,
> could you, please, clarify what "final state" here means?
>
> Also, if OR REPLACE is unacceptable, then what do you think about IF NOT
> EXISTS option?
>
> Thanks,
>
> --
> Svetlana Derevyanko
> Postgres Professional: http://www.postgrespro.com
> The Russian Postgres Company
>

--
Regards,
Nikita Malakhov
Postgres Professional
https://postgrespro.ru/

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Peter Eisentraut 2022-12-12 19:16:32 Re: BUG #17434: CREATE/DROP DATABASE can be executed in the same transaction with other commands
Previous Message Robert Haas 2022-12-12 17:51:42 Re: Add sub-transaction overflow status in pg_stat_activity