FreeBSD14にPostgreSQL+pgAdmin4をインストール
開発環境のローカル仮想マシンにPostgreSQLをインストールしたときの覚書。
環境: FreeBSD 14.1, Python 3.9.18, PostgreSQL 15.6
1. PostgreSQL Serverをインストール
pkgからインストールする。
最初はpostgresql16-serverをインストールしたけど、py39-psycopgをインストールしたときにpostgresql15へ置き換えようとするので、postgresql15-serverをインストールし直した。
# pkg search postgresql
# pkg search -f postgresql15-server
# pkg install postgresql15-server
画面に表示された通りに実行。
# sysrc postgresql_enable=yes
# service postgresql initdb
# service postgresql start
データの置き場所などを起動スクリプトで確認。
# less /usr/local/etc/rc.d/postgresql
postgresユーザーになって確認する。
# su - postgres
# pwd
/var/db/postgres
ユーザー一覧とデータベース一覧表示。
$ psql
postgres=# \du
postgres=# \l
2. PostgreSQLの文字セット(エンコーディング)を設定
日本語を扱う場合は、ja_JPをを設定してあげないと正しく並び替えできない。
前の記事を参考にする。
参考: PostgresSQLの言語設定(locale)をja_JPにする
OSで提供している言語地域(ロケール)を確認。
# locale -a
「ja_JP.UTF-8」があるのを確認。
PostgreSQLの設定変更。
# su - postgres
$ less data15/postgresql.conf
lc_messages = 'C.UTF-8' # locale for system error message# stringslc_monetary = 'ja_JP.UTF-8' # locale for monetary formattinglc_numeric = 'ja_JP.UTF-8' # locale for number formattinglc_time = 'ja_JP.UTF-8' # locale for time formatting
lc_messagesを変えるとログメッセージが日本語になって気持ち悪いので変えない。
PostgreSQL再起動。
# service postgresql restart
データベース作成時のデフォルトをja_JPにする。
create databaseはtemplate1をコピーするのでtemplate1データベースを作り直す。
# su - postgres
$ psql
postgres=# select * from pg_database;
postgres=# select datistemplate from pg_database where datname = 'template1';
postgres=# update pg_database set datistemplate = false where datname = 'template1';
postgres=# drop database template1;
postgres=# select * from pg_database;
postgres=# CREATE DATABASE template1 TEMPLATE=template0 LC_COLLATE="ja_JP.UTF-8" LC_CTYPE="ja_JP.UTF-8" IS_TEMPLATE=true;
postgres=# select * from pg_database;
postgres=# quit
データベースを作成してみて確認。
$ psql -c 'create database recruit;'
$ psql -l
3. Windowsからネットワーク経由で接続
開発用なのでWindowsからDBeaverでアクセスできるようにする。
postgresユーザーのパスワードを変更。
# su - postgres
$ psql
postgres=# alter role postgres with password 'pass';
postgres=# quit
rootに戻ってファイヤーウォールの確認。
# service ipfw status
ipfw is not enabled
ファイヤーウォールのサービスは起動していない。
待ち受け中のポート確認。
# netstat -an -p tcp
postgresユーザーになってPostgreSQLの設定変更。
# su - postgres
$ less data15/pg_hba.conf
# Allow access from LANhost all all 192.168.10.0/24 scram-sha-256
$ less data15/postgresql.conf
listen_addresses = '*'
rootに戻ってPostgreSQL再起動。
# service postgresql restart
待ち受け中のポート確認。
# netstat -an -p tcp
Windowsからtelnetを打ってみる。
PS:> telnet vm-dev2 5432
問題なければDBeaverで接続する。
4. pgAdmin4をインストール(失敗)
本番サーバーのための練習用でpgAdmin4をインストールしてみる。
参考: pgAdmin Download
pgAdmin4用システムディレクトリを作成
# mkdir /var/lib/pgadmin
# mkdir /var/log/pgadmin
Python仮想環境用のディレクトリを作成。
# mkdir -p /home/software/python-venv
# cd /home/software/python-venv
venvを作成して仮想環境に入る。
# python3.9 -m venv pgadmin4
# source pgadmin4/bin/activate
pipの確認とアップグレード。
(pgadmin4)# pip list
(pgadmin4)# pip install --upgrade pip setuptools
pip経由でpgAdmin4のインストール。
(pgadmin4)# pip install pgadmin4
エラー
This package requires Rust >=1.41.0.C compiler or Python headers are not installed on this system. Try to run:pkg install gcc python3error: command '/usr/bin/cc' failed with exit code 1
rootに戻ってRustとgccをインストール。
(pgadmin4)# deactivate
# pkg install rust gcc py39-clang
もう一度仮想環境からpgAdmin4をインストール。
# source pgadmin4/bin/activate
(pgadmin4)# pip install pgadmin4
エラー
psutil/arch/freebsd/sys_socks.c:303:40: error: incompatible integer to pointer conversion passing 'kvaddr_t' (aka 'unsigned long') to parameter of type 'void *' [-Wint-conversion]xf = psutil_get_file_from_sock(xup->xu_socket.xso_so);^~~~~~~~~~~~~~~~~~~~~psutil/arch/freebsd/sys_socks.c:65:33: note: passing argument to parameter 'sock' herepsutil_get_file_from_sock(void *sock) {^1 warning and 2 errors generated.error: command '/usr/bin/cc' failed with exit code 1[end of output]note: This error originates from a subprocess, and is likely not a problem with pip.ERROR: Failed building wheel for psutilFailed to build psutilERROR: Could not build wheels for psutil, which is required to install pyproject.toml-based projects
psutilのビルドで失敗する。
rootに戻ってpsutilを単独でインストールしてみる。
(pgadmin4)# deactivate
# pkg install psutils py39-psutil
再度pgAdminをインストール。
# source pgadmin4/bin/activate
(pgadmin4)# pip install pgadmin4
同じエラー。
psutilをビルドしようとする。
とりあえず諦めた。
pgAdmin4はそんなに使うことはなかったので、インストールしなくてもいいかもしれない。
Python 3.11でpgadmin4をインストールして実行してみたら同じく失敗する。
In file included from /usr/include/c++/v1/__algorithm/remove.h:12:/usr/include/c++/v1/__algorithm/find.h:23:10: fatal error: '__string/constexpr_c_functions.h' file not found23 | #include <__string/constexpr_c_functions.h>| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~1 error generated.error: command '/usr/bin/cc' failed with exit code 1[end of output]note: This error originates from a subprocess, and is likely not a problem with pip.ERROR: Failed building wheel for greenlet
Python 3.11ではgreenlet 3.0.3のビルドで失敗する。