PostgreSQL - AlmaLinux

PostgreSQL のインストール

インストールの方法は、以下のページから調べることができます。

PostgreSQL 17をインストールするには、まず RPM リポジトリを追加します。

sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm

以下のコマンドを実行してインストールします。

sudo dnf -qy module disable postgresql
sudo dnf install -y postgresql17-server

インストール完了後、初期化と起動をしておきます。

sudo /usr/pgsql-17/bin/postgresql-17-setup initdb
sudo systemctl enable postgresql-17
sudo systemctl start postgresql-17

パスワードの設定

local接続のpeer認証をmd5に変更するには、以下のファイル開きます。

sudo vi /var/lib/pgsql/17/data/pg_hba.conf

ファイルを以下のように編集します。

# "local" is for Unix domain socket connections only
local   all             all                                     peer
↓
# "local" is for Unix domain socket connections only
local   all             all                                     md5

postgresユーザーにパスワードを設定します。

# ユーザーの変更
su - postgres

# psqlに接続
psql -U postgres

psql に接続できれば、以下のコマンドを実行し、postgresユーザーにパスワードを設定します。

postgres=# \password
   Enter new password:
   Enter it again:
postgres=# \q

パスワードの変更を適用するには、PostgreSQL を再起動します。

sudo systemctl restart postgresql-17

以下のコマンドを実行しパスワード認証でログインできるか確認します。

psql -U postgres

PostgreSQLのコマンド

# PostgreSQLへの接続
psql -U <ユーザー名>
psql -U postgres

# データベース一覧
\l

# PostgreSQLのログアウト
\q

ユーザー名が「 test 」、パスワードが「 password 」というユーザーを作成するには、以下のようにします。

CREATE USER test WITH PASSWORD 'password';

ロールの指定

PostgreSQLのロールは、データベース内でユーザーやグループの権限やアクセス制御を管理するための仕組みです。

ロールには、以下の属性を設定することができます。

LOGIN ロールがログインできるかどうかを制御。
CREATEDB データベースの作成を許可。
CREATEROLE 他のロールを作成または管理する権限を付与。
SUPERUSER 全権限を持つスーパーユーザーに設定。
BYPASSRLS 行レベルセキュリティ(RLS)をバイパスできるかを設定。
REPLICATION レプリケーション操作を許可。

ロールの属性を設定するには、以下のコマンドを実行します。test は、任意のユーザー名になります。

# ロールの権限の確認
\du

# ログインの権限付与
ALTER ROLE test LOGIN;

# スーパーユーザーの権限付与
ALTER ROLE test SUPERUSER;

# データベース作成
ALTER ROLE test CREATEDB;

# ロール作成
CREATE ROLE test CREATEROLE;

# レプリケーションの指定
ALTER ROLE test WITH REPLICATION;

# RLS をバイパスする権限の付与
ALTER ROLE test WITH BYPASSRLS;

データベース・テーブルの作成

データベースを作成するには、以下のようにします。

CREATE DATABASE mydb;

テーブルを作成するには、以下のようにします。MySQL の AUTO_INCREMENT属性を PostgreSQL で利用する場合は、SERIAL型を使います。

PostgreSQL

CREATE TABLE users (
  id SERIAL NOT NULL,
  name VARCHAR(255) NOT NULL,
  PRIMARY KEY (id)
);

MySQL

CREATE TABLE users (
  id INT AUTO_INCREMENT,
  name VARCHAR(255) NOT NULL,
  PRIMARY KEY (id)
);

データを投入するには、以下のようにします。

INSERT INTO users (name) VALUES ('太郎');