为什么DROP DATABASE databaseName在psql中保留已删除数据库的模式和关系?

时间:2017-04-12 09:22:17

标签: database postgresql schema psql drop-database

在Postgres PSQL中,可以使用\i <path>命令从文件执行命令。

我用这个小文件创建了一个DATABASE,一个SCHEMA,一些TABLES和一个VIEW:

DROP DATABASE IF EXISTS databaseName;
CREATE DATABASE databaseName ;

CREATE SCHEMA IF NOT EXISTS databaseName_schema;

CREATE TABLE IF NOT EXISTS databaseName_schema.tableName (
   id SERIAL PRIMARY KEY,
   name VARCHAR(80),
   surename VARCHAR(80),
);


CREATE TABLE IF NOT EXISTS databaseName_schema.tableMovies (
    id SERIAL PRIMARY KEY,
    priority SERIAL,
    movieName VARCHAR(40)
);

create or replace view versionViewTest as select version();

然后我用\ l检查,数据库“databaseName”确实存在。 如果我那么

DROP DATABASE databaseName;

并重新检查\ l数据库已经消失了! 然而,当我再次使用

执行相同的脚本时
\i <path>

它说:

...架构已经存在,正在跳过CREATE SCHEMA ...关系已存在,跳过CREATE TABLE

我已经花了一些时间阅读有关模式,关系和Postgres的内容,并且不知道我错过了什么。

我的期望是:如果我删除数据库,它包含的组件也会被删除,但不知何故psql不会删除它们,但是如果将来创建一个具有完全相同名称的数据库,则会重用它们。 为什么这会有用? 我将如何删除包含其所有内容的数据库?

PS:欢迎任何关于该主题的讲座以及直接答案。

1 个答案:

答案 0 :(得分:2)

你忘了连接数据库:

DROP DATABASE IF EXISTS databaseName;
CREATE DATABASE databaseName ;
\c databaseName 
CREATE SCHEMA IF NOT EXISTS databaseName_schema;
...