sql >> データベース >  >> RDS >> PostgreSQL

Ubuntu20.04でPostgres13を使い始める

    Postgresデータベースソフトウェアの最新リリースであるPostgreSQL13には、多くの内部的な改善が加えられています。最も人気があり、用途の広いオープンソースRDBMSですが、セットアップと開始が最も簡単ではありません。最新のLTSバージョンのUbuntuserverで最新バージョンのPostgresを使用する方法を学ぶために読んでください。

    インストール

    Ubuntu 20.04には、ユニバースのPostgres12が付属しています。 リポジトリ。バージョン13が必要なため、PostgreSQLプロジェクトの公式APTリポジトリを直接使用できます。このリポジトリにはUbuntu 20.04のバイナリが含まれており、後でインストールする可能性のあるさまざまな拡張機能のパッケージも含まれています。

    このようにリポジトリを設定しましょう(「focal」はUbuntu 20.04のコードネームであることに注意してください):

    # add the repository
    sudo tee /etc/apt/sources.list.d/pgdg.list <<END
    deb http://apt.postgresql.org/pub/repos/apt/ focal-pgdg main
    END
    
    # get the signing key and import it
    wget https://www.postgresql.org/media/keys/ACCC4CF8.asc
    sudo apt-key add ACCC4CF8.asc
    
    # fetch the metadata from the new repo
    sudo apt-get update

    これで、次を使用してPostgreSQLサーバーとその他のコマンドラインツールをインストールできます。

    sudo apt-get install -y postgresql-13

    インストールはいくつかのことを行います:

    • PostgreSQLサーバー、ユーティリティ、および psqlと呼ばれるコマンドラインクライアントをインストールします 。
    • postgresというLinuxシステムユーザーを作成します 。すべてのデータファイルはこのユーザーが所有し、すべてのプロセスはこのユーザーとして実行されます。
    • データベースクラスターを作成します (下記参照)。このクラスターでは、 postgresとも呼ばれるデータベースを作成します 。
    • 1人のPostgreSQLユーザーを作成します( Linuxシステムユーザー)、 postgresとも呼ばれます 。このPostgreSQLユーザーにはスーパーユーザー権限があります。

    これが混乱し始めていることがわかります!

    データベースクラスター

    Postgresの用語では、単一のデータベースクラスターが稼働しています。単一のデータベースクラスターには、1つ以上のデータベースを含めることができます。現在のデータベースクラスターには、「postgres」というデータベースがあります。 (今のところ無視できる「テンプレート」データベースもいくつかあります。)

    データベースクラスターは、 postmasterと呼ばれるメインのpostgresプロセスによって管理されます。 。さまざまなシステムタスクを実行するか、着信クライアント接続を処理するさまざまな子プロセスを生成します。現在実行中のプロセスをご覧ください:

    alice@ubu:~$ ps -o uname,pid,ppid,cmd -H -U postgres
    USER         PID    PPID CMD
    postgres    4880       1 /usr/lib/postgresql/13/bin/postgres -D /var/lib/postgresql/13/main -c config_file=/etc/postgresql/13/main/postgresql.conf
    postgres    4882    4880   postgres: 13/main: checkpointer
    postgres    4883    4880   postgres: 13/main: background writer
    postgres    4884    4880   postgres: 13/main: walwriter
    postgres    4885    4880   postgres: 13/main: autovacuum launcher
    postgres    4886    4880   postgres: 13/main: stats collector
    postgres    4887    4880   postgres: 13/main: logical replication launcher

    ここで、ポストマスタープロセスは4880であり、さまざまなハウスキーピングアクティビティを処理する6つの子プロセスを生成しました。クラスタの場所も確認できます(/var/lib/postgresql/13/main )および構成ファイルの場所(/etc/postgresql/13/main/postgresql.conf

    リロードと再起動

    さまざまな時点で、リロードが必要になる場合があります または再起動 Postgresサーバーを再ロードすると、Postgresは構成ファイルを再検査し、変更を適用します。構成ファイルに変更がない場合、問題は発生しません。リロードしても、現在接続されているクライアントに影響はありません。 Postgresサーバーをリロードするには、次の操作を実行できます。

    sudo systemctl reload postgresql

    一部の構成変更は、サーバーを再起動した後にのみ有効になります。これはより混乱を招き、接続されているすべてのクライアントを切断します。再起動するには、次のことができます。

    sudo systemctl restart postgresql
    ログファイル

    ご覧のとおり、postgresqlというsystemdサービスがあります。 ポストマスターを制御するために使用できます。サービスが開始されない場合は、サービスのステータスを確認してエラーメッセージを確認できます。

    alice@ubu:~$ sudo systemctl status postgresql
    ● postgresql.service - PostgreSQL RDBMS
         Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
         Active: active (exited) since Thu 2020-10-29 04:52:29 UTC; 25min ago
       Main PID: 4557 (code=exited, status=0/SUCCESS)
          Tasks: 0 (limit: 1075)
         Memory: 0B
         CGroup: /system.slice/postgresql.service
    
    Oct 29 04:52:29 ubu systemd[1]: Starting PostgreSQL RDBMS...
    Oct 29 04:52:29 ubu systemd[1]: Finished PostgreSQL RDBMS.

    PostgreSQLサーバーはログファイルを書き込みます。このファイルで、より詳細なエラーメッセージを確認できます。このファイルは/var/log/postgresql/postgresql-13-main.logにあります。 :

    alice@ubu:~$ cat /var/log/postgresql/postgresql-13-main.log
    2020-10-29 04:52:34.096 UTC [4880] LOG:  starting PostgreSQL 13.0 (Ubuntu 13.0-1.pgdg20.04+1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 9.3.0-10ubuntu2) 9.3.0, 64-bit
    2020-10-29 04:52:34.097 UTC [4880] LOG:  listening on IPv4 address "127.0.0.1", port 5432
    2020-10-29 04:52:34.099 UTC [4880] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
    2020-10-29 04:52:34.106 UTC [4881] LOG:  database system was shut down at 2020-10-29 04:52:31 UTC
    2020-10-29 04:52:34.112 UTC [4880] LOG:  database system is ready to accept connections
    Postgresサーバーへの接続

    サーバーが稼働しているので、サーバーに接続してみましょう。デフォルトでは、サーバーは以下のみをリッスンします:

    • ポート5432の127.0.0.1からのTCP接続、および
    • / var / run/postgresqlのUnixドメインソケット

    デフォルト設定のため、現在サーバーに接続する唯一の方法は、システムユーザーとして実行されているプロセスからUnixソケットを介することです postgres 。標準のインタラクティブクライアントpsqlを実行してみましょう このように:

    alice@ubu:~$ sudo -u postgres psql postgres
    psql (13.0 (Ubuntu 13.0-1.pgdg20.04+1))
    Type "help" for help.
    
    postgres=#

    ここでは、システムユーザーpostgres(“ sudo -u postgres psql”)としてpsqlを実行し、“ postgres”(コマンドラインの最後の“ postgres”)と呼ばれるデータベースに接続しています。“ postgres =#”プロンプトは、現在接続されているデータベースの名前(「postgres」)とスーパーユーザー権限(「$」ではなく「#」)があります。

    接続はUnixソケットを介して行われました(これはpsqlのデフォルトの方法です)。デフォルトではpostgresユーザーはパスワードを持っておらず、デフォルトの構成ではTCP接続のパスワード認証が必要なため、現在127.0.0.1:5432を介して接続することはできません。 。

    内部ネットワークからの着信接続を許可する

    まず、内部ネットワークからの接続を許可するように構成を変更しましょう。このネットワーク上のサーバーのIPが10.1.2.3であるとすると、/etc/postgresql/13/main/postgresql.confにあるメイン構成ファイルを編集できます。 行を変更します:

    #listen_addresses = 'localhost'         # what IP address(es) to listen on;
                                            # comma-separated list of addresses;
                                            # defaults to 'localhost'; use '*' for all

    宛先:

    listen_addresses = 'localhost,10.1.2.3'

    また、これらのネットワークからの接続にパスワード認証を使用するようにPostgresに指示する必要があります。このために、/etc/postgresql/13/main/pg_hba.confという別の構成ファイルを編集します 行を変更します:

    host    all             all             127.0.0.1/32            md5

    宛先:

    host    all             all             127.0.0.1/32            scram-sha-256
    host    all             all             10.1.0.0/16             scram-sha-256

    (内部ネットワークが10.1.0.0/16であると仮定します。)

    デフォルトのmd5も変更しました より新しく、より安全なscram-sha-256へのメソッド 。 md5の他のすべての発生 ファイル内もscram-sha-256に置き換える必要があります 。アプリケーションまたはデータベースドライバがこの方法をサポートしていない場合は、引き続きmd5を使用してください。 代わりにメソッド。

    これらの変更を有効にするには、サーバーを再起動する必要があります。

    sudo systemctl restart postgresql
    通常のユーザーとデータベースの作成

    もうすぐです!

    これで、アプリケーションが接続できる通常のユーザーと、アプリケーションが完全に制御できるデータベースを作成できます。スーパーユーザーとして接続するpostgres これを行うには、サーバーマシンからローカルに:

    alice@ubu:~$ sudo -u postgres psql postgres
    psql (13.0 (Ubuntu 13.0-1.pgdg20.04+1))
    Type "help" for help.
    
    postgres=# SET password_encryption = 'scram-sha-256';
    SET
    postgres=# CREATE USER alice PASSWORD 's3cr3tp@ss';
    CREATE ROLE
    postgres=#

    md5を使用する場合は、最初のコマンドを省略してください 代わりに。)これにより、 aliceというユーザーが作成されました。 パスワードs3cr3tp@ ss 。このユーザーが所有するデータベースも作成しましょう:

    postgres=# CREATE DATABASE app1 OWNER alice;
    CREATE DATABASE
    postgres=#

    データベースはapp1と呼ばれます 。 alice以降 このデータベースを所有している場合、アプリケーションがユーザー alice として接続する場合、データベース内のすべての操作(テーブルの作成、行の挿入など)が許可されます。 。

    aliceとして接続してみましょう 、ネットワーク経由:

    ~$ psql -h 10.1.2.3 -U alice app1
    Password for user alice:
    psql (13.0 (Ubuntu 13.0-1.pgdg20.04+1))
    SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
    Type "help" for help.
    
    app1=>

    涼しい!これでデータベースに接続されましたapp1 ユーザーとしてalice

    データベースの削除、バックアップ、および復元

    Postgresserverでの作業を継続する際に役立ついくつかの秘訣は次のとおりです。

    データベースの削除

    次のように、作成したデータベース(「app1」)を削除できます。

    alice@ubu:~$ psql -h 127.0.0.1 -U alice app1
    Password for user alice:
    psql (13.0 (Ubuntu 13.0-1.pgdg20.04+1))
    SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
    Type "help" for help.
    
    app1=> \c postgres
    SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
    You are now connected to database "postgres" as user "alice".
    postgres=> DROP DATABASE app1;
    DROP DATABASE
    postgres=>

    最初にpsqlの「\c」コマンドを使用して別のデータベースに切り替える必要があることに注意してください。

    別のデータベースを作成する、または app1を再作成する 、スーパーユーザーとして接続し、前と同じように「CREATEDATABASE」を実行します。

    データベースをバックアップする

    データベース内のデータをバックアップする最も簡単な方法は、 pg_dumpを使用することです。 このように:

    alice@ubu:~$ pg_dump -h 127.0.0.1 -U alice -f backup.sql app1
    Password:

    これにより、「backup.sql」というSQLファイルが作成されます。このファイルには、データベース app1にスキーマとデータを再作成するために必要なすべてのSQLコマンドが含まれています。 、テキスト形式。これらのコマンドは任意のデータベースで実行でき、スキーマとデータがそのデータベースに入力されます。

    pg_dumpの詳細については、こちらをご覧ください。

    データの復元

    上で作成したSQLコマンドファイルは、次のように復元できます。

    alice@ubu:~$ psql -h 127.0.0.1 -U alice app2
    Password for user alice:
    psql (13.0 (Ubuntu 13.0-1.pgdg20.04+1))
    SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
    Type "help" for help.
    
    app2=> \i backup.sql
    SET
    SET
    (..snip..)

    スキーマとデータを別のデータベースapp2に復元したことに注意してください。 。 psqlの「\i」コマンドを使用すると、ファイルからSQLコマンドを実行できます。

    次のステップ

    PostgreSQLに習熟するのに役立つ記事、チュートリアル、ビデオ、コースがたくさんあります。ただし、PostgreSQLのすべての機能、構文、およびバンドルされたユーティリティの信頼できる広範なカバレッジを提供する公式ドキュメントをここで使用して、しばらく時間をかけてください。


    1. MariaDBでのOCTET_LENGTH()のしくみ

    2. Oracle PLSQL表の使用方法(連想配列または索引別表)

    3. postgresのUPDATERETURNING句から選択できません

    4. Mavenの依存関係としてPostgreSQLドライバーをどのように追加しますか?