2018-06-26 17:23 GMT+02:00 Peter Moser <pitiz...@gmail.com>:

> Hi,
> I want to delete a table X, that may not exist, hence I execute
>
>         DROP TABLE IF EXISTS X;
>
> However, if X is a view, I get an error
>
>         ERROR: "X" is not a table
>
        HINT: Use DROP VIEW to remove a view.
>         SQL state: 42809
>
> That is unexpected and also difficult to handle, if I want to be sure that
> I can delete all old tables *and* views called X, and create a new
> view for instance with
>
>         CREATE VIEW X AS ....
>
> I cannot do that safely, because having both DROP commands would for sure
> cause an error and therefore a rollback.
>
> What do you think, is it worth to create a patch to solve this issue,
> where a DROP TABLE does not fail, if the given name is actually a VIEW or
> vice-versa?
>

DROP TABLE should to remove table and nothing else, like DROP VIEW should
to drop just view and nothing else. It is safeguard.

what is hard on code

do $$ declare r record;
begin
  for r in select table_name, case table_type when 'BASE TABLE' then
'table' when 'VIEW' then 'view' end as tp
     from information_schema.tables
  where table_type in ('BASE TABLE', 'VIEW')
  and table_name = 'foo'
loop
  raise notice '%', format('drop %s %I', r.tp, r.table_name);
end loop;
end $$;

replace raise notice by execute if you really want to drop some objects.

Regards

Pavel

>
> Best regards,
> Peter
>
>

Reply via email to