Thread: BUG #13168: DROP DATABASE does not clean up all references

BUG #13168: DROP DATABASE does not clean up all references

From
cees.van.zeeland@xs4all.nl
Date:
The following bug has been logged on the website:

Bug reference:      13168
Logged by:          Cees van Zeeland
Email address:      cees.van.zeeland@xs4all.nl
PostgreSQL version: 9.4.1
Operating system:   Windows 7 Home Edition 64 bit
Description:

-- Follow the next steps to produce an unexpected error
-- The next 16 lines work fine
CREATE DATABASE new
  WITH ENCODING='LATIN1'
       TEMPLATE=template0
       LC_COLLATE='C'
       LC_CTYPE='C'
       CONNECTION LIMIT=-1;

DROP TABLE IF EXISTS category CASCADE;
CREATE TABLE category
  (
     category_id SERIAL  PRIMARY KEY
    ,category_name varchar(30) NOT NULL
    ,category_description varchar(200) NOT NULL
  );

-- Now I am going to repeat the same script without DROP TABLE
-- After the next line, I assume that all old references within the database
are gone
DROP DATABASE new;

CREATE DATABASE new
  WITH ENCODING='LATIN1'
       TEMPLATE=template0
       LC_COLLATE='C'
       LC_CTYPE='C'
       CONNECTION LIMIT=-1;

-- Here I leave out the line with DROP TABLE
-- It results to the error message:
-- ERROR: relation "category" already exists
-- Is this a bug or am I missing something?
-- DROP TABLE IF EXISTS category CASCADE;

CREATE TABLE category
  (
     category_id SERIAL  PRIMARY KEY
    ,category_name varchar(30) NOT NULL
    ,category_description varchar(200) NOT NULL
  );

DROP DATABASE new;

-- In fact I can repeat this script
-- first time: no error
-- second time: with error

Re: BUG #13168: DROP DATABASE does not clean up all references

From
Tom Lane
Date:
cees.van.zeeland@xs4all.nl writes:
> -- Follow the next steps to produce an unexpected error
> -- The next 16 lines work fine
> CREATE DATABASE new
>   WITH ENCODING='LATIN1'
>        TEMPLATE=template0
>        LC_COLLATE='C'
>        LC_CTYPE='C'
>        CONNECTION LIMIT=-1;

> DROP TABLE IF EXISTS category CASCADE;
> CREATE TABLE category
>   (
>      category_id SERIAL  PRIMARY KEY
>     ,category_name varchar(30) NOT NULL
>     ,category_description varchar(200) NOT NULL
>   );

AFAICS you didn't reconnect to database "new", so table "category" is
in whatever database you connected to originally.

> DROP DATABASE new;

If you had reconnected, it would not have allowed you to drop the current
database ...

            regards, tom lane

Re: BUG #13168: DROP DATABASE does not clean up all references

From
"David G. Johnston"
Date:
On Sun, Apr 26, 2015 at 2:46 PM, <cees.van.zeeland@xs4all.nl> wrote:

> The following bug has been logged on the website:
>
> Bug reference:      13168
> Logged by:          Cees van Zeeland
> Email address:      cees.van.zeeland@xs4all.nl
> PostgreSQL version: 9.4.1
> Operating system:   Windows 7 Home Edition 64 bit
> Description:
>
> -- Follow the next steps to produce an unexpected error
> -- The next 16 lines work fine
>

=E2=80=8BYou are connected to the "postgres" database (probably, maybe temp=
late1...)
=E2=80=8B

> CREATE DATABASE new
>   WITH ENCODING=3D'LATIN1'
>        TEMPLATE=3Dtemplate0
>        LC_COLLATE=3D'C'
>        LC_CTYPE=3D'C'
>        CONNECTION LIMIT=3D-1;
>
>
=E2=80=8BYou are still connected to "postgres"...
=E2=80=8B


> DROP TABLE IF EXISTS category CASCADE;
> CREATE TABLE category
>   (
>      category_id SERIAL  PRIMARY KEY
>     ,category_name varchar(30) NOT NULL
>     ,category_description varchar(200) NOT NULL
>   );
>
>
=E2=80=8BTable "category" exists now in Database "postgres"=E2=80=8B

-- Now I am going to repeat the same script without DROP TABLE
> -- After the next line, I assume that all old references within the
> database
> are gone
> DROP DATABASE new;
>
> CREATE DATABASE new
>   WITH ENCODING=3D'LATIN1'
>        TEMPLATE=3Dtemplate0
>        LC_COLLATE=3D'C'
>        LC_CTYPE=3D'C'
>        CONNECTION LIMIT=3D-1;
>
> -- Here I leave out the line with DROP TABLE
> -- It results to the error message:
> -- ERROR: relation "category" already exists
> -- Is this a bug or am I missing something?
> -- DROP TABLE IF EXISTS category CASCADE;
>
>
=E2=80=8BSo  you dropped an added the "new" database again...while connecte=
d to
"postgres".=E2=80=8B

CREATE TABLE category
>   (
>      category_id SERIAL  PRIMARY KEY
>     ,category_name varchar(30) NOT NULL
>     ,category_description varchar(200) NOT NULL
>   );
>
>
=E2=80=8BOf course the table you created in Database "postgres" is still th=
ere...=E2=80=8B

=E2=80=8BDavid J.=E2=80=8B