PostgreSQL の initdb コマンド
ユーザーは、さまざまなコマンドを使用して手動で PostgreSQL サーバーをセットアップできます。 まず、記事全体で説明されているデータベース クラスターをセットアップする必要があります。
初期化プロセスで最も重要な BASH コマンドの 1つは initdb
コマンドです。 したがって、この記事では、initdb
コマンドの理解に特に焦点を当てています。
PostgreSQL を手動でセットアップする前に、initdb
コマンドを理解することが重要です。 初期段階で PostgreSQL が正しく設定されていないと、後の段階でクエリが実行されません。
最悪の場合、PostgreSQL サーバーがデータディレクトリのパスを検出できず、起動に失敗する可能性があります。 したがって、この記事では initdb
コマンドと、データベース クラスターについてもう少し詳しく説明します。
PostgreSQL の initdb
コマンド
initdb
コマンドは、データベース クラスターの初期化プロセスで使用されます。 initdb
コマンドを使用した初期化プロセスの後、postgres
という名前のデータベースがデータベース クラスター内に作成されます。
postgres
は、ユーザー、ユーティリティ、およびサードパーティ アプリケーションによって使用されるデフォルト データベースとして機能します。 クラスター内に postgres
データベースを作成することに加えて、template1
という名前の別のデータベースも各クラスター内に作成されます。
template1
データベースは、クラスター内で後で作成されるデータベースのテンプレートとして機能します。 データベース クラスタは、ファイル システムの下のデータ ディレクトリであることを思い出してください。
データベース クラスタは、すべてのデータが格納される単一のディレクトリです。 したがって、initdb
コマンドは、データベース クラスタを初期化する場所を引数として受け取ります。
データベース クラスタの引数として任意の場所を指定できます。 データは、initdb
コマンドで指定された目的の場所に保存されます。
initdb
コマンドで -D
オプションを使用して、データベース クラスターの目的の場所を指定します。 したがって、データベース クラスタの場所を慎重に選択する必要があります。
PostgreSQL での initdb
コマンドの使用
initdb
コマンドの定義は、上記のセクションで説明されています。 説明に加えて、コマンドの背後にある作業については、前のセクションで詳しく説明しています。
このセクションでは、initdb
コマンドの実行について詳しく説明します。 まず、initdb
コマンドを実行する前に、PostgreSQL ユーザー アカウントにログインしていることを確認してください。
initdb
コマンドは次のように機能します。
> initdb -D /usr/local/pgsql/data
pg_ctl
は、サーバーの起動または停止に使用されます。 以下に示すように、これを使用して initdb
コマンドを実行することもできます。
> pg_ctl -D /usr/local/pgsql/data initdb
initdb
コマンドは、データベース クラスターのデフォルト ロケールを初期化します。 さらに、initdb
コマンドは、ロケール環境設定とデフォルトの文字セット エンコーディングも指定します。
ただし、ユーザーは別のロケールを指定することもできます。 initdb
コマンドは、指定された場所にディレクトリを作成しますが、次の場合は失敗します。
・親ディレクトリへの書き込み権限がありません。
- データ ディレクトリは、その場所に既に存在します。
PostgreSQL ユーザーは、データ ディレクトリに加えて親ディレクトリを所有することをお勧めします。 ただし、親ディレクトリが存在しない場合は、ユーザーが作成する必要があります。
祖父母ディレクトリが書き込み可能でない場合は、ルート権限を使用して、祖父母ディレクトリ内に親と子のディレクトリを作成できます。 次のコマンドを使用できます。
> root# mkdir /usr/local/pgsql
> root# chown postgres /usr/local/pgsql
> root# su postgres
> postgres$ initdb -D /usr/local/pgsql/data
データベース クラスタへの許可されたアクセスを確認する
initdb
コマンドは、データベース クラスタの初期化と作成中にデフォルトのクライアント認証設定を使用します。 次に、すべてのローカル ユーザーがデータベースに接続できるようにします。
ローカル ユーザーは、データベースのスーパーユーザーになることもできます。 データベースへの不正アクセスを避けるために、データベースのスーパーユーザーにパスワードを設定するのが理想的です。
次のコマンドのいずれかを使用して実行できます。
-W
拡張子を持つinitdb
コマンド--pwprompt
コマンドpwfile
コマンド
上記のコマンドを使用して、データベースにパスワードを設定できます。 許可されたユーザーのみがデータベースにアクセスできます。
依存関係の初期化エラー
Bus Error
や Exit Code 135 Error
などの依存関係の初期化エラーが発生した場合は、以下の手順を使用してデータベース クラスターを初期化します。
PostgreSQL サーバーとクライアント ツールがインストールされたら、ユーザーは次のコマンドを ROOT(su)
として実行する必要があります。 service postgresql initdb
コマンドから始めます。
PostgreSQL データベースを初期化します。 次のコマンドは、PostgreSQL サーバーが正しく実行されていることを確認します。
> service postgresql initdb
> systemctl enable postgresql
> systemctl start postgresql
コマンドは、PostgreSQL データベースを初期化します。 しかし、最初に、PostgreSQL サーバーがディレクトリ /var/lib/pgsql
にあることを確認する必要があります。
さらに、PostgreSQL サーバーが実行されていることを確認します。 たとえば、コマンド ps -ef | grep postgres
を使用して、PostgreSQL サーバーの実行状態を確認できます。
エラーが解決しない場合は、次の方法を試してください。
- 空のインストール
data
ディレクトリを削除する必要があります。 - すべてのログ ファイルを正確に読み取る必要があります。
- PostgreSQL サーバーのユーザーまたはパスワードを変更できます。
- PostgreSQL サーバーのデータ ディレクトリを消去できます。
PostgreSQL サーバーの initdb
コマンドは、データベース クラスターを初期化し、ユーザーの希望する場所に設定することを思い出してください。 データベースはロケール環境設定で初期化され、ユーザーの要求に応じて変更できます。
Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!
GitHub