Thread: BUG #13168: DROP DATABASE does not clean up all references
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
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
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