当前位置: 首页 > 面试题库 >

使用docker-compose在Postgresql数据库中创建表

湛功
2023-03-14
问题内容

我正在使用docker-compose部署多容器python Flask
Web应用程序。我在理解如何在构建期间如何在postgresql数据库中创建表时遇到了困难,因此我不必使用psql手动添加它们。

我的docker-compose.yml文件是:

web:
  restart: always
  build: ./web
  expose:
    - "8000"
  links:
    - postgres:postgres
  volumes:
    - /usr/src/flask-app/static
  env_file: .env
  command: /usr/local/bin/gunicorn -w 2 -b :8000 app:app

nginx:
  restart: always
  build: ./nginx/
  ports:
    - "80:80"
  volumes:
    - /www/static
  volumes_from:
    - web
  links:
    - web:web

data:
  restart: always
  image: postgres:latest
  volumes:
    - /var/lib/postgresql
  command: "true"

postgres:
  restart: always
  image: postgres:latest
  volumes_from:
    - data
  ports:
    - "5432:5432"

我不想输入psql来输入:

CREATE DATABASE my_database;
CREATE USER this_user WITH PASSWORD 'password';
GRANT ALL PRIVILEGES ON DATABASE "my_database" to this_user;
\i create_tables.sql

我将对如何创建表的指导表示赞赏。


问题答案:

我不想输入psql来输入

您可以简单地使用容器的内置init机制:

COPY init.sql /docker-entrypoint-initdb.d/10-init.sql

这样可以确保在正确启动数据库服务器后执行您的sql。

看一看他们的入口点脚本。它做了一些准备工作,以正确和外观到启动PSQL /docker-entrypoint- initdb.d/目录在结尾的文件.sh.sql.sql.gz

10-文件名中的原因是因为文件以ASCII顺序处理。你能说出你的其他的init文件,如20-create-tables.sql30-seed- tables.sql.gz例如,并确保他们在需要的顺序进行处理。

另请注意,调用命令未指定数据库。如果要迁移到docker-compose并且现有.sql文件也未指定DB ,请记住这一点。

不过,您的文件将在容器的第一个开始build阶段进行处理。由于Docker
Compose会先停止映像然后再恢复图像,所以几乎没有什么区别,但是如果您在build阶段初始化数据库至关重要,我建议您仍然使用内置的init方法,方法是/docker- entrypoint.sh从dockerfile 调用然后在/docker-entrypoint-initdb.d/目录中进行清理。



 类似资料:
  • 我正在尝试创建一个mysql数据库/模式,如果它还不存在的话。 以下是我尝试过的: docker编写。yml公司 创建数据库 它不起作用。如果架构不存在,使用docker/docker compose创建架构的最佳方式是什么?

  • PostgreSQL 创建数据库可以用以下三种方式: 1、使用 CREATE DATABASE SQL 语句来创建。 2、使用 createdb 命令来创建。 3、使用 pgAdmin 工具。 CREATE DATABASE 创建数据库 CREATE DATABASE 命令需要在 PostgreSQL 命令窗口来执行,语法格式如下: 例如,我们创建一个 runoobdb 的数据库: created

  • 这个代码不起作用。谁能告诉我在哪里可以找到用C#动态创建Postgresql数据库和表的例子? 数据库已创建,但我在创建表时遇到一个无声的失败。

  • 我正在尝试代码优先的方法来使用Spring、Boot和Hibernate创建数据库。 但是,我现在还做不到。 这是我的控制器

  • 使用H2, 如果数据库还不存在,则创建它。 但是,在Postgres中,不会创建不存在的数据库,因此会引发类似“DB不存在”的异常。有没有办法配置Postgres以按需创建不存在的数据库? 以下配置文件可用于重现此问题: 使用H2工作正常: 使用Postgres失败

  • 问题内容: PostgreSQL似乎不允许创建名为“ user”的数据库表。但是MySQL将允许创建这样的表。 那是因为这是一个关键词吗?但是Hibernate无法识别任何问题(即使我们设置了PostgreSQLDialect)。 问题答案: 是保留字,通常不建议使用保留字作为标识符(表,列)。 如果您坚持要这样做,则必须将表名放在双引号中: 但是,在引用表时,您 总是 需要使用双引号。此外,表名