【豆知識】権限エラーでテーブル空間が作成できない問題を解決したい
PostgreSQLインサイド
実現方法
PostgreSQLのスーパーユーザー(通常はinitdbコマンドでデータベースクラスタを初期化したユーザー)でCREATE TABLESPACE文を実行しても、エラーメッセージ「ディレクトリに権限を設定できませんでした」が出力されることがあります。これは、CREATE TABLESPACE文を実行したユーザーに、テーブル空間(テーブルスペース)作成先のディレクトリーに対する必要なオペレーションシステム上の権限が付与されていないことが原因である可能性があります。
このような場合、テーブル空間作成先のディレクトリーに対し、読み込み権限、書き込み権限、および所有者権限を付与してください。
実行例
テーブル空間を作成するディレクトリーに対し、読み込み権限、書き込み権限、および所有者権限を付与します。
テーブル空間作成先のディレクトリーを「/disk2/pgdata」、作成するテーブル空間名を「new_tablespace」、PostgreSQLのスーパーユーザーであるアカウントを「postgres」(「postgres」が属するグループも「postgres」)とします。テーブル空間作成先のディレクトリー配下は空にしておいてください。
-
オペレーティングシステムのスーパーユーザー(root)へ切り替え
$ su -
-
テーブル空間作成先のディレクトリーの所有者をPostgreSQLのスーパーユーザーのアカウントおよびグループに変更
# chown postgres:postgres /disk2/pgdata
-
さらに、所有者だけに権限(rwx)を付与
# chmod 700 /disk2/pgdata
-
備考ここではデータベースクラスタを作成する際の一般例に合わせて700(所有者だけに読み込み権限、書き込み権限、実行権限を付与)を設定しています。これは、権限上の安全を考慮した設定です。
-
PostgreSQLのスーパーユーザーへ切り替え
# su - postgres
-
データベース(例:postgres)に接続し、CREATE TABLESPACE文を実行
$ psql postgres
postgres=# CREATE TABLESPACE new_tablespace LOCATION '/disk2/pgdata';
ポイント
-
CREATE TABLESPACE文のLOCATION句には、既存のディレクトリーを指定する必要があります。このディレクトリーに対し、テーブル空間を作成するPostgreSQLのスーパーユーザーのアカウントが、読み込み権限、書き込み権限、および所有者権限を持たない場合は、以下のようなエラーが出力されます。
エラーメッセージの例
ERROR: ディレクトリ"/disk2/pgdata"に権限を設定できませんでした
- CREATE TABLESPACE文のLOCATION句に指定するテーブル空間作成先のディレクトリーは、絶対パス名で記述する必要があります。
-
テーブル空間の所有者は、デフォルトではCREATE TABLESPACE文を実行するPostgreSQLのスーパーユーザーとなります。しかし、OWNER句にユーザー名を指定することにより、PostgreSQLのスーパーユーザー以外のユーザーをテーブル空間の所有者とすることができます。
指定例
テーブル空間の所有者にunyou01を指定
CREATE TABLESPACE new_tablespace OWNER unyou01 LOCATION '/disk2/pgdata';
参考
PostgreSQL 12.1 文書
-
Documentation(PostgreSQLオフィシャル)
- III. Server Administration
- 22. Managing Databases
- 22.6. Tablespaces
- 22. Managing Databases
- VI. Reference
- I. SQL Commands
- CREATE TABLESPACE
- I. SQL Commands
- III. Server Administration
-
PostgreSQL日本語ドキュメント(日本PostgreSQLユーザ会)
- III. サーバの管理
- 22. データベース管理
- 22.6 テーブル空間
- 22. データベース管理
- VI. リファレンス
- I. SQLコマンド
- CREATE TABLESPACE
- I. SQLコマンド
- III. サーバの管理
2021年5月28日公開
富士通のソフトウェア公式チャンネル(YouTube)
-
- 富士通のミドルウェア製品のご紹介や各種イベント・セミナーの講演内容、デモンストレーションなどの動画をご覧いただけます。
- 富士通のミドルウェア製品のご紹介や各種イベント・セミナーの講演内容、デモンストレーションなどの動画をご覧いただけます。
PostgreSQLについてより深く知る
PostgreSQLに興味をお持ちのお客様はこちらのコンテンツもお勧めです。ぜひご覧ください。
本コンテンツに関するお問い合わせ
お電話でのお問い合わせ
-
富士通コンタクトライン(総合窓口)
0120-933-200受付時間:9時~12時および13時~17時30分(土曜日・日曜日・祝日・当社指定の休業日を除く)