BUG #18217: ALTER TABLE IF EXISTS not being honored with DROP CONSTRAINT IF EXISTS

Started by PG Bug reporting formover 2 years ago2 messagesbugs
Jump to latest
#1PG Bug reporting form
noreply@postgresql.org

The following bug has been logged on the website:

Bug reference: 18217
Logged by: David Moss
Email address: david@buildingfootprintusa.com
PostgreSQL version: 15.2
Operating system: PostgreSQL 15.2 on x86_64-pc-linux-gnu
Description:

I found this issue from running pg_restore with flags to clean and "if
exists". pg_restore returns an error code which is generated from a query
of the following form:

ALTER TABLE IF EXISTS ONLY public.foo DROP CONSTRAINT IF EXISTS foo_pkey

In pg_admin this reports:

ERROR: relation "public.foo" does not exist
SQL state: 42P01

Running this same query in a 15.1 instance returns the expected behavior:

NOTICE: relation "foo" does not exist, skipping
ALTER TABLE
Query returned successfully in 48 msec.

More detailed version info:

PostgreSQL 15.2 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 7.3.1 20180712
(Red Hat 7.3.1-12), 64-bit
vs.
PostgreSQL 15.1, compiled by Visual C++ build 1914, 64-bit

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: PG Bug reporting form (#1)
Re: BUG #18217: ALTER TABLE IF EXISTS not being honored with DROP CONSTRAINT IF EXISTS

PG Bug reporting form <noreply@postgresql.org> writes:

I found this issue from running pg_restore with flags to clean and "if
exists". pg_restore returns an error code which is generated from a query
of the following form:

ALTER TABLE IF EXISTS ONLY public.foo DROP CONSTRAINT IF EXISTS foo_pkey

This works for me in the current minor release (15.5):

$ psql
psql (15.5)
Type "help" for help.

postgres=# ALTER TABLE IF EXISTS ONLY public.foo DROP CONSTRAINT IF EXISTS foo_pkey;
NOTICE: relation "foo" does not exist, skipping
ALTER TABLE

Please update. If you can still reproduce the problem in the
current release, there must be some additional contributing
factor -- please try to provide a self-contained test case.

regards, tom lane