Skip to content

PostgreSQL

PostgresContainer sets POSTGRES_USER, POSTGRES_PASSWORD, and POSTGRES_DB, then waits with pg_isready.

Requirements

  • PHP extension: ext-pdo_pgsql
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php

declare(strict_types=1);

use Testcontainers\Modules\PostgresContainer;

$container = (new PostgresContainer())
    ->withPostgresUser('bar')
    ->withPostgresDatabase('foo')
    ->start();

try {
    $pdo = new PDO(
        sprintf('pgsql:host=%s;port=%d;dbname=foo', $container->getHost(), $container->getFirstMappedPort()),
        'bar',
        'test',
    );

    $query = $pdo->query('SELECT datname FROM pg_database');
    $databases = $query->fetchAll(PDO::FETCH_COLUMN);
} finally {
    $container->stop();
}