LoginSignup
4
3

LinuxのログオンユーザーIDから直接PostgreSQLにアクセスする方法

Posted at

はじめに

先日、何年かぶりに自身のLinux検証環境にPostgreSQLをインストールしました。かなりご無沙汰だったため、ほとんど使い方を忘れてしまっていたので、下記リンク先のマニュアルを参考にチュートリアルを実施しました。ちなみにインストールしたPostgreSQLのバージョンは16.3です。

チュートリアルを実施するなかで、いの一番に実施した方が後々便利になると感じたのは、LinuxのログオンユーザーIDから直接PostgreSQLにアクセスできるようにすることです。本記事では、その設定方法をご紹介します。

データベースの設定

最初にデータベース・サーバーが稼働していることを確認します。

$ sudo systemctl status postgresql-16
[sudo] testuser のパスワード:
● postgresql-16.service - PostgreSQL 16 database server
     Loaded: loaded (/usr/lib/systemd/system/postgresql-16.service; enabled; preset: disabled)
     Active: active (running) since Sun 2024-05-26 17:23:52 JST; 26min ago
       Docs: https://www.postgresql.org/docs/16/static/
    Process: 1318 ExecStartPre=/usr/pgsql-16/bin/postgresql-16-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
   Main PID: 1337 (postgres)
      Tasks: 7 (limit: 22820)
     Memory: 66.3M
        CPU: 1.647s
     CGroup: /system.slice/postgresql-16.service
             tq1337 /usr/pgsql-16/bin/postgres -D /var/lib/pgsql/16/data/
             tq1389 "postgres: logger "
             tq1393 "postgres: checkpointer "
             tq1395 "postgres: background writer "
             tq1403 "postgres: walwriter "
             tq1404 "postgres: autovacuum launcher "
             mq1407 "postgres: logical replication launcher "

 5月 26 17:23:52 localhost.localdomain systemd[1]: Starting PostgreSQL 16 database server...
 5月 26 17:23:52 localhost.localdomain postgres[1337]: 2024-05-26 17:23:52.746 JST [1337] LOG:  ログ出力をログ収集プロセスにリダイレクトしています
 5月 26 17:23:52 localhost.localdomain postgres[1337]: 2024-05-26 17:23:52.746 JST [1337] ヒント:  ここからのログ出力はディレクトリ"log"に現れます。
 5月 26 17:23:52 localhost.localdomain systemd[1]: Started PostgreSQL 16 database server.

データベースの作成

createdbコマンドでデータベースを作成します。

$ createdb mydb

PostgreSQLインストール直後の状態だと、下記のエラーが出力されて、データベースの作成に失敗します。

createdb: エラー: ソケット"/run/postgresql/.s.PGSQL.5432"のサーバーへの接続に失敗しました: FATAL:  ロール"testuser"は存在しません

これは、下記リンク先のドキュメントにも記載されていますが、PostgreSQLに接続可能なユーザーとして、現状Linuxにログオンしているtestuserという名前のユーザー(ロールとも言います)が定義されていないために発生します。

PostgreSQLインストール直後は、「postgres」という名前のユーザーがデフォルトの接続可能なユーザーとして定義されているため、PostgreSQLへのアクセスにはこのユーザーを使用する必要があります。

# su postgres
bash-5.1$

ログオン中のtestuserから直接postgresユーザーにスイッチしようとすると、postgresユーザーのパスワードを聞かれてしまいます。その為、一旦rootにスイッチした後に、postgresユーザーに切り替えることにしています。

postgresユーザーへスイッチ後、再度「createdb」コマンドでデータベースを作成します。(データベース名は「mydb」としています。)

bash-5.1$ createdb mydb
bash-5.1$

今度はエラーとならずに正常にデータベースを作成することができました。

LinuxログオンユーザーIDをROLE登録

「psql」というユーティリティーを使用して、上記で作成したデータベースに接続します。

bash-5.1$ psql mydb
psql (16.3)
"help"でヘルプを表示します。

mydb=#

「mydb=#」の所にSQL文を入力していきます。ここでは、Linuxログオンユーザー名(testuser)をROLE名として設定するSQL文としています。ROLE名の後に「LOGIN」を付与することがポイントです。

mydb=# CREATE ROLE testuser LOGIN;
CREATE ROLE

CREATE ROLEという文言のみが返ってきたら、ROLE作成は完了です。ROLEの作成方法については、下記リンク先のドキュメントを参照ください。

pg_rolesという名前のシステム・カタログに対してSELECT文を発行し、「testuser」という名前のROLEが出力されることを確認します。

mydb=# SELECT * FROM pg_roles;
           rolname           | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication | rolconnlimit | rolpassword | rolvaliduntil | rolbypassrls | rolconfig |
oid
-----------------------------+----------+------------+---------------+-------------+-------------+----------------+--------------+-------------+---------------+--------------+-----------+--
-----
 postgres                    | t        | t          | t             | t           | t           | t              |           -1 | ********    |               | t            |           |
  10
:
:
(略)
:
:
 testuser                    | f        | t          | f             | f           | t           | f              |           -1 | ********    |               | f            |           | 1
6389

上記のSELECT文の出力結果から、問題なく「testuser」という名前のROLEが作成されていることが確認できます。これで作業は終了なので、データベース、及び、postgresユーザーからログオフします。

mydb=# exit
bash-5.1$ exit

LinuxログオンユーザーIDでの接続確認

ログオンユーザーIDのシェルに戻ったことを確認後、「psql mydb」コマンドを実行します。

$ psql mydb
psql (16.3)
"help"でヘルプを表示します。

mydb=>

無事、ログオンユーザーIDでPostgreSQLのデータベースに接続できるようになりました。

さいごに

本記事では、Linuxログオンユーザーから直接PostgreSQLのデータベースに接続できるようにするための方法をご紹介しました。必須の作業というわけではありませんが、毎度毎度「postgres」ユーザーに切り替えるのは手間ですし、時間が経ったら「postgres」ユーザーの存在自体忘却の彼方となっているかもしれません。。。
ですので、今後LinuxにPostgreSQLをインストールして使ってみようと思われた方は、本記事に記載の内容を参考にLinuxログオンユーザーから直接PostgreSQLにアクセスできる設定をされることをお奨めします。

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3