Jan 5, 2026
Feb 25, 2026
N/A Views
MD

VMware Tanzu for Postgres 18.2をRocky Linux 9にインストールする手順をメモします。

目次

VMware Tanzu for Postgresのダウンロード

Broadcom Supportにログインして、VMware Tanzu for Postgresのダウンロードページにアクセスします。

最新バージョンを選択します。

image

"I agree to the Terms and Conditions"にチェックを入れて、

image

EL9用のインストーラーを~/Downloadsにダウンロードします。

image

cd ~/Downloads
mkdir -p vmware-postgres-18.2.0
unzip -d vmware-postgres-18.2.0 vmware-postgres-18.2.0.el9.x86_64.zip

Rocky Linux 9へのインストール

Rocky Linux 9環境はOrbStackLinux Machineを使って構築します。

VMware Tanzu for Postgresはx86_64にしか対応していないので、x86_64エミュレーションを使ってRocky Linux 9マシンを作成します。

orb create -a amd64 rocky:9 tanzu-postgres
orb shell -m tanzu-postgres

ドキュメントには書いてありませんでしたが、VMware Tanzu for Postgresのインストールにはlibssh2パッケージが必要でした。
libssh2パッケージをインストールするにはEPEL(Extra Packages for Enterprise Linux)リポジトリを有効化する必要があります。

sudo dnf install epel-release -y

メタデータを更新します。

sudo dnf clean all
sudo dnf makecache

libssh2(その他、あると便利な)パッケージをインストールします。

sudo dnf install libssh2 which lsof vim -y

VMware Tanzu for Postgresのインストール

VMware Tanzu for Postgresのrpmパッケージをインストールします。

cd /Users/$USER/Downloads/vmware-postgres-18.2.0
sudo dnf install ./vmware-postgres18-18.2-1.el9.x86_64.rpm ./vmware-postgres18-libs-18.2-1.el9.x86_64.rpm -y

postgresユーザーができるので、ユーザーを切り替えてデータベースを初期化します。

sudo su - postgres

データベースを初期化します。

initdb -D /var/lib/pgsql/data

一旦、元のユーザーに戻ります。

exit

systemdサービスファイルの作成

VMware Tanzu for Postgresにはサービス化のためのsystemdユニットファイルが含まれていないので、自分で作成します。

cat <<'EOF' | sudo tee /etc/systemd/system/postgresql.service > /dev/null
[Unit]
Description=VMware Tanzu for Postgres
After=network.target

[Service]
Type=forking
User=postgres
Group=postgres

ExecStart=/opt/vmware/postgres/18/bin/pg_ctl start -D /var/lib/pgsql/data -l /var/lib/pgsql/data/logfile
ExecStop=/opt/vmware/postgres/18/bin/pg_ctl stop -D /var/lib/pgsql/data
ExecReload=/opt/vmware/postgres/18/bin/pg_ctl reload -D /var/lib/pgsql/data

TimeoutSec=300

[Install]
WantedBy=multi-user.target
EOF

systemdデーモンをリロードして、PostgreSQLサービスを有効化・起動します。

sudo systemctl daemon-reload
sudo systemctl enable postgresql
sudo systemctl start postgresql
sudo systemctl status postgresql

PostgreSQLが起動していることを確認します。

$ sudo lsof -i -n -P | grep -i listen
postgres 1700 postgres    9u  IPv6 49812992      0t0  TCP [::1]:5432 (LISTEN)
postgres 1700 postgres   10u  IPv4 49812993      0t0  TCP 127.0.0.1:5432 (LISTEN)

postgresユーザーに切り替えて、PostgreSQLに接続します。

sudo su - postgres
$ psql
psql (18.2 (VMware Postgres 18.2.0))
Type "help" for help.

postgres=# 

初期状態を確認します。

postgres=# SELECT version();
                                                                version                                                                 
----------------------------------------------------------------------------------------------------------------------------------------
 PostgreSQL 18.2 (VMware Postgres 18.2.0) on x86_64-redhat-linux-gnu, compiled by gcc (GCC) 11.5.0 20240719 (Red Hat 11.5.0-11), 64-bit
(1 row)

postgres=# \l
                                                    List of databases
   Name    |  Owner   | Encoding | Locale Provider |  Collate   |   Ctype    | Locale | ICU Rules |   Access privileges   
-----------+----------+----------+-----------------+------------+------------+--------+-----------+-----------------------
 postgres  | postgres | UTF8     | libc            | en_US.utf8 | en_US.utf8 |        |           | 
 template0 | postgres | UTF8     | libc            | en_US.utf8 | en_US.utf8 |        |           | =c/postgres          +
           |          |          |                 |            |            |        |           | postgres=CTc/postgres
 template1 | postgres | UTF8     | libc            | en_US.utf8 | en_US.utf8 |        |           | =c/postgres          +
           |          |          |                 |            |            |        |           | postgres=CTc/postgres
(3 rows)

postgres=# \d
Did not find any relations.

利用可能な拡張機能を確認します。

postgres=# SELECT * FROM pg_available_extensions ORDER BY name;
        name        | default_version | installed_version |                                comment                                 
--------------------+-----------------+-------------------+------------------------------------------------------------------------
 amcheck            | 1.5             |                   | functions for verifying relation integrity
 autoinc            | 1.0             |                   | functions for autoincrementing fields
 bloom              | 1.0             |                   | bloom access method - signature file based index
 bool_plperl        | 1.0             |                   | transform between bool and plperl
 bool_plperlu       | 1.0             |                   | transform between bool and plperlu
 btree_gin          | 1.3             |                   | support for indexing common datatypes in GIN
 btree_gist         | 1.8             |                   | support for indexing common datatypes in GiST
 citext             | 1.8             |                   | data type for case-insensitive character strings
 cube               | 1.5             |                   | data type for multidimensional cubes
 dblink             | 1.2             |                   | connect to other PostgreSQL databases from within a database
 dict_int           | 1.0             |                   | text search dictionary template for integers
 dict_xsyn          | 1.0             |                   | text search dictionary template for extended synonym processing
 earthdistance      | 1.2             |                   | calculate great-circle distances on the surface of the Earth
 file_fdw           | 1.0             |                   | foreign-data wrapper for flat file access
 fuzzystrmatch      | 1.2             |                   | determine similarities and distance between strings
 hstore             | 1.8             |                   | data type for storing sets of (key, value) pairs
 hstore_plperl      | 1.0             |                   | transform between hstore and plperl
 hstore_plperlu     | 1.0             |                   | transform between hstore and plperlu
 hstore_plpython3u  | 1.0             |                   | transform between hstore and plpython3u
 insert_username    | 1.0             |                   | functions for tracking who changed a table
 intagg             | 1.1             |                   | integer aggregator and enumerator (obsolete)
 intarray           | 1.5             |                   | functions, operators, and index support for 1-D arrays of integers
 isn                | 1.3             |                   | data types for international product numbering standards
 jsonb_plperl       | 1.0             |                   | transform between jsonb and plperl
 jsonb_plperlu      | 1.0             |                   | transform between jsonb and plperlu
 jsonb_plpython3u   | 1.0             |                   | transform between jsonb and plpython3u
 lo                 | 1.2             |                   | Large Object maintenance
 ltree              | 1.3             |                   | data type for hierarchical tree-like structures
 ltree_plpython3u   | 1.0             |                   | transform between ltree and plpython3u
 moddatetime        | 1.0             |                   | functions for tracking last modification time
 pageinspect        | 1.13            |                   | inspect the contents of database pages at a low level
 pg_buffercache     | 1.6             |                   | examine the shared buffer cache
 pg_freespacemap    | 1.3             |                   | examine the free space map (FSM)
 pg_logicalinspect  | 1.0             |                   | functions to inspect logical decoding components
 pg_prewarm         | 1.2             |                   | prewarm relation data
 pg_stat_statements | 1.12            |                   | track planning and execution statistics of all SQL statements executed
 pg_surgery         | 1.0             |                   | extension to perform surgery on a damaged relation
 pg_trgm            | 1.6             |                   | text similarity measurement and index searching based on trigrams
 pg_visibility      | 1.2             |                   | examine the visibility map (VM) and page-level visibility info
 pg_walinspect      | 1.1             |                   | functions to inspect contents of PostgreSQL Write-Ahead Log
 pgcrypto           | 1.4             |                   | cryptographic functions
 pgrowlocks         | 1.2             |                   | show row-level locking information
 pgstattuple        | 1.5             |                   | show tuple-level statistics
 plperl             | 1.0             |                   | PL/Perl procedural language
 plperlu            | 1.0             |                   | PL/PerlU untrusted procedural language
 plpgsql            | 1.0             | 1.0               | PL/pgSQL procedural language
 plpython3u         | 1.0             |                   | PL/Python3U untrusted procedural language
 postgres_fdw       | 1.2             |                   | foreign-data wrapper for remote PostgreSQL servers
 refint             | 1.0             |                   | functions for implementing referential integrity (obsolete)
 seg                | 1.4             |                   | data type for representing line segments or floating-point intervals
 sslinfo            | 1.2             |                   | information about SSL certificates
 tablefunc          | 1.0             |                   | functions that manipulate whole tables, including crosstab
 tcn                | 1.0             |                   | Triggered change notifications
 tsm_system_rows    | 1.0             |                   | TABLESAMPLE method which accepts number of rows as a limit
 tsm_system_time    | 1.0             |                   | TABLESAMPLE method which accepts time in milliseconds as a limit
 unaccent           | 1.1             |                   | text search dictionary that removes accents
 uuid-ossp          | 1.1             |                   | generate universally unique identifiers (UUIDs)
 vector             | 0.8.1           |                   | vector data type and ivfflat and hnsw access methods
 xml2               | 1.2             |                   | XPath querying and XSLT
(59 rows)

サポートされている拡張一覧はこちらです。18.1には含まれていなかったpgvectorが復活しました。

PostgreSQL 18から導入されたuuidv7関数を試してみます。

postgres=# SELECT uuidv7();
                uuidv7                
--------------------------------------
 019b8e14-dd7e-79dd-a6d8-65a20839934e
(1 row)

データベースとユーザーの作成

Vultrのガイドを参考に、hospitalデータベースとdb_managerユーザーを作成し、適切な権限を付与します。

psql -c "CREATE DATABASE hospital;"
psql -c "CREATE ROLE db_manager WITH LOGIN PASSWORD 'strong-password';"
psql -d hospital -c "
GRANT ALL PRIVILEGES ON DATABASE hospital TO db_manager;
GRANT USAGE, CREATE ON SCHEMA public TO db_manager;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL PRIVILEGES ON TABLES TO db_manager;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL PRIVILEGES ON SEQUENCES TO db_manager;
"

テーブルを作成し、データを挿入して、クエリを実行してみます。

psql -d hospital -c "CREATE TABLE doctors(
doctor_id SERIAL PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50),
appointment_date DATE
);"
psql -d hospital -c "INSERT INTO doctors (first_name, last_name, appointment_date) VALUES
('John', 'Doe', '2024-10-01'),
('Jane', 'Smith', '2024-10-02'),
('Emily', 'Johnson', '2024-10-03'),
('Michael', 'Brown', '2024-10-04'),
('Sarah', 'Davis', '2024-10-05');"
psql -d hospital -c "SELECT * FROM doctors WHERE appointment_date >= '2024-10-03';"
 doctor_id | first_name | last_name | appointment_date 
-----------+------------+-----------+------------------
         3 | Emily      | Johnson   | 2024-10-03
         4 | Michael    | Brown     | 2024-10-04
         5 | Sarah      | Davis     | 2024-10-05
(3 rows)

リモート接続を有効化します。

echo "host    hospital    db_manager    0.0.0.0/0    scram-sha-256" >> /var/lib/pgsql/data/pg_hba.conf
sed -i "s/#listen_addresses = 'localhost'/listen_addresses = '*'/" /var/lib/pgsql/data/postgresql.conf

PostgreSQLサービスを再起動します。

exit
sudo systemctl restart postgresql

pg_hba.confの設定を確認します。

$ sudo -u postgres /opt/vmware/postgres/18/bin/psql -c "SELECT * FROM pg_hba_file_rules;"
 rule_number |            file_name            | line_number | type  |   database    |  user_name   |  address  |                 netmask                 |  auth_method  | options | error 
-------------+---------------------------------+-------------+-------+---------------+--------------+-----------+-----------------------------------------+---------------+---------+-------
           1 | /var/lib/pgsql/data/pg_hba.conf |         117 | local | {all}         | {all}        |           |                                         | trust         |         | 
           2 | /var/lib/pgsql/data/pg_hba.conf |         119 | host  | {all}         | {all}        | 127.0.0.1 | 255.255.255.255                         | trust         |         | 
           3 | /var/lib/pgsql/data/pg_hba.conf |         121 | host  | {all}         | {all}        | ::1       | ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff | trust         |         | 
           4 | /var/lib/pgsql/data/pg_hba.conf |         124 | local | {replication} | {all}        |           |                                         | trust         |         | 
           5 | /var/lib/pgsql/data/pg_hba.conf |         125 | host  | {replication} | {all}        | 127.0.0.1 | 255.255.255.255                         | trust         |         | 
           6 | /var/lib/pgsql/data/pg_hba.conf |         126 | host  | {replication} | {all}        | ::1       | ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff | trust         |         | 
           7 | /var/lib/pgsql/data/pg_hba.conf |         127 | host  | {hospital}    | {db_manager} | 0.0.0.0   | 0.0.0.0                                 | scram-sha-256 |         | 
(7 rows)

リモート接続を確認します。まずはローカルホストで。

$ /opt/vmware/postgres/18/bin/psql "postgresql://db_manager:strong-password@localhost:5432/hospital"
psql (18.2 (VMware Postgres 18.2.0))
Type "help" for help.

hospital=> 

次に、Rocky LinuxマシンのIPアドレスを調べて、そのIPアドレスを使ってリモート接続を試みます。

$ ip addr | grep eth0 | tail -1 | awk '{print $2}' | awk -F '/' '{print $1}'
192.168.139.15
$ /opt/vmware/postgres/18/bin/psql "postgresql://db_manager:strong-password@192.168.139.15:5432/hospital"
psql (18.2 (VMware Postgres 18.2.0))
Type "help" for help.

hospital=> 

データを確認します。

hospital=> select * from doctors;
 doctor_id | first_name | last_name | appointment_date 
-----------+------------+-----------+------------------
         1 | John       | Doe       | 2024-10-01
         2 | Jane       | Smith     | 2024-10-02
         3 | Emily      | Johnson   | 2024-10-03
         4 | Michael    | Brown     | 2024-10-04
         5 | Sarah      | Davis     | 2024-10-05
(5 rows)

pg_hint_plan拡張機能のインストール

VMware Tanzu for Postgresでpg_hint_plan拡張機能を使用するには、次の手順に従います。pg_hint_planはクエリプランナーにヒントを与えるための拡張機能です。

https://techdocs.broadcom.com/us/en/vmware-tanzu/data-solutions/tanzu-for-postgres/18-2/tnz-postgres/installing.html#pghintplan

cd /Users/$USER/Downloads/vmware-postgres-18.2.0
sudo dnf install ./vmware-postgres18-pg_hint_plan-extension-1.8.0-5.el9.x86_64.rpm -y
sudo sed -i "s/#shared_preload_libraries = ''/shared_preload_libraries = 'pg_hint_plan'/" /var/lib/pgsql/data/postgresql.conf
sudo systemctl restart postgresql

pg_hint_plan拡張機能が利用可能であることを確認します。

$ sudo -u postgres /opt/vmware/postgres/18/bin/psql -c "SELECT * FROM pg_available_extensions WHERE name LIKE '%hint%';"
     name     | default_version | installed_version |            comment             
--------------+-----------------+-------------------+--------------------------------
 pg_hint_plan | 1.8.0           |                   | optimizer hints for PostgreSQL
(1 row)

Linux Machineの削除

orb delete tanzu-postgres -f

以上で、VMware Tanzu for Postgres 18.2をRocky Linux 9にインストールし、基本的な設定と操作を行う手順のメモを終わります。

Patroniを使ったHA構成も試してみたいところですが、今回はここまでとします。→ こちらの記事に書きました

Found a mistake? Update the entry.
Share this article: