PostgreSQL 学習記
今までの人生で関係データベースや SQL には全く触れて来なかった人間が PostgreSQL を触る記録。
PostgreSQL を題材に選んだ理由はオープンソースのもので一番使われている主要なやつらしいからだ。
公式サイトを見ると、PostgreSQL の現在の最新の安定版は 16 のようだ。その版のドキュメントを見る。歴史について書いてある。PostgreSQL はカリフォルニア大学バークレー校で開発された POSTGRES の派生らしい。1980 年代からの歴史があるようだ。ごにょごにょ細かいことが書いてあるが、要は歴史が長いということだろう。とりあえずインストール方法を見ると、ソースコードからごりごりビルドする方法が記述されている。ただ、学ぶためにインストールしたいので、そんなことはやりたくないので、Homebrew でインストールしようと思う。
$ brew info postgresql
Warning: Formula postgresql was renamed to postgresql@14.
==> postgresql@14: stable 14.13 (bottled)
Object-relational database system
https://www.postgresql.org/
Not installed
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/p/postgresql@14.rb
License: PostgreSQL
==> Dependencies
Build: pkg-config ✔
Required: icu4c ✔, krb5 ✔, lz4 ✔, openssl@3 ✔, readline ✔
==> Caveats
This formula has created a default database cluster with:
initdb --locale=C -E UTF-8 /usr/local/var/postgresql@14
For more details, read:
https://www.postgresql.org/docs/14/app-initdb.html
To start postgresql@14 now and restart at login:
brew services start postgresql@14
Or, if you don't want/need a background service you can just run:
/usr/local/opt/postgresql@14/bin/postgres -D /usr/local/var/postgresql@14
==> Analytics
install: 49,224 (30 days), 135,756 (90 days), 573,312 (365 days)
install-on-request: 47,739 (30 days), 131,194 (90 days), 557,478 (365 days)
build-error: 25 (30 days)
なんだか不穏な表示である。
$ brew search postgresql
==> Formulae
postgresql@10 postgresql@12 postgresql@14 postgresql@16 postgrest
postgresql@11 postgresql@13 postgresql@15 qt-postgresql
==> Casks
navicat-for-postgresql posture-pal
If you meant "postgresql" specifically:
postgresql breaks existing databases on upgrade without human intervention.
See a more specific version to install with:
brew formulae | grep postgresql@
なんか適当に入れるとヤバそうなので調べる。みんなバージョンを指定してインストールすることを推奨しているのでそれに従うことにする。
brew install postgresql@16
多分入った。
よく分からない次のコマンドを実行する。
brew services start postgresql@16
データーベースの作成には
createdb mydb
せよと書いてあるが、コマンドが見つからない。
使っている Fish が認識するようにパスを追加しなければならなかったようだ。
# PostgreSQL 16
fish_add_path /usr/local/opt/postgresql@16/bin
createdb mydb
が実行できた。
作成したデータベースの削除をする。
dropdb mydb
実行できた。
もう一度 mydb
を作成して、psql mydb
する。
$ createdb mydb
$ psql mydb
psql (16.4 (Homebrew))
"help"でヘルプを表示します。
mydb=#
REPL が起動した。
書かれている通りにコマンドを入力してみる。
mydb=# SELECT version();
version
------------------------------------------------------------------------------------------------------------------------------
PostgreSQL 16.4 (Homebrew) on x86_64-apple-darwin22.6.0, compiled by Apple clang version 15.0.0 (clang-1500.1.0.2.5), 64-bit
(1 行)
mydb=# SELECT current_date;
current_date
--------------
2024-09-24
(1 行)
mydb=# SELECT 2 + 2;
?column?
----------
4
(1 行)
\⟨command⟩
で SQL コマンドでない内部コマンドを実行できる。\h
でヘルプを表示。\q
で psql
を終了する。
PostgreSQL という言葉がどこまでを指すのかが良く分かっていない。とりあえず、実行ファイル群を見る。
$ ls /usr/local/opt/postgresql@16/bin
clusterdb* pg_archivecleanup* pg_receivewal* pg_waldump*
createdb* pg_basebackup* pg_recvlogical* pgbench*
createuser* pg_checksums* pg_resetwal* postgres*
dropdb* pg_config* pg_restore* psql*
dropuser* pg_controldata* pg_rewind* reindexdb*
ecpg* pg_ctl* pg_test_fsync* vacuumdb*
initdb* pg_dump* pg_test_timing* vacuumlo*
oid2name* pg_dumpall* pg_upgrade*
pg_amcheck* pg_isready* pg_verifybackup*
とりあえず PostgreSQL のシステムは複数の database を持ち、各々の database は複数の table を持ち、1つ1つの table が2次元の配列になっていて、その配列の各 row が一意な key を持ち、row を record や tupleと呼ぶのかな?
関係データベースの用語を調べる。Wikipedia を見てみる。https://en.wikipedia.org/wiki/Relational_database#Terminology.
SQL term | Relational database term | Description |
---|---|---|
row | tuple or reord | A data set representing a single term |
column | attribute or field | A labeled element of a tuple |
table | relation or base relvar | A set of tuples sharing the same attributes |
view or result set | derived relvar | Any set of tuples |
なるほど。
とほほの PostgreSQL 入門で操作方法は大体分かった。
で、このデータベースをプログラムで利用するにはどうすれば良いのか?libpq を使うのが基本なのかな?