PostgreSQL の initdb コマンド

Bilal Shahid 2023年6月20日
  1. PostgreSQL の initdb コマンド
  2. PostgreSQL での initdb コマンドの使用
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 ErrorExit 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 コマンドは、データベース クラスターを初期化し、ユーザーの希望する場所に設定することを思い出してください。 データベースはロケール環境設定で初期化され、ユーザーの要求に応じて変更できます。

著者: Bilal Shahid
Bilal Shahid avatar Bilal Shahid avatar

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