PostgreSQL 9.6 - 无法连接到从自定义模板数据库创建的数据库

时间:2017-09-28 00:56:25

标签: postgresql docker

我创建了一个数据库foo,我将其作为模板数据库用于创建其他数据库。

我在Docker容器中运行所有PostgreSQL(不确定这是否与手头的问题有关)。

这是(截断的)SQL

CREATE DATABASE foo WITH ENCODING 'UTF8' template0;
\i db_schema_foo.sql
-- Create extensions
-- Initialise db with data etc ...

CREATE DATABASE foobar TEMPLATE foo;

(截断)控制台输出:

CREATE DATABASE
You are now connected to database "foo" as user "postgres".
CREATE TABLE
CREATE INDEX
CREATE TABLE
CREATE INDEX
CREATE TABLE
 ...
CREATE INDEX
CREATE TABLE
CREATE INDEX
CREATE TABLE
CREATE TABLE
CREATE TABLE
CREATE TABLE
CREATE TABLE
CREATE TABLE
CREATE INDEX
CREATE TABLE
CREATE INDEX
CREATE TABLE
CREATE INDEX
CREATE INDEX
CREATE INDEX
CREATE DATABASE
FATAL:  database "foobar" does not exist
psql:/docker-entrypoint-initdb.d/create_databases.sql:82: \connect: FATAL:  database "foobar" does not exist

在控制台中,我假设同时创建了foofoobar - 那么为什么我无法连接到数据库foobar

2 个答案:

答案 0 :(得分:0)

使用psql命令\l查看存在哪些数据库。

我希望数据库foobar不存在。

这意味着CREATE DATABASE语句失败了。 你能收到错误信息吗?

我怀疑创建数据库失败了,因为您仍然连接到模板数据库foo。您只能使用没有活动连接的数据库作为模板。

答案 1 :(得分:0)

输出中的

CREATE DATABASE表示数据库已成功创建,如果存在错误且没有警告,请执行以下操作:

t=# set client_min_messages TO fatal;
SET
t=# create database t;
t=# set client_min_messages TO warning;
SET
t=# create database t;
ERROR:  database "t" already exists

不会有这样的输出 - CREATE DATABASE 所以下一行FATAL: database "foobar" does not exist(与知识数据库一起创建)导致OP连接到不同的cluser或不同的数据库

在私人聊天中,我们发现创建的数据库是" Foobar" ,尝试连接的数据库是 Foobar ,因此" foob​​ar" ,确实不存在,因为" Foobar"