PostgreSQL:为什么 DROP DATABASE databaseName 在 psql 中保留已删除数据库的模式和关系?
PostgreSQL: Why does DROP DATABASE databaseName keep Schemas and Relations of the deleted DB in psql?
在 Postgres 中,PSQL 可以使用 \i <path>
命令从文件执行命令。
我通过创建一个数据库、一个架构、一些 TABLES 和一个带有这个小文件的视图来做到这一点:
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 TABLE
我已经花了一些时间阅读有关模式、关系和 Postgres 的内容,但不知道我错过了什么。
我的期望是:如果我删除一个数据库,它包含的组件也会被删除,但不知何故 psql 不会删除它们,而是在将来创建具有完全相同名称的数据库时重用它们。
为什么那会有用?
我将如何删除包含所有内容的数据库?
PS:欢迎任何有关该主题的讲座以及直接回答。
您忘记连接到数据库:
DROP DATABASE IF EXISTS databaseName;
CREATE DATABASE databaseName ;
\c databaseName
CREATE SCHEMA IF NOT EXISTS databaseName_schema;
...
在 Postgres 中,PSQL 可以使用 \i <path>
命令从文件执行命令。
我通过创建一个数据库、一个架构、一些 TABLES 和一个带有这个小文件的视图来做到这一点:
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 TABLE
我已经花了一些时间阅读有关模式、关系和 Postgres 的内容,但不知道我错过了什么。
我的期望是:如果我删除一个数据库,它包含的组件也会被删除,但不知何故 psql 不会删除它们,而是在将来创建具有完全相同名称的数据库时重用它们。 为什么那会有用? 我将如何删除包含所有内容的数据库?
PS:欢迎任何有关该主题的讲座以及直接回答。
您忘记连接到数据库:
DROP DATABASE IF EXISTS databaseName;
CREATE DATABASE databaseName ;
\c databaseName
CREATE SCHEMA IF NOT EXISTS databaseName_schema;
...