【问题标题】:Multiple Posgres databases in CircleCI 2.0CircleCI 2.0 中的多个 Postgres 数据库
【发布时间】:2026-01-23 19:10:01
【问题描述】:

如何让我的 Postgres 图像创建多个数据库?例如,我想做这样的事情:

- image: circleci/postgres:9.6.7-alpine
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
      POSTGRES_DB: db_test
      POSTGRES_DB: db_special

有没有办法做到这一点?如果没有,我该如何创建与第一个角色相同的第二个数据库?

【问题讨论】:

    标签: postgresql circleci circleci-2.0


    【解决方案1】:

    免责声明:CircleCI 的开发者倡导者

    我看到了三个选项。

    1. 自行扩展 PostgreSQL Docker 映像并让它默认创建您需要的其他数据库。
    2. 通过您的应用程序(应该只是一个 SQL 行)或使用 PostgreSQL CLI(您需要将其安装在容器中)动态创建其他数据库。
    3. 同时使用两个或多个 PostgreSQL 容器,每个数据库一个。然后,您还需要更改其中之一的默认主机名。第一个位于localhost,第二个位于您设置的名称。

    这是#3 的示例:

    - image: circleci/my-main-image:latest
    - image: circleci/postgres:9.6.7-alpine
        environment:
          POSTGRES_USER: user
          POSTGRES_PASSWORD: password
          POSTGRES_DB: db_test
    - image: circleci/postgres:9.6.7-alpine
        name: pg2
        environment:
          POSTGRES_USER: user
          POSTGRES_PASSWORD: password
          POSTGRES_DB: db_special
    

    【讨论】:

    • 选项 2 看起来最简单:psql -c "CREATE DATABASE db_test WITH TEMPLATE db_special OWNER user;"
    • 我最终选择了第二个选项 - 效果很好。
    • 太棒了。我很高兴听到。
    【解决方案2】:

    只是为了补充第二个选项。

    如果您不在 docker 映像 bash 中,但在根计算机/容器中,您也可以运行:

    psql -h localhost -p PORT-U root -d FIRST_DB -c "create database NEW_DB;"
    

    端口:通常为 5432

    FIRST_DB:在你的情况下是 db_test

    NEW_DB:在你的情况下是 db_special

    这又是一个补充,因为通常在circle ci 上,您从第一个图像而不是 Postgres 图像运行命令行。

    如果你看看https://circleci.com/docs/2.0/postgres-config/

    他们有两张图片的例子:首先是 go + postgres 或 java + postgres。

    【讨论】: