Thread: drop table if exists ;
hello,
I've found a small logical issue while writing a migration script:
create table vtest (foo int);
create view vtest_v as select * from vtest;
drop table if exists vtest_v;
ERROR: "vtest_v" is not a table
drop view if exists vtest;
ERROR: "vtest" is not a view
this may be seen as a nice hint, but in my own opinion
DROP ... IF EXISTS should not throw an error for objects that do not exist.
A warning would be better here.
This would allow such a code to be error proof:
...
drop table if exists foo;
drop view if exists foo;
...
best regards,
Marc Mamin
On 09/19/2012 07:54 PM, Marc Mamin wrote: > hello, > > I've found a small logical issue while writing a migration script: > > create table vtest (foo int); > > create view vtest_v as select * from vtest; > > drop table if exists vtest_v; > > ERROR: "vtest_v" is not a table > > drop view if exists vtest; > > ERROR: "vtest" is not a view > > this may be seen as a nice hint, but in my own opinion > > DROP ... IF EXISTS should not throw an error for objects that do not exist. ... but they do exist. There is another object with that name. It isn't clear if the script author's intention is to DROP the object despite the type mismatch, or to ignore it because it's not the type of object they specified to drop. When something is ambiguous or unclear, PostgreSQL will tend to report an error for safety. -- Craig Ringer