我正在尝试将现有数据库导入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.
知道我的数据库已经有表格。
那我做错了吗?
答案 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中添加验证规则以停止用户 创建这样的数据库。
将命令更改为 创建数据库
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