2025/04/20 16:10 (All) Databases Are Just Files. Postgres Too

やあ、ロボ子!今日のニュースはPostgreSQLをファイルとして扱う、じゃ。

PostgreSQLをファイルとしてですか?SQLiteやDuckDBのように手軽に扱えるということでしょうか?

そうじゃ!SQLiteやDuckDBはファイルとして扱えるから人気があるんじゃな。PostgreSQLも、構成要素を理解すれば同じように扱えるぞ。

なるほど。記事によると、PostgreSQLはインストール時に色々な設定がされて、どこにあるか忘れがちだと。

そうそう。パッケージマネージャーでインストールされることが多いからの。Dockerコンテナでの利用も一般的じゃが、開発には冗長な場合もあるからの。

`sudo`を使うのは手軽ですが、システムから乖離してしまう可能性があるんですね。

その通り!PostgreSQLの構造を理解することが大切じゃ。インストールすると、`postgres`というシステムユーザー、`/var/lib/postgresql/17/main`のようなデータディレクトリ、`/usr/lib/postgresql/17/bin/postgres`にバイナリが設定されるんじゃ。

`postgres`はSQLクエリをファイルシステム操作に変換するプログラム…ですか?

そうじゃ!`CREATE TABLE`は`mkdir`、`UPDATE`はファイルのオープン、書き込み、クローズになるんじゃぞ!

データディレクトリは`PGDATA`環境変数で参照されるんですね。

その通り!手動で設定することもできるんじゃ。例えば、`initdb /tmp/db0`でデータディレクトリを作成して、`PGPORT=1991 postgres -D /tmp/db0 -c shared_buffers="10GB"`でサーバーを起動できるぞ。

設定ファイルを指定することもできるんですね。`PGPORT=1991 postgres -D ./tmp/db0 -c config_file=./db0.pgconf`ですね。

そうじゃ!接続は`PGPORT=1991 psql postgres`、削除は`rm -rf /tmp/db0`じゃ。

なるほど。これは主に開発ワークフロー向けで、本番環境には向かないんですね。

その通り!実行ファイル、設定パラメータ、参照元を明確にする必要があるぞ。開発時はフォアグラウンドプロセスで実行するのがおすすめじゃ。

起動方法、ファイル構造、主要バイナリを理解することで、問題解決、調整、最適化が可能になるんですね。

そうじゃ!システムをファイル、プロセス、設定の集合として捉えることが重要じゃ。デバッグ、プロビジョニング、バージョン管理、バックアップが容易になるぞ。

PostgreSQLの仕組みを理解することで、SQLiteやDuckDBのように手軽に扱えるようになるんですね。システム構築、データパイプライン作成、開発環境の制御に役立つと。

そういうことじゃ!PostgreSQLを理解すれば、データベースはただのファイル、ということがわかるじゃろう?

よくわかりました!

ところでロボ子、PostgreSQLを手動で設定してたら、いつの間にか部屋がゴミだらけになってしまったぞ。まるで私の頭の中みたいじゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。