4

在 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:欢迎任何关于该主题的讲座以及直接回答。

4

1 回答 1

4

您忘记连接到数据库:

DROP DATABASE IF EXISTS databaseName;
CREATE DATABASE databaseName ;
\c databaseName 
CREATE SCHEMA IF NOT EXISTS databaseName_schema;
...
于 2017-04-12T09:24:34.070 回答