# Using PostgreSQL

> 原文：[https://docs.gitlab.com/ee/ci/services/postgres.html](https://docs.gitlab.com/ee/ci/services/postgres.html)

*   [Use PostgreSQL with the Docker executor](#use-postgresql-with-the-docker-executor)
*   [Use PostgreSQL with the Shell executor](#use-postgresql-with-the-shell-executor)
*   [Example project](#example-project)

# Using PostgreSQL[](#using-postgresql "Permalink")

由于许多应用程序都依赖 PostgreSQL 作为其数据库，因此最终需要它才能运行测试. 下面将指导您如何使用 GitLab Runner 的 Docker 和 Shell 执行程序执行此操作.

## Use PostgreSQL with the Docker executor[](#use-postgresql-with-the-docker-executor "Permalink")

如果您将[GitLab Runner](../runners/README.html)与 Docker 执行程序一起使用，则基本上已经完成了所有设置.

首先，在您的`.gitlab-ci.yml`添加：

```
services:
  - postgres:12.2-alpine

variables:
  POSTGRES_DB: nice_marmot
  POSTGRES_USER: runner
  POSTGRES_PASSWORD: ""
  POSTGRES_HOST_AUTH_METHOD: trust 
```

**注意：**不能在 GitLab UI 中设置`POSTGRES_DB` ， `POSTGRES_USER` ， `POSTGRES_PASSWORD`和`POSTGRES_HOST_AUTH_METHOD`变量. 要设置它们，请将它们分配给[UI 中](../variables/README.html#create-a-custom-variable-in-the-ui)的变量，然后将该变量分配给`.gitlab-ci.yml`的`POSTGRES_DB` ， `POSTGRES_USER` ， `POSTGRES_PASSWORD`和`POSTGRES_HOST_AUTH_METHOD`变量.

然后将您的应用程序配置为使用数据库，例如：

```
Host: postgres
User: runner
Password: ''
Database: nice_marmot 
```

如果您想知道为什么我们对`Host`使用`postgres` ，请阅读[如何将服务链接到作业的更多信息](../docker/using_docker_images.html#how-services-are-linked-to-the-job) .

您还可以使用[Docker Hub](https://hub.docker.com/_/postgres)上可用的任何其他 Docker 映像. 例如，要使用 PostgreSQL 9.3，服务将变为`postgres:9.3` .

`postgres`图像可以接受一些环境变量. 有关更多详细信息，请参阅[Docker Hub](https://hub.docker.com/_/postgres)上的文档.

## Use PostgreSQL with the Shell executor[](#use-postgresql-with-the-shell-executor "Permalink")

您还可以在手动配置的服务器上使用 PostgreSQL，这些服务器将 GitLab Runner 与 Shell 执行程序一起使用.

首先安装 PostgreSQL 服务器：

```
sudo apt-get install -y postgresql postgresql-client libpq-dev 
```

下一步是创建用户，因此登录 PostgreSQL：

```
sudo -u postgres psql -d template1 
```

然后创建一个将由您的应用程序使用的用户（在我们的示例中为`runner` ）. 将以下命令中的`$password`更改`$password`真实的强密码.

***注意：**不要输入`template1=#` ，这是 PostgreSQL 提示的一部分.*

```
template1=# CREATE USER runner WITH PASSWORD '$password' CREATEDB; 
```

***注意：**请注意，我们创建的用户具有创建数据库的特权（ `CREATEDB` ）. 在以下步骤中，我们将为该用户显式创建一个数据库，但是如果在您的测试框架中有删除和创建数据库的工具，则具有该特权将很有用.*

创建数据库，并授予其上的所有特权用户`runner` ：

```
template1=# CREATE DATABASE nice_marmot OWNER runner; 
```

如果一切顺利，您现在可以退出数据库会话：

```
template1=# \q 
```

现在，尝试连接到与用户新创建的数据库`runner`检查一切就绪.

```
psql -U runner -h localhost -d nice_marmot -W 
```

***注意：**我们明确告诉`psql`连接到 localhost 以便使用 md5 身份验证. 如果您省略此步骤，则将被拒绝访问.*

最后，将您的应用程序配置为使用数据库，例如：

```
Host: localhost
User: runner
Password: $password
Database: nice_marmot 
```

## Example project[](#example-project "Permalink")

为了方便起见，我们使用公共可[共享的](../runners/README.html)运行程序在[GitLab.com](https://gitlab.com)上运行了一个[示例 PostgreSQL 项目](https://gitlab.com/gitlab-examples/postgres) .

想要破解吗？ 只需对其进行分叉，提交并推送您的更改. 稍后，公共跑步者将选择更改并开始工作.