Creating your first cluster (PGD Essential)#

入門ガイドのこの部分は、Docker Composeを使用してローカルクラスターを作成するのに役立ちます。これは、 EDB Postgres DistributedPGD Essentialの機能と機能に慣れるための優れた方法です。

前提条件#

  • ローカルマシンにインストールされているDockerおよびDocker Compose。

PGD Dockerクイックスタートキットのインストール#

最初のPGDクラスターを作成するには、EDBが提供するDocker Composeファイルを使用できます。これにより、3つのノードでローカルクラスターがセットアップされます。これは、テストと開発の目的に最適です。

  1. ローカルマシンにDockerおよびDocker Composeがインストールされていることを確認します。 Docker installation guide をまだ行っていない場合は、フォローできます。

  2. ターミナルを開き、dockerをインストールしたマシンで、PGDクラスターの新しいディレクトリを作成します。例

mkdir pgd-cluster
cd pgd-cluster
  1. 次のコマンドを実行して、PGD Docker Composeファイルをダウンロードします。

curl -L https://enterprisedb.com/docs/pgd/latest/get-started/assets/pgd_quickstart.sh | bash
#  pgd_quickstart.sh

# !/bin/bash

#  This script will unpack embedded files directly into the current working directory.

#  Designed for curl ... | bash execution.

#  Exit immediately if a command exits with a non-zero status.

#  Pipefail ensures that a pipelines return status is the value of the last (rightmost) command

#  to exit with a non-zero status, or zero if all commands in the pipeline exit successfully.

set -eo pipefail

echo "Starting PGD Docker Quickstart unpacker (via curl | bash)..."
echo ""
echo "============================================================================"
echo "WARNING: Files will be extracted directly into your current directory: $(pwd)"
echo "         This process requires the current directory to be EMPTY."
echo "         Affected files: Dockerfile.pge, docker-compose.yml, docker-entrypoint.sh, qs.sh" # <--- UPDATED list
echo "============================================================================"
echo ""

#  --- Check if current directory is empty ---

#  ls -A . lists all files and directories except . and ..

if [ -n "$(ls -A .)" ]; then
    echo "Error: The current directory $(pwd) is NOT empty." >&2
    echo "       Please run this script from an empty directory to prevent accidental overwrites." >&2
    echo "       Aborting extraction." >&2
    exit 1
fi

echo "Current directory is empty. Proceeding with extraction."
echo "" # Newline for readability

#  --- No temporary directory creation or cd operations here ---

#  Files will be extracted directly into the current working directory.

echo "Extracting embedded files..."

#  --- Embedded Data Decoding and Extraction ---

#  Each files content is base64 encoded and embedded here as a here-document.

echo "  Extracting Dockerfile.pge..."
base64 -d <<EOF_DOCKERFILE_PGE_ > "Dockerfile.pge"
RlJPTSBkZWJpYW4KClJVTiBhcHQtZ2V0IHVwZGF0ZSAteSAmJiBhcHQtZ2V0IGluc3RhbGwgLXkgY3VybAoKQVJHIEVEQl9TVUJTQ1JJUFRJT05fVE9LRU49IiIKClJVTiBjdXJsIC0xc0xmICJodHRwczovL2Rvd25sb2Fkcy5lbnRlcnByaXNlZGIuY29tLyR7RURCX1NVQlNDUklQVElPTl9UT0tFTn0vZW50ZXJwcmlzZS9zZXR1cC5kZWIuc2giIHwgYmFzaApSVU4gY3VybCAtMXNMZiAiaHR0cHM6Ly9kb3dubG9hZHMuZW50ZXJwcmlzZWRiLmNvbS8ke0VEQl9TVUJTQ1JJUFRJT05fVE9LRU59L3Bvc3RncmVzX2Rpc3RyaWJ1dGVkL3NldHVwLmRlYi5zaCIgfCBiYXNoCgpSVU4gYXB0LWdldCB1cGRhdGUgLXkgJiYgYXB0LWdldCBpbnN0YWxsIC15IGVkYi1wb3N0Z3Jlc2V4dGVuZGVkLTE3IGVkYi1wZ2Q2LWVzc2VudGlhbC1wZ2V4dGVuZGVkMTcgClJVTiBhcHQtZ2V0IGluc3RhbGwganEgLXkKUlVOIGFwdC1nZXQgaW5zdGFsbCAteSBpcHV0aWxzLXBpbmcKClJVTiBta2RpciAtcCAvdmFyL2xpYi9wb3N0Z3Jlc3FsCgpDT1BZIC4vZG9ja2VyLWVudHJ5cG9pbnQuc2ggL3Zhci9saWIvcG9zdGdyZXNxbC8KClJVTiBjaG93biAtUiBwb3N0Z3Jlczpwb3N0Z3JlcyAvdmFyL2xpYi9wb3N0Z3Jlc3FsCgpSVU4gbWtkaXIgLXAgL2V0Yy9lZGIvcGdkLWNsaQoKUlVOIGNob3duIC1SIHBvc3RncmVzOnBvc3RncmVzIC9ldGMvZWRiL3BnZC1jbGkvCgoKRU5WIFBBVEg9Ii91c3IvbGliL2VkYi1wZ2UvMTcvYmluOiR7UEFUSH0iCkVOViBQR0RBVEE9Ii92YXIvbGliL2VkYi1wZ2UvMTcvZGF0YSIKClJVTiBta2RpciAtcCAvdmFyL2xpYi9lZGItcGdlLzE3L2RhdGEKUlVOIGNob3duIC1SIHBvc3RncmVzOnBvc3RncmVzIC92YXIvbGliL2VkYi1wZ2UvMTcvZGF0YQoKVk9MVU1FIC92YXIvbGliL2VkYi1wZ2UvMTcvZGF0YQoKVVNFUiBwb3N0Z3JlcwpXT1JLRElSIC92YXIvbGliL3Bvc3RncmVzcWwKCkNNRCBbIi92YXIvbGliL3Bvc3RncmVzcWwvZG9ja2VyLWVudHJ5cG9pbnQuc2giXQo=
EOF_DOCKERFILE_PGE_
echo "  Extracting docker-compose.yml..."
base64 -d <<EOF_DOCKER_COMPOSE_YML_ > "docker-compose.yml"
c2VydmljZXM6CiAgaG9zdC0xOgogICAgaW1hZ2U6IHBnZAogICAgaG9zdG5hbWU6IGhvc3QtMQogICAgZW52aXJvbm1lbnQ6CiAgICAgIFBHUEFTU1dPUkQ6IHNlY3JldAogICAgICBQR0RfSk9JTl9OT0RFX0RTTjogInBvcnQ9NTQzMiBkYm5hbWU9cGdkZGIgaG9zdD1ob3N0LTEgdXNlcj1wb3N0Z3JlcyIKICAgIHJlc3RhcnQ6IGFsd2F5cwogICAgdm9sdW1lczoKICAgICAgLSBwZ2RhdGEtaG9zdC0xOi92YXIvbGliL2VkYi1wZ2UvMTcvZGF0YQoKICBob3N0LTI6CiAgICBpbWFnZTogcGdkCiAgICBob3N0bmFtZTogaG9zdC0yCiAgICBlbnZpcm9ubWVudDoKICAgICAgUEdQQVNTV09SRDogc2VjcmV0CiAgICAgIFBHRF9KT0lOX05PREVfRFNOOiAicG9ydD01NDMyIGRibmFtZT1wZ2RkYiBob3N0PWhvc3QtMSB1c2VyPXBvc3RncmVzIgogICAgcmVzdGFydDogYWx3YXlzCiAgICB2b2x1bWVzOgogICAgICAtIHBnZGF0YS1ob3N0LTI6L3Zhci9saWIvZWRiLXBnZS8xNy9kYXRhCgogIGhvc3QtMzoKICAgIGltYWdlOiBwZ2QKICAgIGhvc3RuYW1lOiBob3N0LTMKICAgIGVudmlyb25tZW50OgogICAgICBQR1BBU1NXT1JEOiBzZWNyZXQKICAgICAgUEdEX0pPSU5fTk9ERV9EU046ICJwb3J0PTU0MzIgZGJuYW1lPXBnZGRiIGhvc3Q9aG9zdC0xIHVzZXI9cG9zdGdyZXMiCiAgICByZXN0YXJ0OiBhbHdheXMKICAgIHBvcnRzOgogICAgICAtICI2NDMyOjY0MzIiCiAgICAgIC0gIjY0MzM6NjQzMyIKICAgICAgLSAiNjQzNDo2NDM0IgogICAgdm9sdW1lczoKICAgICAgLSBwZ2RhdGEtaG9zdC0zOi92YXIvbGliL2VkYi1wZ2UvMTcvZGF0YQoKCnZvbHVtZXM6CiAgcGdkYXRhLWhvc3QtMToKICAgIGRyaXZlcjogbG9jYWwKICAgIGRyaXZlcl9vcHRzOgogICAgICBvOiBiaW5kCiAgICAgIHR5cGU6IG5vbmUKICAgICAgZGV2aWNlOiAuL2hvc3QtMS12b2x1bWUKICBwZ2RhdGEtaG9zdC0yOgogICAgZHJpdmVyOiBsb2NhbAogICAgZHJpdmVyX29wdHM6CiAgICAgIG86IGJpbmQKICAgICAgdHlwZTogbm9uZQogICAgICBkZXZpY2U6IC4vaG9zdC0yLXZvbHVtZQogIHBnZGF0YS1ob3N0LTM6CiAgICBkcml2ZXI6IGxvY2FsCiAgICBkcml2ZXJfb3B0czoKICAgICAgbzogYmluZAogICAgICB0eXBlOiBub25lCiAgICAgIGRldmljZTogLi9ob3N0LTMtdm9sdW1lCiAgIAo=
EOF_DOCKER_COMPOSE_YML_
echo "  Extracting docker-entrypoint.sh..."
base64 -d <<EOF_DOCKER_ENTRYPOINT_SH_ > "docker-entrypoint.sh"
IyEvdXNyL2Jpbi9lbnYgYmFzaAojIFRoaXMgdmVyc2lvbiB3aWxsIGFzc3VtZSB0aGF0IGl0IGlzIFBHRQpzZXQgLWV1Cgpwd2QKClBHRF9JTklUSUFMX05PREVfQ09VTlQ9IiR7UEdEX0lOSVRJQUxfTk9ERV9DT1VOVDotM30iClBHRF9IT1NUX05BTUU9IiR7UEdEX0hPU1RfTkFNRTotJChjYXQgL2V0Yy9ob3N0bmFtZSB8IHhhcmdzKX0iClBHRF9OT0RFX05BTUU9IiR7UEdEX05PREVfTkFNRTotJChjYXQgL2V0Yy9ob3N0bmFtZSB8IHhhcmdzIHwgc2VkIHMvaG9zdC0vbm9kZS0vKX0iClBHRF9OT0RFX0dST1VQPSIke1BHRF9OT0RFX0dST1VQOi1ncm91cC0xfSIKUEdEX0NMVVNURVJfTkFNRT0iJHtQR0RfQ0xVU1RFUl9OQU1FOi1wZ2R9IgoKUE9TVEdSRVNfREI9IiR7UE9TVEdSRVNfREI6LXBnZGRifSIKUE9TVEdSRVNfVVNFUj0iJHtQT1NUR1JFU19VU0VSOi1wb3N0Z3Jlc30iClBHREFUQT0iJHtQR0RBVEE6LS92YXIvbGliL2VkYi1wZ2UvMTcvbWFpbi99IgpQR0xPR0ZJTEU9IiR7UEdMT0dGSUxFOi0vdmFyL2xpYi9lZGItcGdlLzE3L2xvZ2ZpbGV9IgoKZWNobyAiQ29uZmlndXJpbmcgJHtQR0RfTk9ERV9OQU1FfSAoJHtQR0RfSE9TVF9OQU1FfSkiCgpQR19QR0RfQ0xJX0NPTkZfQ09OVEVOVFM9JwpjbHVzdGVyOgogIG5hbWU6IHBnZAogIGVuZHBvaW50czoKICAgIC0gaG9zdD1ob3N0LTEgZGJuYW1lPXBnZGRiIHBvcnQ9NTQzMgogICAgLSBob3N0PWhvc3QtMiBkYm5hbWU9cGdkZGIgcG9ydD01NDMyCiAgICAtIGhvc3Q9aG9zdC0zIGRibmFtZT1wZ2RkYiBwb3J0PTU0MzIKJwoKIyBUaGlzIHdpbGwgYmUgdXNlZCBieSBgcGdkIG5vZGUgc2V0dXBgLgpleHBvcnQgUEdQQVNTV09SRD0iJHtQR1BBU1NXT1JEOi0kUE9TVEdSRVNfUEFTU1dPUkR9IgoKZWNobyAiJFBHX1BHRF9DTElfQ09ORl9DT05URU5UUyIgPiAvZXRjL2VkYi9wZ2QtY2xpL3BnZC1jbGktY29uZmlnLnltbAoKaWYgISBbIC1zICIkUEdEQVRBL1BHX1ZFUlNJT04iIF07IHRoZW4KICAgIGVjaG8gIlByb3Zpc2lvbmluZyBQb3N0Z3Jlcy4iCgogICAgUFJJTUFSWT0nZmFsc2UnCiAgICBjYXNlICIkUEdEX0pPSU5fTk9ERV9EU04iIGluCgkqIiBob3N0PSRQR0RfSE9TVF9OQU1FICIqIHwgImhvc3Q9JFBHRF9IT1NUX05BTUUgIiogfCAqIiBob3N0PSRQR0RfSE9TVF9OQU1FIikKCgkgICAgUFJJTUFSWT0ndHJ1ZScKCSAgICA7OwogICAgZXNhYwoKICAgIGlmIFsgJFBSSU1BUlkgPSAndHJ1ZScgXTsgdGhlbgoJZWNobyAiUHJvdmlzaW9uaW5nIFBHRCBub2RlIGFuZCBuZXcgZ3JvdXAuIgoJcGdkIG5vZGUgIiRQR0RfTk9ERV9OQU1FIiBzZXR1cCAtLXZlcmJvc2UgXAoJICAgIC0tZHNuICIkUEdEX0pPSU5fTk9ERV9EU04iIFwKCSAgICAtLWxpc3Rlbi1hZGRyICIkUEdEX0hPU1RfTkFNRSxsb2NhbGhvc3QiIFwKCSAgICAtLWluaXRpYWwtbm9kZS1jb3VudCAiJFBHRF9JTklUSUFMX05PREVfQ09VTlQiIFwKCSAgICAtLXBnZGF0YSAiJFBHREFUQSIgXAoJICAgIC0tbG9nLWZpbGUgIiRQR0xPR0ZJTEUiIFwKCSAgICAtLWNsdXN0ZXItbmFtZSAiJFBHRF9DTFVTVEVSX05BTUUiIFwKCSAgICAtLWdyb3VwLW5hbWUgIiRQR0RfTk9ERV9HUk9VUCIgCiAgICBlbHNlCgllY2hvICJQcm92aXNpb25pbmcgUEdEIG5vZGUgdG8gam9pbiBleGlzdGluZyBncm91cC4iCgoJIyBJbiBjYXNlIHdlIG5lZWQgdG8gZG8gY2xlYW51cC4KCXBzcWwgIiRQR0RfSk9JTl9OT0RFX0RTTiIgLWMgJ1NFTEVDVCBiZHIucnVuX29uX2FsbF9ub2RlcygkJCBTRUxFQ1QgYmRyLmRyb3Bfbm9kZSgnIickUEdEX05PREVfTkFNRSciJywgZm9yY2UgOj0gdHJ1ZSkgJCQpOycKCglwZ2Qgbm9kZSAiJFBHRF9OT0RFX05BTUUiIHNldHVwIC0tdmVyYm9zZSBcCgkgICAgLS1kc24gImhvc3Q9JFBHRF9IT1NUX05BTUUgcG9ydD01NDMyIGRibmFtZT0kUE9TVEdSRVNfREIgdXNlcj0kUE9TVEdSRVNfVVNFUiIgXAoJICAgIC0tbGlzdGVuLWFkZHIgIiRQR0RfSE9TVF9OQU1FLGxvY2FsaG9zdCIgXAoJICAgIC0tcGdkYXRhICIkUEdEQVRBIiBcCgkgICAgLS1sb2ctZmlsZSAiJFBHTE9HRklMRSIgXAoJICAgIC0tY2x1c3Rlci1kc24gIiRQR0RfSk9JTl9OT0RFX0RTTiIgXAoJICAgIC0tZ3JvdXAtbmFtZSAiJFBHRF9OT0RFX0dST1VQIiBcCgkgICAgLS1jbHVzdGVyLW5hbWUgIiRQR0RfQ0xVU1RFUl9OQU1FIiB8fCAocm0gLXJmICIkUEdEQVRBIiAmJiBleGl0IDEpCiAgICBmaQpmaQoKcGdfY3RsIC1EICIkUEdEQVRBIiBzdG9wIHx8IGVjaG8gIlBvc3RncmVzIG5vdCBydW5uaW5nIgoKZXhlYyBwb3N0Z3JlcyAtRCAiJFBHREFUQSIK
EOF_DOCKER_ENTRYPOINT_SH_
echo "  Extracting qs.sh..."
base64 -d <<EOF_QS_SH_ > "qs.sh"
IyEvYmluL2Jhc2gKIyBxcy5zaCAtIFBHRCBRdWlja3N0YXJ0IFV0aWxpdHkgU2NyaXB0CiMgVGhpcyBzY3JpcHQgcHJvdmlkZXMgY29tbWFuZHMgZm9yIGJ1aWxkaW5nLCBzdGFydGluZywgc3RvcHBpbmcsCiMgYW5kIGludGVyYWN0aW5nIHdpdGggdGhlIFBHRCBEb2NrZXIgZW52aXJvbm1lbnQuCgojIEV4aXQgaW1tZWRpYXRlbHkgaWYgYSBjb21tYW5kIGV4aXRzIHdpdGggYSBub24temVybyBzdGF0dXMuCnNldCAtZW8gcGlwZWZhaWwKCiMgLS0tIFV0aWxpdHkgRnVuY3Rpb25zIC0tLQoKY29tbWFuZF9leGlzdHMgKCkgewogICAgY29tbWFuZCAtdiAiJDEiID4vZGV2L251bGwgMj4mMQp9CgpjaGVja19kb2NrZXIoKSB7CiAgICBpZiAhIGNvbW1hbmRfZXhpc3RzIGRvY2tlcjsgdGhlbgogICAgICAgIGVjaG8gIkVycm9yOiBEb2NrZXIgaXMgbm90IGluc3RhbGxlZCBvciBub3QgaW4gUEFUSC4iID4mMgogICAgICAgIGVjaG8gIlBsZWFzZSBpbnN0YWxsIERvY2tlciB0byBwcm9jZWVkLiIgPiYyCiAgICAgICAgcmV0dXJuIDEKICAgIGZpCiAgICBlY2hvICIgIERvY2tlciBmb3VuZC4iCiAgICByZXR1cm4gMAp9CgpjaGVja19kb2NrZXJfY29tcG9zZSgpIHsKICAgIGlmICEgZG9ja2VyIGNvbXBvc2UgdmVyc2lvbiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KICAgICAgICBlY2hvICJFcnJvcjogRG9ja2VyIENvbXBvc2UgKHYyIG9yIG5ld2VyKSBpcyBub3QgaW5zdGFsbGVkIG9yIG5vdCBpbiBQQVRILiIgPiYyCiAgICAgICAgZWNobyAiUGxlYXNlIGluc3RhbGwgRG9ja2VyIENvbXBvc2UgdG8gcHJvY2VlZC4iID4mMgogICAgICAgIHJldHVybiAxCiAgICBmaQogICAgZWNobyAiICBEb2NrZXIgQ29tcG9zZSBmb3VuZC4iCiAgICByZXR1cm4gMAp9CgpjaGVja19zdWJzY3JpcHRpb25fdG9rZW4oKSB7CiAgICBpZiBbIC16ICIkRURCX1NVQlNDUklQVElPTl9UT0tFTiIgXTsgdGhlbgogICAgICAgIGVjaG8gIkVycm9yOiBFREJfU1VCU0NSSVBUSU9OX1RPS0VOIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG5vdCBzZXQuIiA+JjIKICAgICAgICBlY2hvICJQbGVhc2Ugc2V0IHRoaXMgdmFyaWFibGUgKGUuZy4sIGV4cG9ydCBFREJfU1VCU0NSSVBUSU9OX1RPS0VOPSd5b3VyX3Rva2VuJykgYmVmb3JlIHJ1bm5pbmcgdGhlIGNvbW1hbmQuIiA+JjIKICAgICAgICByZXR1cm4gMQogICAgZmkKICAgIGVjaG8gIiAgRURCX1NVQlNDUklQVElPTl9UT0tFTiBpcyBzZXQuIgogICAgcmV0dXJuIDAKfQoKIyAtLS0gQ29tbWFuZHMgLS0tCgpjbWRfcHJlcGFyZSgpIHsKICAgIGVjaG8gIlJ1bm5pbmcgJ3ByZXBhcmUnIGNvbW1hbmQ6IENyZWF0aW5nIHZvbHVtZSBkaXJlY3Rvcmllcy4uLiIKICAgIGxvY2FsIHZvbHVtZXM9KCJob3N0LTEtdm9sdW1lIiAiaG9zdC0yLXZvbHVtZSIgImhvc3QtMy12b2x1bWUiKQogICAgbG9jYWwgc3VjY2Vzcz0wCgogICAgZm9yIHZvbCBpbiAiJHt2b2x1bWVzW0BdfSI7IGRvCiAgICAgICAgaWYgWyAhIC1kICIkdm9sIiBdOyB0aGVuCiAgICAgICAgICAgIGVjaG8gIiAgQ3JlYXRpbmcgZGlyZWN0b3J5OiAnJHZvbCcuLi4iCiAgICAgICAgICAgIGlmICEgbWtkaXIgLXAgIiR2b2wiOyB0aGVuCiAgICAgICAgICAgICAgICBlY2hvICJFcnJvcjogRmFpbGVkIHRvIGNyZWF0ZSAnJHZvbCcuIiA+JjIKICAgICAgICAgICAgICAgIGVjaG8gIiAgICAgICBZb3UgbWF5IG5lZWQgZWxldmF0ZWQgcGVybWlzc2lvbnMuIFRyeTogc3VkbyAuL3FzLnNoIHByZXBhcmUiID4mMgogICAgICAgICAgICAgICAgc3VjY2Vzcz0xCiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGVjaG8gIiAgU3VjY2Vzc2Z1bGx5IGNyZWF0ZWQgJyR2b2wnLiIKICAgICAgICAgICAgZmkKICAgICAgICBlbHNlCiAgICAgICAgICAgIGVjaG8gIiAgRGlyZWN0b3J5ICckdm9sJyBhbHJlYWR5IGV4aXN0cy4gU2tpcHBpbmcuIgogICAgICAgIGZpCiAgICBkb25lCiAgICByZXR1cm4gJHN1Y2Nlc3MKfQoKY21kX2J1aWxkKCkgewogICAgZWNobyAiUnVubmluZyAnYnVpbGQnIGNvbW1hbmQ6IENoZWNraW5nIGVudmlyb25tZW50IGFuZCBidWlsZGluZyBQR0QgRG9ja2VyIGltYWdlLi4uIgogICAgZWNobyAiUGVyZm9ybWluZyBzeXN0ZW0gY2hlY2tzLi4uIgoKICAgIGNoZWNrX2RvY2tlciB8fCByZXR1cm4gMQogICAgY2hlY2tfZG9ja2VyX2NvbXBvc2UgfHwgcmV0dXJuIDEKICAgIGNoZWNrX3N1YnNjcmlwdGlvbl90b2tlbiB8fCByZXR1cm4gMQoKICAgIGVjaG8gIkFsbCBjaGVja3MgcGFzc2VkLiBCdWlsZGluZyBEb2NrZXIgaW1hZ2UgJ3BnZCcgZnJvbSBEb2NrZXJmaWxlLnBnZS4uLiIKCiAgICAjIFRoZSAnLicgY29udGV4dCByZWZlcnMgdG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5CiAgICBkb2NrZXIgYnVpbGQgLWYgRG9ja2VyZmlsZS5wZ2UgLS1idWlsZC1hcmcgRURCX1NVQlNDUklQVElPTl9UT0tFTj0iJEVEQl9TVUJTQ1JJUFRJT05fVE9LRU4iIC10IHBnZCAuCgogICAgQlVJTERfU1RBVFVTPSQ/CiAgICBpZiBbICRCVUlMRF9TVEFUVVMgLWVxIDAgXTsgdGhlbgogICAgICAgIGVjaG8gIkRvY2tlciBpbWFnZSAncGdkJyBidWlsdCBzdWNjZXNzZnVsbHkhIgogICAgZWxzZQogICAgICAgIGVjaG8gIkVycm9yOiBEb2NrZXIgaW1hZ2UgYnVpbGQgZmFpbGVkLiBFeGl0IGNvZGU6ICRCVUlMRF9TVEFUVVMiID4mMgogICAgZmkKICAgIHJldHVybiAkQlVJTERfU1RBVFVTCn0KCmNtZF9zdGFydCgpIHsKICAgIGVjaG8gIlJ1bm5pbmcgJ3N0YXJ0JyBjb21tYW5kOiBTdGFydGluZyBEb2NrZXIgQ29tcG9zZSBzZXJ2aWNlcy4uLiIKICAgIGVjaG8gIlBlcmZvcm1pbmcgc3lzdGVtIGNoZWNrcyBmb3Igc3RhcnQuLi4iCgogICAgY2hlY2tfZG9ja2VyIHx8IHJldHVybiAxCiAgICBjaGVja19kb2NrZXJfY29tcG9zZSB8fCByZXR1cm4gMQoKICAgIGlmIFsgISAtZiAiZG9ja2VyLWNvbXBvc2UueW1sIiBdOyB0aGVuCiAgICAgICAgZWNobyAiRXJyb3I6ICdkb2NrZXItY29tcG9zZS55bWwnIG5vdCBmb3VuZCBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuIiA+JjIKICAgICAgICBlY2hvICJQbGVhc2UgZW5zdXJlIHlvdSBhcmUgaW4gdGhlIGNvcnJlY3QgZGlyZWN0b3J5IHdoZXJlIGZpbGVzIHdlcmUgZXh0cmFjdGVkLiIgPiYyCiAgICAgICAgcmV0dXJuIDEKICAgIGZpCgogICAgZG9ja2VyIGNvbXBvc2UgdXAgLWQKICAgIFNUQVJUX1NUQVRVUz0kPwogICAgaWYgWyAkU1RBUlRfU1RBVFVTIC1lcSAwIF07IHRoZW4KICAgICAgICBlY2hvICJEb2NrZXIgQ29tcG9zZSBzZXJ2aWNlcyBzdGFydGVkIHN1Y2Nlc3NmdWxseSBpbiBkZXRhY2hlZCBtb2RlLiIKICAgIGVsc2UKICAgICAgICBlY2hvICJFcnJvcjogRG9ja2VyIENvbXBvc2Ugc2VydmljZXMgZmFpbGVkIHRvIHN0YXJ0LiBFeGl0IGNvZGU6ICRTVEFSVF9TVEFUVVMiID4mMgogICAgZmkKICAgIHJldHVybiAkU1RBUlRfU1RBVFVTCn0KCmNtZF9zdG9wKCkgewogICAgZWNobyAiUnVubmluZyAnc3RvcCcgY29tbWFuZDogU3RvcHBpbmcgRG9ja2VyIENvbXBvc2Ugc2VydmljZXMuLi4iCiAgICBlY2hvICJQZXJmb3JtaW5nIHN5c3RlbSBjaGVja3MgZm9yIHN0b3AuLi4iCgogICAgY2hlY2tfZG9ja2VyIHx8IHJldHVybiAxCiAgICBjaGVja19kb2NrZXJfY29tcG9zZSB8fCByZXR1cm4gMQoKICAgIGlmIFsgISAtZiAiZG9ja2VyLWNvbXBvc2UueW1sIiBdOyB0aGVuCiAgICAgICAgZWNobyAiRXJyb3I6ICdkb2NrZXItY29tcG9zZS55bWwnIG5vdCBmb3VuZCBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuIiA+JjIKICAgICAgICBlY2hvICJQbGVhc2UgZW5zdXJlIHlvdSBhcmUgaW4gdGhlIGNvcnJlY3QgZGlyZWN0b3J5IHdoZXJlIGZpbGVzIHdlcmUgZXh0cmFjdGVkLiIgPiYyCiAgICAgICAgcmV0dXJuIDEKICAgIGZpCgogICAgZG9ja2VyIGNvbXBvc2UgZG93bgogICAgU1RPUF9TVEFUVVM9JD8KICAgIGlmIFsgJFNUT1BfU1RBVFVTIC1lcSAwIF07IHRoZW4KICAgICAgICBlY2hvICJEb2NrZXIgQ29tcG9zZSBzZXJ2aWNlcyBzdG9wcGVkIGFuZCByZW1vdmVkIHN1Y2Nlc3NmdWxseS4iCiAgICBlbHNlCiAgICAgICAgZWNobyAiRXJyb3I6IERvY2tlciBDb21wb3NlIHNlcnZpY2VzIGZhaWxlZCB0byBzdG9wL3JlbW92ZS4gRXhpdCBjb2RlOiAkU1RPUF9TVEFUVVMiID4mMgogICAgZmkKICAgIHJldHVybiAkU1RPUF9TVEFUVVMKfQoKY21kX3BzcWwoKSB7CiAgICBlY2hvICJSdW5uaW5nICdwc3FsJyBjb21tYW5kOiBDb25uZWN0aW5nIHRvIHBnZGRiIHZpYSBob3N0LTEuLi4iCiAgICBlY2hvICJQZXJmb3JtaW5nIHN5c3RlbSBjaGVja3MgZm9yIHBzcWwuLi4iCgogICAgY2hlY2tfZG9ja2VyIHx8IHJldHVybiAxCiAgICBjaGVja19kb2NrZXJfY29tcG9zZSB8fCByZXR1cm4gMQoKICAgIGlmIFsgISAtZiAiZG9ja2VyLWNvbXBvc2UueW1sIiBdOyB0aGVuCiAgICAgICAgZWNobyAiRXJyb3I6ICdkb2NrZXItY29tcG9zZS55bWwnIG5vdCBmb3VuZCBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuIiA+JjIKICAgICAgICBlY2hvICJQbGVhc2UgZW5zdXJlIHlvdSBhcmUgaW4gdGhlIGNvcnJlY3QgZGlyZWN0b3J5IHdoZXJlIGZpbGVzIHdlcmUgZXh0cmFjdGVkLiIgPiYyCiAgICAgICAgcmV0dXJuIDEKICAgIGZpCgogICAgZG9ja2VyIGNvbXBvc2UgZXhlYyBob3N0LTEgcHNxbCBwZ2RkYiAiJEAiCiAgICBQU1FMX1NUQVRVUz0kPwogICAgcmV0dXJuICRQU1FMX1NUQVRVUwp9CgpjbWRfYmFzaCgpIHsKICAgIGVjaG8gIlJ1bm5pbmcgJ2Jhc2gnIGNvbW1hbmQ6IE9wZW5pbmcgYSBiYXNoIHNoZWxsIGluIGhvc3QtMSBjb250YWluZXIuLi4iCiAgICBlY2hvICJQZXJmb3JtaW5nIHN5c3RlbSBjaGVja3MgZm9yIGJhc2guLi4iCgogICAgY2hlY2tfZG9ja2VyIHx8IHJldHVybiAxCiAgICBjaGVja19kb2NrZXJfY29tcG9zZSB8fCByZXR1cm4gMQoKICAgIGlmIFsgISAtZiAiZG9ja2VyLWNvbXBvc2UueW1sIiBdOyB0aGVuCiAgICAgICAgZWNobyAiRXJyb3I6ICdkb2NrZXItY29tcG9zZS55bWwnIG5vdCBmb3VuZCBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuIiA+JjIKICAgICAgICBlY2hvICJQbGVhc2UgZW5zdXJlIHlvdSBhcmUgaW4gdGhlIGNvcnJlY3QgZGlyZWN0b3J5IHdoZXJlIGZpbGVzIHdlcmUgZXh0cmFjdGVkLiIgPiYyCiAgICAgICAgcmV0dXJuIDEKICAgIGZpCgogICAgZG9ja2VyIGNvbXBvc2UgZXhlYyBob3N0LTEgYmFzaCAiJEAiCiAgICBCQVNIX1NUQVRVUz0kPwogICAgcmV0dXJuICRCQVNIX1NUQVRVUwp9CgpjbWRfY2xlYW51cCgpIHsKICAgIGVjaG8gIlJ1bm5pbmcgJ2NsZWFudXAnIGNvbW1hbmQ6IFJlbW92aW5nIHZvbHVtZSBkaXJlY3Rvcmllcy4uLiIKICAgIGxvY2FsIHZvbHVtZXM9KCJob3N0LTEtdm9sdW1lIiAiaG9zdC0yLXZvbHVtZSIgImhvc3QtMy12b2x1bWUiKQogICAgbG9jYWwgc3VjY2Vzcz0wCgogICAgZm9yIHZvbCBpbiAiJHt2b2x1bWVzW0BdfSI7IGRvCiAgICAgICAgaWYgWyAtZCAiJHZvbCIgXTsgdGhlbgogICAgICAgICAgICBlY2hvICIgIFJlbW92aW5nIGRpcmVjdG9yeTogJyR2b2wnLi4uIgogICAgICAgICAgICBpZiAhIHJtIC1yZiAiJHZvbCI7IHRoZW4KICAgICAgICAgICAgICAgIGVjaG8gIkVycm9yOiBGYWlsZWQgdG8gcmVtb3ZlICckdm9sJy4iID4mMgogICAgICAgICAgICAgICAgZWNobyAiICAgICAgIFlvdSBtYXkgbmVlZCBlbGV2YXRlZCBwZXJtaXNzaW9ucy4gVHJ5OiBzdWRvIC4vcXMuc2ggY2xlYW51cCIgPiYyCiAgICAgICAgICAgICAgICBzdWNjZXNzPTEKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgZWNobyAiICBTdWNjZXNzZnVsbHkgcmVtb3ZlZCAnJHZvbCcuIgogICAgICAgICAgICBmaQogICAgICAgIGVsc2UKICAgICAgICAgICAgZWNobyAiICBEaXJlY3RvcnkgJyR2b2wnIGRvZXMgbm90IGV4aXN0LiBTa2lwcGluZy4iCiAgICAgICAgZmkKICAgIGRvbmUKICAgIHJldHVybiAkc3VjY2Vzcwp9CgojIC0tLSBNYWluIFNjcmlwdCBMb2dpYyAtLS0KCnNob3dfaGVscCgpIHsKICAgIGVjaG8gIlVzYWdlOiBxcy5zaCA8Y29tbWFuZD4iCiAgICBlY2hvICIiCiAgICBlY2hvICJDb21tYW5kczoiCiAgICBlY2hvICIgIHByZXBhcmUgIC0gQ3JlYXRlcyAnaG9zdC1YLXZvbHVtZScgZGlyZWN0b3JpZXMgZm9yIERvY2tlciB2b2x1bWVzLiIKICAgIGVjaG8gIiAgYnVpbGQgICAgLSBDaGVja3MgZW52aXJvbm1lbnQsIGJ1aWxkcyB0aGUgJ3BnZCcgRG9ja2VyIGltYWdlLiIKICAgIGVjaG8gIiAgc3RhcnQgICAgLSBTdGFydHMgRG9ja2VyIENvbXBvc2Ugc2VydmljZXMgKGRvY2tlciBjb21wb3NlIHVwIC1kKS4iCiAgICBlY2hvICIgIHN0b3AgICAgIC0gU3RvcHMgYW5kIHJlbW92ZXMgRG9ja2VyIENvbXBvc2Ugc2VydmljZXMgKGRvY2tlciBjb21wb3NlIGRvd24pLiIKICAgIGVjaG8gIiAgcHNxbCAgICAgLSBDb25uZWN0cyB0byBwZ2RkYiBvbiBob3N0LTEgdmlhIHBzcWwgKGRvY2tlciBjb21wb3NlIGV4ZWMgaG9zdC0xIHBzcWwgcGdkZGIpLiIKICAgIGVjaG8gIiAgICAgICAgICAgICBBZGRpdGlvbmFsIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGRpcmVjdGx5IHRvIHBzcWwuIgogICAgZWNobyAiICBiYXNoICAgICAtIE9wZW5zIGEgYmFzaCBzaGVsbCBpbiB0aGUgaG9zdC0xIGNvbnRhaW5lciAoZG9ja2VyIGNvbXBvc2UgZXhlYyBob3N0LTEgYmFzaCkuIgogICAgZWNobyAiICAgICAgICAgICAgIEFkZGl0aW9uYWwgYXJndW1lbnRzIGFyZSBwYXNzZWQgZGlyZWN0bHkgdG8gYmFzaC4iCiAgICBlY2hvICIgIGNsZWFudXAgIC0gUmVtb3ZlcyAnaG9zdC1YLXZvbHVtZScgZGlyZWN0b3JpZXMuIgogICAgZWNobyAiIgogICAgZWNobyAiTm90ZTogRW5zdXJlIEVEQl9TVUJTQ1JJUFRJT05fVE9LRU4gaXMgc2V0IGZvciB0aGUgJ2J1aWxkJyBjb21tYW5kLiIKfQoKIyBDaGVjayBmb3IgY29tbWFuZCBhcmd1bWVudAppZiBbIC16ICIkMSIgXTsgdGhlbgogICAgZWNobyAiRXJyb3I6IE5vIGNvbW1hbmQgcHJvdmlkZWQuIiA+JjIKICAgIHNob3dfaGVscAogICAgZXhpdCAxCmZpCgpDT01NQU5EPSIkMSIKc2hpZnQgIyBSZW1vdmUgdGhlIGNvbW1hbmQgZnJvbSBhcmd1bWVudHMsIHBhc3MgcmVtYWluaW5nIHRvIHN1YmNvbW1hbmQKCmNhc2UgIiRDT01NQU5EIiBpbgogICAgcHJlcGFyZSkKICAgICAgICBjbWRfcHJlcGFyZSAiJEAiCiAgICAgICAgOzsKICAgIGJ1aWxkKQogICAgICAgIGNtZF9idWlsZCAiJEAiCiAgICAgICAgOzsKICAgIHN0YXJ0KQogICAgICAgIGNtZF9zdGFydCAiJEAiCiAgICAgICAgOzsKICAgIHN0b3ApCiAgICAgICAgY21kX3N0b3AgIiRAIgogICAgICAgIDs7CiAgICBwc3FsKQogICAgICAgIGNtZF9wc3FsICIkQCIKICAgICAgICA7OwogICAgYmFzaCkKICAgICAgICBjbWRfYmFzaCAiJEAiCiAgICAgICAgOzsKICAgIGNsZWFudXApCiAgICAgICAgY21kX2NsZWFudXAgIiRAIgogICAgICAgIDs7CiAgICAtaHwtLWhlbHB8aGVscCkKICAgICAgICBzaG93X2hlbHAKICAgICAgICA7OwogICAgKikKICAgICAgICBlY2hvICJFcnJvcjogVW5rbm93biBjb21tYW5kICckQ09NTUFORCcuIiA+MgogICAgICAgIHNob3dfaGVscAogICAgICAgIGV4aXQgMQogICAgICAgIDs7CmVzYWMKCmV4aXQgJD8KCg==
EOF_QS_SH_

echo "Files unpacked successfully into the current directory: $(pwd)."
echo ""

#  Make necessary scripts executable

if [ -f "qs.sh" ]; then # <--- UPDATED to qs.sh
    chmod +x qs.sh
    echo "Made qs.sh executable."
fi

#  Assuming docker-entrypoint.sh might also need executable permissions if present

if [ -f "docker-entrypoint.sh" ]; then
    chmod +x docker-entrypoint.sh
    echo "Made docker-entrypoint.sh executable."
fi

echo ""
echo "You can now use the qs.sh command to manage your PGD Docker environment."
echo "For available commands, run: ./qs.sh help"
echo ""
echo "Common next steps:"
echo "1. Create volume directories: ./qs.sh prepare"
echo "2. Build the PGD Docker image: export EDB_SUBSCRIPTION_TOKEN=\"YOUR_EDB_TOKEN\"; ./qs.sh build"
echo "3. Start the PGD services: ./qs.sh start"
echo ""
echo "Remember to clean up these files and created volumes manually when you are done. Example:"
echo "  ./qs.sh stop"
echo "  ./qs.sh cleanup"
echo "  rm Dockerfile.pge docker-compose.yml docker-entrypoint.sh qs.sh" # <--- UPDATED list
echo ""

#  The script exits here after printing instructions.

#  No automatic cleanup of extracted files as they are in the users CWD.
#  docker-compose.yml

services:
  host-1:
    hostname: host-1
    image: pgd
    environment:
      PGPASSWORD: secret
      PGD_JOIN_NODE_DSN: "port=5432 dbname=pgddb host=host-1 user=postgres"
    restart: always
    volumes:
      - ./host-1-data:/var/lib/postgresql/data

  host-2:
    hostname: host-2
    extends: host-1
    volumes:
     - ./host-2-data:/var/lib/postgresql/data

  host-3:
    hostname:  host-3
    extends: host-1
    volumes:
     - ./host-3-data:/var/lib/postgresql/data

これにより、 PGD Dockerクイックスタートキットがダウンロードされます。これには、Docker ComposeファイルおよびPGD Essentialを開始するために必要なその他のファイルが含まれています。

  1. ダウンロードが完了したら、PGDクラスターの環境を準備する必要があります。これは、次のコマンドを実行して実行します。

./qs.sh prepare

このコマンドは、PGDクラスターに必要なディレクトリとファイルを作成します。

  1. 次に、 PGDクラスターのDockerイメージをビルドする必要があります。これは、次のコマンドを実行して行うことができます。

export EDB_SUBSCRIPTION_TOKEN=...
./qs.sh build

このコマンドは、PGDクイックスタートクラスターに必要なDockerイメージをビルドします。

  1. イメージがビルドされたら、Docker Composeを使用してPGDクラスターを起動できます。次のコマンドを実行します。

./qs.sh start

このコマンドは、Dockerコンテナを起動し、バックグラウンドで実行されるデフォルト構成でローカルクラスターを作成します。

PGDクラスターへのアクセス#

  1. コンテナが起動して実行されたら、次のコマンドを使用してPGDクラスターにアクセスできます。

docker compose exec host-1 psql pgddb

このコマンドは、 psql コマンドラインインターフェイスを使用して、クラスターの最初のノードに直接接続します。

これは、メンテナンスおよび管理タスクのためにデータベースに接続する方法です。

アプリケーションとユーザーのアクセスには、通常、クラスター内のすべてのホストのTCPポート6432で実行されている接続マネージャーを使用して接続します。

  1. 次のコマンドを使用して、クラスター内の書き込みリーダーノードに接続できます。

docker compose exec host-1 psql -h host-1 -p 6432 pgddb

-h host-1 は、クラスター内のホストの名前に置き換えることができます。それらはすべて接続マネージャーを実行します。

ローカルマシンにpsqlクライアントをインストールしている場合は、次のコマンドを使用してクラスターに接続することもできます。

export PGPASSWORD=secret
psql -h localhost -p 6432 -U postgres pgddb

これは、ポート6432のhost-3コンテナで実行されている接続マネージャーに接続します。これは、クラスター内の書き込みリーダーノードにルーティングされます。

pgddb=# select node_name from bdr.local_node_summary;
node_name
-----------
node-1
(1 row)
  1. コンテナの外部からPGD CLIを使用するには、次のコマンドを実行できます。

docker compose exec host-1 pgd nodes list
__OUTPUT__
 Node Name | Group Name | Node Kind | Join State | Node Status
- ----------+------------+-----------+------------+-------------
 node-1    | group-1    | data      | ACTIVE     | Up
 node-2    | group-1    | data      | ACTIVE     | Up
 node-3    | group-1    | data      | ACTIVE     | Up

このpgdコマンドは、クラスター内のノードとそのステータスをリストします。

host-1コンテナでシェルを取得し、pgdコマンドを直接実行することもできます。

docker compose exec host-1 bash
pgd nodes list
__OUTPUT__
 Node Name | Group Name | Node Kind | Join State | Node Status
- ----------+------------+-----------+------------+-------------
 node-1    | group-1    | data      | ACTIVE     | Up
 node-2    | group-1    | data      | ACTIVE     | Up
 node-3    | group-1    | data      | ACTIVE     | Up

これにより、 PGD CLIにアクセスでき、host-1コンテナで直接PGDコマンドを実行できます。

次のステップ#

最初のPGDクラスターを作成したため、次のトピックを検討できます。