Oof, the subject line was meant to be DROP DEFAULT, not constraint
On Thu, Feb 13, 2025 at 11:13 AM Andrew Atkinson <andyatkin...@gmail.com> wrote: > Hello. I noticed a small opportunity for a possible enhancement to DROP > DEFAULT, and wanted to share the idea. Apologies if this idea was suggested > before, I tried a basic search for pgsql-hackers similar things but didn’t > find a hit. > > > I noticed when running an ALTER TABLE with DROP DEFAULT, whether the > column default exists or not, ALTER TABLE is always printed as the result. > This is arguably slightly confusing, because it’s unclear if anything was > done. In the scenario where there is no column default, there isn’t a > message saying “skipped” or something equivalent, indicating that there was > no default that was dropped. Some of the commands in Postgres do have this > kind of feedback, so it seems like an opportunity for greater consistency. > > > > For example: if I create a column default, or repeatedly run the following > ALTER TABLE statements for the "id_new" column, I always get ALTER TABLE > back. > > > ALTER TABLE my_table ALTER COLUMN id_new DROP DEFAULT; > > ALTER TABLE > > ALTER TABLE my_table ALTER COLUMN id_new DROP DEFAULT; > > ALTER TABLE > > ALTER TABLE my_table ALTER COLUMN id_new DROP DEFAULT; > > ALTER TABLE > > > An opportunity would be to add a NOTICE type of message when ALTER TABLE > ALTER COLUMN DROP DEFAULT is issued, at least when no column default > exists, and no action was taken. In that scenario, the operation could > possibly be skipped altogether, which might have some additional benefits. > > > As a refreshed on a “Notice” type of message example, here’s one when > adding an index and using the "if not exists" clause (an equivalent "if not > exists" clause does not exist for DROP DEFAULT to my knowledge): > > > -- an index called “foo” already exists > > psql> create index if not exists foo on organizations (id); > > NOTICE: relation "foo" already exists, skipping > > CREATE INDEX > > > The message being “NOTICE: relation "foo" already exists, skipping” > > > A similar message for DROP DEFAULT might look like: > > > “NOTICE: default does not exist, skipping” > > > Or an alternative that includes the column name might look like: > > > “NOTICE: default does not exist for column id_new, skipping” > > > Or another alternative might be a new (non-standard?) "if exists" clause > for DROP DEFAULT. Example: > > ALTER TABLE my_table ALTER COLUMN id_new DROP DEFAULT IF EXISTS; > > > -- Or an alternative placement of the "if exists" clause, because I don’t > really know where it would go: > > ALTER TABLE my_table ALTER COLUMN id_new DROP IF EXISTS DEFAULT; > > > > Thanks! > > - Andrew >