在docker postgres容器中导入postgres数据库

时间:2019-10-24 11:25:07

标签: postgresql docker

我正在尝试将现有数据库导入postgres docker容器。 这是我的工作方式:

  

docker run --name pg-docker -e POSTGRES_PASSWORD = ***** -d -p 5432:5432 -v BCS / postgres_data postgres

然后

docker exec -it pg-docker bash
psql -U postgres
postgres=# CREATE DATABASE myDB;
psql -U postgres myDB < BCS/mydb.sql

但是当我执行命令\dt时出现此错误Did not find any relations. 知道我的数据库已经有表格。 那我做错了吗?

2 个答案:

答案 0 :(得分:1)

如果您确定数据库正确安装了所有内容,但是仍然没有看到表,则应仔细检查两件事:

  • 连接时,是否要连接到正确的数据库?如果您在终端中使用$,则使用psql开关指定数据库。
-d

使用 psql -h <host> -U <user> -d <dbname> 命令连接后,您也可以更改数据库。

  • 您是否在指定正确的架构? \connect <dbname>将显示表格,但您需要首先使用\dt指定架构:
set schema

答案 1 :(得分:0)

首先要使用@LinPy提到的方法。

或者最好在构建时进行复制。

Dockerfile

undefined

另一个选项,您只需要编写脚本即可创建数据库。

FROM postgres
COPY mydb.sql /docker-entrypoint-initdb.d/

这将为您创建数据库。

POSTGRES_DB

  

此可选环境变量可用于定义其他   首次镜像时创建的默认数据库的名称   开始。如果未指定,则POSTGRES_USER的值将   被使用。

在上面,Postgres entrypoint将处理SQL脚本。

第二件事,当前的数据库名称问题,除非您做了一些trick,否则Postgress不会简单地将它们大写。

  

Postgresql将数据库名称视为小写,这是标准化的。然而   postgresapi中的字段不会复制此行为,因此   允许您使用大写字母创建数据库。该修复程序可能   警告用户db中不允许使用大写字母   并在API中添加验证规则以停止用户   创建这样的数据库。

postgres-api

将命令更改为 创建数据库

FROM postgres
ENV POSTGRES_DB=mydb

非常好的数据库

docker exec -it pg-docker bash
psql -U postgres
postgres=# CREATE DATABASE myDB;

因此导入命令将为

postgres=# \l
                                 List of databases
   Name    |  Owner   | Encoding |  Collate   |   Ctype    |   Access privileges   
-----------+----------+----------+------------+------------+-----------------------
 mydb      | postgres | UTF8     | en_US.utf8 | en_US.utf8 | 
 postgres  | postgres | UTF8     | en_US.utf8 | en_US.utf8 | 
 template0 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +

psql -U postgres mydb < BCS/mydb.sql