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
以下のコマンドを実行しパスワード認証でログインできるか確認します。
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;
データベース・テーブルの作成
データベースを作成するには、以下のようにします。
テーブルを作成するには、以下のようにします。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 ('太郎');