FreeBSDにPostgreSQLをインストールします。
17.7をインストール対象としていますが、18でも基本的には同じです。
ただし、チェックサムが18ではデフォルト有効となりましたので、18以前をインストールするときにも最初からチェックサムを有効にするようにします。
前提
- FreeBSD 13.5
- PostgreSQL 17.7
パッケージのインストール
pkg install -y postgresql17-server
ロケール設定
/etc/login.conf
+ postgres:\ + :lang=en_US.UTF-8:\ + :setenv=LC_COLLATE=C:\ + :tc=default:
反映
cap_mkdb /etc/login.conf
起動設定
データのチェックサムを有効にしてデータベースを初期化します。
sysrc postgresql_login_class=postgres sysrc postgresql_initdb_flags="--encoding=utf-8 --lc-collate=C --data-checksums" sysrc postgresql_enable=YES service postgresql initdb
起動
service postgresql start
動作確認
su postgres -c "psql --version" psql (PostgreSQL) 17.7
Ansible playbook
install_postgresql.yaml
---
- name: Install and configure PostgreSQL on FreeBSD
hosts: postgresql.example.com
become: yes
gather_facts: false
vars:
pg_ver: 17
tasks:
- name: Install PostgreSQL {{ pg_ver }} server package
community.general.pkgng:
name: "postgresql{{ pg_ver }}-server"
state: present
- name: Ensure postgres login class exists in /etc/login.conf
blockinfile:
path: /etc/login.conf
block: |
postgres:\
:lang=en_US.UTF-8:\
:setenv=LC_COLLATE=C:\
:tc=default:
marker: "# {mark} ANSIBLE POSTGRES LOGIN CLASS"
- name: Rebuild login.conf database
command: cap_mkdb /etc/login.conf
changed_when: false
- name: Set postgresql login class
community.general.sysrc:
name: postgresql_login_class
value: postgres
- name: Set initdb flags for PostgreSQL <=17
community.general.sysrc:
name: postgresql_initdb_flags
value: '--encoding=utf-8 --lc-collate=C --data-checksums'
when: pg_ver | int < 18
changed_when: false
- name: Set initdb flags for PostgreSQL 18+
community.general.sysrc:
name: postgresql_initdb_flags
value: '--encoding=utf-8 --lc-collate=C'
when: pg_ver | int >= 18
changed_when: false
- name: Enable PostgreSQL service
community.general.sysrc:
name: postgresql_enable
value: "YES"
- name: Initialize PostgreSQL database
command: service postgresql initdb
args:
creates: "/var/db/postgres/data{{ pg_ver }}/PG_VERSION"
- name: Start PostgreSQL service
service:
name: postgresql
state: started
enabled: yes