OSはCentOS5.2を使用しております。

データベースクラスタの格納先を変更したく
PostgreSQLをrpmでインストールした後に
#su postgers
$vi ~/.bash_profile
でPGDATAを編集後、環境変数へ反映。

$/usr/bin/initdb -D /usr/local/pgsql
で初期化処理を実施後

/etc/rc.d/init.d/postgresql start
と起動したところ、イニシャル処理も実施され
デフォルトの/var/lib/pgsql/dataが作成されて
しまいこちらの領域を使用して起動します。

どうすれば、ディレクトリを変更できるのでしょうか。
よろしくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

CentOSの環境が手元にないのであくまで推測になります。



おそらく起動スクリプト内でpostgresユーザの環境変数が参照されていないことが原因だと思います。まず、/etc/rc.d/init.d/postgresqlの内容を確認してPGDATAの値に何が指定されているかを確認してみてください。多分、以下のような行が含まれていると思います。

PGDATA=/var/lib/pgsql/data

ファイルを直接編集してPGDATAを変更してもいいですが、PGDG (PostgreSQL Global Development Group: PostgreSQLの開発元)が配布するパッケージ、もしくはそれをベースにしているパッケージであれば、/etc/sysconfig/pgsql/postgresqlというファイルを作成し、ファイル内に以下のような行を追加するとデータベースクラスタの位置を変更できるはずです。

PGDATA=/usr/local/pgsql

あと、日本語のデータを格納するのであればinitdbの実行時に--no-localeオプションを指定したほうがいいでしょう。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
今は、デフォルトで構築してしまったのですが
/etc/rc.d/init.d/postgresql作成し、当初の
目的の場所に変更しようと思います。

お礼日時:2009/06/06 22:52

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QPOSTGRESのデータの格納場所はどこでしょうか?

RedHat7.2/PostgreSQL7.2/という環境で、サーバーがクラッシュしてしまい、データを他のサーバに移し変えないといけなくなりました。そこで、PostgreSQLを再インストールしないとデータベースが使えない状況となりました。

データベースを再インストールするのは良いとして、どこかに格納されているはずのデータベースの内容を取り出し、復帰させたいのですが、方法はありますか?大変困っております。よろしくお願いします。

Aベストアンサー

No.1の追加です。
データの移設でよかったと思います。
または、データを読み込むときに、「iオプション」でディレクトリを指定して、元のファイルを読み込んでもよかったと思います。

QPostgreSQLが起動しない・・・

はじめまして、tanu_2です。
玄箱HGをDebian化し、いろいろと遊んでいます。

PostgreSQLをapt-getでインストールし、Webアプリを動かしていたのですが、昨日より突然、PostgreSQLが動かなくなってしまいました。
原因が分からず、サーバを再起動し、
# /etc/init.d/postgresql start

$ pg_ctl start
などを試してみたのですが、動きません。
念のため、初期化(initdb)も試みたのですが、これも失敗してしまいます。
/var/log/postgresql/postgres/logを覗いてみると、

FATAL: could not write lock file "/var/lib/postgres/data/postmaster.pid": No space

となっており、上記ディレクトリにpostmaster.pid書き込みできないよ、と言われているっぽかったので、パーミッションを変更したりして
みましたが、postgresql startにしろ、pg_ctl startにしろ、それぞれのコマンドで起動すると、強制的にパーミッションが「700」に変更されてしまうようで、結果は同じでした。

どなたか、解決策をご教示願えませんでしょうか?

よろしくお願いします。m(_ _)m

はじめまして、tanu_2です。
玄箱HGをDebian化し、いろいろと遊んでいます。

PostgreSQLをapt-getでインストールし、Webアプリを動かしていたのですが、昨日より突然、PostgreSQLが動かなくなってしまいました。
原因が分からず、サーバを再起動し、
# /etc/init.d/postgresql start

$ pg_ctl start
などを試してみたのですが、動きません。
念のため、初期化(initdb)も試みたのですが、これも失敗してしまいます。
/var/log/postgresql/postgres/logを覗いてみると、

FATAL: could not wri...続きを読む

Aベストアンサー

それ以外にも、以下のようなコマンドを使ってデータベースサーバプログラムの起動が出来ますよね。

postmaster -D /usr/local/pgsql/data

ただ、以下のURLのドキュメント内には、次のような記述があります。

「何を実行するにしても、サーバはPostgreSQLユーザアカウントで起動させなければなりません。 rootであってはいけませんし、他のユーザでもいけません。」

パッケージによるインストールであれば、自動でpostgresユーザが作られているはずだと思うけど。(Debianは使ったことないので、確証はなし。)

su - postgres

上記のコマンドでログインするなり、パスワードを忘れたのならroot権限にてpasswdコマンドから変更するなりした後、もう一度postmasterを起動してみよう!

ちなみに、パーミッション関係のエラーは、「Permission denied」ですよね。

参考URL:http://www.postgresql.jp/document/pg803doc/html/postmaster-start.html

それ以外にも、以下のようなコマンドを使ってデータベースサーバプログラムの起動が出来ますよね。

postmaster -D /usr/local/pgsql/data

ただ、以下のURLのドキュメント内には、次のような記述があります。

「何を実行するにしても、サーバはPostgreSQLユーザアカウントで起動させなければなりません。 rootであってはいけませんし、他のユーザでもいけません。」

パッケージによるインストールであれば、自動でpostgresユーザが作られているはずだと思うけど。(Debianは使ったことないので、確証は...続きを読む

Q文字列として"(ダブルコーテーション)を表示させる方法

こんにちは。文字列として、ダブルコーテーションを表示させるには、どうすればよいのか教えてください。m(__)m


例えば、
<font size="2">あいうえお</font>

というタグの「あいうえお」の部分が、セルA1にあった場合、

="<font size="2">"&A1&"</font>"という表示にしたいのです。

"2"のダブルコーテーションも文字列として表示させるには、どうすればよろしいのでしょうか。

教えてください。よろしくお願い致します。

Aベストアンサー

こんにちは~

表示形式は 「標準」 のままで、
ダブルコーテーションを、ダブルコーテーションで囲んでください。

""2""

="<font size=""2"">"&A1&"</font>"

としてみてください。

Qpostgresqlの接続ポート5432から5433に変更したら

お世話になります。
postgresql ポート変更を5432から5433に変更し,psql -lを実行したら、
Is the server running locally and accepting conection on Unix domain socket "tmp/.s.5432"?
というエラーが発生しました。5432に戻すとエラーは消えるのですが、環境上5433で接続したいのですが、どこが悪いのか全く検討がつきません。
ご指導をお願い致します。

Aベストアンサー

標準の5432以外に設定した場合は
psql -p 5433
のように -p オプションでポート番号を指定してください。

QPostgreSQLのpsqlでユーザの扱いがうまくいかない

こんにちは

ただいま、PostgreSQL7.2.3をインストール(Redhat7.3)し、これからpsqlを使い、SQL操作をしようとしていたところですが、psqlと入力すると "psql: FATAL 1: Database "postgres" does not exist in the system catalog."となります。

PostgreSQLのユーザは "postgres","nobody"です。
現在、postgresからpostmaster -Sで起動しています.

下記に端末で行った作業内容をコピーしてみました。
今回インストールの参考にした書籍は"PHPxPostgreSQLで作る最強Webシステム」石井達夫著です。この本の手順に従ったつもりですが、うまくいきません。


[postgres@www root]$ postmaster -S
[postgres@www root]$ psql -l
List of databases
Name | Owner | Encoding
-----------+----------+----------
php | postgres | EUC_JP
template0 | postgres | EUC_JP
template1 | postgres | EUC_JP
(3 rows)

[postgres@www root]$ select dtname from php
bash: syntax error near unexpected token `from'
[postgres@www root]$ select dtname from template0
bash: syntax error near unexpected token `from'
[postgres@www root]$
[postgres@www root]$ psql select dtname from php
psql: warning: extra option from ignored
psql: warning: extra option php ignored
psql: FATAL 1: Database "select" does not exist in the system catalog.
[postgres@www root]$ psql -l
List of databases
Name | Owner | Encoding
-----------+----------+----------
php | postgres | EUC_JP
template0 | postgres | EUC_JP
template1 | postgres | EUC_JP
(3 rows)

[postgres@www root]$ psql
psql: FATAL 1: Database "postgres" does not exist in the system catalog.

こんにちは

ただいま、PostgreSQL7.2.3をインストール(Redhat7.3)し、これからpsqlを使い、SQL操作をしようとしていたところですが、psqlと入力すると "psql: FATAL 1: Database "postgres" does not exist in the system catalog."となります。

PostgreSQLのユーザは "postgres","nobody"です。
現在、postgresからpostmaster -Sで起動しています.

下記に端末で行った作業内容をコピーしてみました。
今回インストールの参考にした書籍は"PHPxPostgreSQLで作る最強Webシステム」石井達夫著で...続きを読む

Aベストアンサー

う~ん。。これは勘違いだらけですね(^^;

> psqlと入力すると "psql: FATAL 1(snip)
ただ単に、psqlとだけ入力すれば、そのユーザー名と同じ名前のDBが選択されたことになります。
つまり、
psql -n postgres と、DB名「postgres」が選択され、「そんなDBはないよ~」と言うエラーが出ているだけです。

> PostgreSQLのユーザは "postgres","nobody"です。
まあ、この辺りは、もう少し理解を深めればnobodyじゃなくなると思いますが、今のところこれでいいでしょう。。
(私も開発サーバーはnobodyのまま(^^;)

> 現在、postgresからpostmaster -Sで起動しています.
その本はいつの本ですか?
# おそらくバージョン6.5以前の本だと思いますが…
間違いではないですが、postmasterを直接コールするよりも、pg_ctlコマンドを使った方がいいですよ。

> [postgres@www root]$ psql -l
これの後に、ちゃんとリストが表示されているので、DB自体は起動できています。

> [postgres@www root]$ select dtname from php
これ以下は、その名前のDBを立ち上げてから行います。

つまり、
[postgres@www root]$ psql -n php
と入力すると、

Welcome to psql, the PostgreSQL interactive terminal.

Type: \copyright for distribution terms
\h for help with SQL commands
\? for help on internal slash commands
\g or terminate with semicolon to execute query
\q to quit

php=#

と表示されます。
そこで先のコマンドを入力すればOKです。

と、ものすごく初心者のようですが、最初は誰でも初心者です。
頑張ってください!

う~ん。。これは勘違いだらけですね(^^;

> psqlと入力すると "psql: FATAL 1(snip)
ただ単に、psqlとだけ入力すれば、そのユーザー名と同じ名前のDBが選択されたことになります。
つまり、
psql -n postgres と、DB名「postgres」が選択され、「そんなDBはないよ~」と言うエラーが出ているだけです。

> PostgreSQLのユーザは "postgres","nobody"です。
まあ、この辺りは、もう少し理解を深めればnobodyじゃなくなると思いますが、今のところこれでいいでしょう。。
(私も開発サーバーはnobodyのま...続きを読む

Q接続中のユーザを表示する方法

こんにちは。Postgresで接続中ユーザの表示をするには(コマンド)どうすればよいか教えてください。

Aベストアンサー

(ソースのリダイレクトです)
postgreSQL v8.0.2で
select * from pg_stat_activity;
とすれば出て来ました。

一応、探すのに苦労しましたが
23.2. 統計情報収集器
にその他統計情報の閲覧テーブルが記載されています(参考までに)
http://www.postgresql.jp/document/pg800doc/html/monitoring-stats.html

参考URL:http://ml.postgresql.jp/pipermail/pgsql-jp/2003-August/014272.html

Qsqlに記述できない文字

いつもお世話になっております。
WEB画面から入力された項目を対象にPostgresに検索しに行っているのですが、シングルクォート(')が入っていた場合、エラーになってしまいました。

JavaからSQLを生成し、Postgresに接続しているのですが、シングルクォートを検索させるにはどうするのが良いでしょうか。

またSQLに記述できない文字は、シングルクォートのほかに何かありますでしょうか。

よろしくお願いします。

Aベストアンサー

下記のページにPostgreSQLのSQLの文字列定数についての説明が有りますので、記述できない文字などについてはここを見ると良いでしょう。
http://www.postgresql.jp/document/pg837doc/html/sql-syntax-lexical.html#SQL-SYNTAX-STRINGS

さて、シングルクウォートを含む文字列定数への対応としては下記の3つが考えられます。
1. 文字列中のシングルクウォートとバックスラッシュ(\)を\でエスケープする。
2. ドル引用符を使用する。
3. プレースフォルダを使用する。


2は、$xxxx$ のようなドル記号で囲まれた文字列を引用符代わりに使う、PostgreSQL 独自の機能です。
'hoge' と書く代わりに $xxxx$hoge$xxxx$ の様に書けます。
詳しくは下記のページを見て下さい。
http://www.postgresql.jp/document/pg837doc/html/sql-syntax-lexical.html#SQL-SYNTAX-DOLLAR-QUOTING

3は、SQLの定数の位置に?を書き、PreparedStatement の set~~() メソッドを使って値を指定する方法です。下記のページが参考になるでしょう。
http://www.atmarkit.co.jp/fjava/rensai2/webopt11/webopt11.html
http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/guide/jdbc/getstart/preparedstatement.html

参考URL:http://www.postgresql.jp/document/pg837doc/html/sql-syntax-lexical.html#SQL-SYNTAX-CONSTANTS

下記のページにPostgreSQLのSQLの文字列定数についての説明が有りますので、記述できない文字などについてはここを見ると良いでしょう。
http://www.postgresql.jp/document/pg837doc/html/sql-syntax-lexical.html#SQL-SYNTAX-STRINGS

さて、シングルクウォートを含む文字列定数への対応としては下記の3つが考えられます。
1. 文字列中のシングルクウォートとバックスラッシュ(\)を\でエスケープする。
2. ドル引用符を使用する。
3. プレースフォルダを使用する。


2は、$xxxx$ のようなドル記号で囲...続きを読む

QPostgreSQLで外部DB内のテーブル参照方法を教えてください

PostgreSQLで別データベースのテーブルを参照することはできますか?

仮に以下のデータベースが2つあるとします
CREATE DATABASE common_db ...
CREATE DATABASE app1_db ...

app1_db に接続した状態で common_db のテーブルを参照することはできますか?

仮にcommon_dbに郵便番号テーブル postcodeがあるとします
CREATE TABLE postcode (
postcode text, --郵便番号
pref_name text, -- 県名
 ・・・
)

このpostcodeテーブルをapp1_dbに接続した状態で参照するには、どのような参照クエリになりますか?
ご教授の程よろしくお願います。
そもそもできないのでしょうか?

Aベストアンサー

PostgreSQL 本体の機能では実現できませんが、contrib モジュールの dblink を使えばできます。

dblink のインストール方法は PostgreSQL のインストール方法によって異なりますが、RPM パッケージであれば postgresql-contrib というパッケージをインストールし、以下のように dblink の関数などを定義します。

psql -f /usr/share/postgresql/contrib/dblink.sql (データベース名)

データベース名には他のデータベースにアクセスしたいデータベース名、例では app1_db を指定します。なお、dblink.sql のパスはパッケージによって異なる場合があります。

dblink をインストールすれば以下のように関数を呼び出して別のデータベース内のテーブルを参照できます。

SELECT * FROM dblink('dbname=common_db', 'SELECT * FROM postcode') AS postcode(postcode text, pref_name text);

dblink について詳しくは PostgreSQL のマニュアルを読んでください。

http://www.postgresql.jp/document/pg840doc/html/dblink.html

ただ、質問の例にあるデータベース名やテーブル名を見ていると、アプリケーションごとに名前空間を分けたいだけのようなので、それであればスキーマを使ったほうがよさそうな気もします。

参考URL:http://www.postgresql.jp/document/pg840doc/html/dblink.html

PostgreSQL 本体の機能では実現できませんが、contrib モジュールの dblink を使えばできます。

dblink のインストール方法は PostgreSQL のインストール方法によって異なりますが、RPM パッケージであれば postgresql-contrib というパッケージをインストールし、以下のように dblink の関数などを定義します。

psql -f /usr/share/postgresql/contrib/dblink.sql (データベース名)

データベース名には他のデータベースにアクセスしたいデータベース名、例では app1_db を指定します。なお、dblink.sq...続きを読む

Qpostgresのdatabase名と、そのencodingを取得する

postgresのdatabase名と、そのencodingを取得する方法を教えてください。



postgres8.1です。

システムカタログ
http://www.postgresql.jp/document/pg811doc/html/catalogs.html

pg_databaseの項目として持っているだろうと思い、見てみました。

encodingint4 このデータベースの文字符号化方式

これか?と思いましたが、数値IDのみでした。

この数値から、utf8やsjisといった情報にどうやったら繋がりますか?

Aベストアンサー

pg_encoding_to_char関数で文字エンコーディング名に変換できます。

=> SELECT datname, pg_encoding_to_char(encoding) FROM pg_database;
datname | pg_encoding_to_char
-----------+---------------------
template1 | UTF8
template0 | UTF8
postgres | UTF8
(4 rows)


人気Q&Aランキング

おすすめ情報