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

pg_ctlのヒントとコツ

    pg_ctl は非常に便利ですが過小評価されているユーティリティであり、開発チームの生活を楽にすることができます。 pg_ctl の詳細については、以下をお読みください そして、どのように開発とテストのワークフローを改善できるか。

    pg_ctlとは何ですか?

    pg_ctl は、標準のPostgresディストリビューションに含まれているコマンドラインツールです。 psql などの他の含まれているツールと同様に、Postgres自体がどこにある場合でも利用できます。 およびpg_dump

    実行可能ファイルは、他のPostgresバイナリと同じディレクトリにあります。正確な場所は、LinuxディストリビューションとPostgresのバージョンによって異なります:

    # debain, ubuntu, ...
    /usr/lib/postgresql/11/bin
    
    # rhel, centos, ...
    /usr/pgsql-11/bin

    このディレクトリをPATHに追加するか、pg_ctlをフルパスにエイリアスすることをお勧めします。

    データベースクラスターを作成する

    他のRDBMSとは異なり、単一のPostgresデータベースサーバープロセス(歴史的には postmaster と呼ばれていました) )、データベースクラスターを管理します 。用語クラスターの使用法 最新ではなく、ネットワーク化されたノードのグループを参照していません。データベースクラスターは、データベースのセットをホストし、それらすべてに共通するいくつかの機能(ロール、物理レプリケーション、WALファイルなど)を備えています。 LinuxディストリビューションによってインストールされるPostgressystemdサービスは、単一データベースクラスターにサービスを提供します。

    pg_ctlを使用できます データベースクラスターを作成します。作成時に、クラスターは完全に単一のディレクトリ内に存在します。必要なすべての構成ファイルが含まれています( postgres.conf pg_hba.conf など)およびデータファイル。これは自己完結型であり、ファイルのアクセス許可が正しく処理されていれば、かなり類似した別のマシンに移動できます。ディレクトリ内にログファイルを配置することもできるため、関連するすべてのファイル(構成、データ、ログ)を1か所にまとめることができます。

    データベースクラスターを作成するには、次を使用します。

    $ pg_ctl -D myclus initdb

    これにより、 myclusというディレクトリが作成されます。 現在のディレクトリの下にあり、そこからサーバーを起動するために必要なすべてのファイルをディレクトリに入力します。

    サンプルセッションは次のとおりです:

    $ pg_ctl -D myclus initdb
    The files belonging to this database system will be owned by user "alice".
    This user must also own the server process.
    
    The database cluster will be initialized with locale "C.UTF-8".
    The default database encoding has accordingly been set to "UTF8".
    The default text search configuration will be set to "english".
    
    Data page checksums are disabled.
    
    creating directory myclus ... ok
    creating subdirectories ... ok
    selecting default max_connections ... 100
    selecting default shared_buffers ... 128MB
    selecting default timezone ... Etc/UTC
    selecting dynamic shared memory implementation ... posix
    creating configuration files ... ok
    running bootstrap script ... ok
    performing post-bootstrap initialization ... ok
    syncing data to disk ... ok
    
    WARNING: enabling "trust" authentication for local connections
    You can change this by editing pg_hba.conf or using the option -A, or
    --auth-local and --auth-host, the next time you run initdb.
    
    Success. You can now start the database server using:
    
        /usr/lib/postgresql/11/bin/pg_ctl -D myclus -l logfile start
    データベースサーバーを起動します

    「Postgresサーバー」は基本的にpostmaster データベースクラスタディレクトリの場所で開始されるプロセス。このポストマスタープロセスは、さまざまなバックグラウンドアクティビティを実行し、着信接続を処理する複数のプロセスをターンポーンします。たとえば、htopなどのツールを使用してシステムプロセスツリーを表示すると、このプロセスモデルの動作を確認できます。

    新しいデータベースクラスタのポストマスタープロセスを開始するには、次を使用します。

    $ pg_ctl -D myclus -l myclus/log start

    -l <​​/ code> オプションは、Postgresログファイルの場所を指定します。この場合は、クラスターディレクトリ自体の中にあります。ログファイルをクラスタディレクトリ内に配置することは珍しくありません。

    次のような出力が表示されます:

    waiting for server to start.... done
    server started

    リロード、再起動、停止は期待どおりに行われます:

    $ pg_ctl -D myclus -l myclus/log reload
    server signaled
    $ pg_ctl -D myclus -l myclus/log restart
    waiting for server to shut down.... done
    server stopped
    waiting for server to start.... done
    server started
    $ pg_ctl -D myclus -l myclus/log stop
    waiting for server to shut down.... done
    server stopped

    これで、 psqlなどのクライアントを使用してこの新しいクラスターに接続できるようになります。 およびpgAdmin

    ポートとその他のオプションの設定

    ただし、実際には、すでにPostgresがマシンにインストールされている場合は、おそらく myclus / postgres.confを編集する必要があります。 ポートの値を変更します 、 unix_socket_directories また、 listen_address クラスターが正常に起動する前。これは、システムにインストールされたPostgresserviceがすでにポート5432と unix_socket_directoriesのディレクトリで実行されているためです。 通常のユーザーが書き込むことはできません。デフォルトのlisten_address はlocalhostです。これは、localhostの外部からクラスターに接続できないことを意味します。

    pg_ctlを使用している場合 自動テストスクリプトでクラスターを作成および破棄するには、プログラムで myclus / postgres.conf を編集するよりも、コマンドラインから直接これらのオプションを指定できる方が簡単です。 。次のようなオプションを指定できます:

    $ pg_ctl -D myclus -l myclus/log -o "-p 6000 -k /tmp -i" start

    これにより、ディレクトリ / tmp に作成されたunixソケットを使用して、ポート6000でサーバーが起動します。 すべてのインターフェースでリッスンします。

    これらのオプションは「開始」に対してのみ指定する必要があり、「再起動」を含む他のコマンドでは省略できます。

    その他の便利な開始オプション

    「-o」内で使用できる便利なオプションが他にもいくつかあります。

    • -F fsyncを無効にします。これは、テストスクリプトをより速く完了するのに役立ちます
    • -B shared_bufffers shared_buffersの設定値 、例 -B 100MB
    • -c conf_var =value 任意の構成値を設定します。例-cwal_level =logic

    これらのセットのいくつかの例を次に示します。

    $ pg_ctl -D myclus -l myclus/log -o "-p 6000 -k /tmp -i -B 100MB -c wal_level=logical" start

    これらのオプションは、実際には postgresのコマンドラインオプションです。 プロセス。その完全なリストはここに記載されています。

    異なるPostgresバージョンのデータベースを実行する

    EnterpriseDBは、さまざまなプラットフォーム向けのさまざまなPostgresバージョン用のビルド済みバイナリをホストします。これらはインストーラーのないtarballです。

    必要なtarballを取得して解凍し、 pg_ctlを見つけます。 バイナリで、それを使用してクラスターを作成します。 pg_ctl クラスターを作成/開始するために必要な、関連付けられたinitdb /postgres/その他のバイナリを自動的に検索します。

    これは、マシン上の既存のPostgreSQLインストールに関係なく、また独立して使用できます。

    Windowsでサービスを作成する

    pg_ctl MacOSやWindowsを含むすべてのプラットフォームで利用できます。特に、これを使用して、サービスコントロールマネージャー(SCM)を介して開始および停止できるサービスを簡単に作成できます。サービスを作成するには、次を使用します:

    pg_ctl -D myclus -N myclus_service register

    これにより、「myclus_service」という自動開始サービスが作成されます。

    この機能は、Postgresv10以降でのみ使用できます。


    1. 911/112:緊急通報サービスのデータモデル

    2. SQL Server 2014のプロセッサの選択–パート2

    3. データベース要約レポートを送信する自動電子メールシステム

    4. DSTのためにOracleの日付比較が壊れています