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と関連する良く見られている質問

QPostgreSQLのクラスタ運用について

毎度お世話になっております。

今回はお客さまがOracleが高価で予算が取れないとの事で、9i+Veritas Cluster Serverで実現していた2台のサーバから共有ディスク上のDBにアクセスする方法を模索しております。

ACT-ACT構成で2台のサーバから共有ディスク上のDB(PostgreSQL)に具体的にアクセスするにはどのようなソフトウェア構成にしたら良いかご教示願います。

よろしくお願いします。

Aベストアンサー

その後、以下のような文書を見つけました。参考になれば。
http://www.unisys.co.jp/tec_info/tr94/9405.pdf

QPL/pgSQLの使い方

PL/pgSQLについて質問させてください。
以下のような2つのテーブルAとBがあります。

テーブルA:
aid | fall0 | fall1
-----+-------+-------
001 | 0 | 0
002 | 0 | 0

テーブルB:
bid | aid | fall
--------+-----+------
000001 | 001 | 0
000002 | 001 | 0
000003 | 002 | 0
000004 | 002 | 0

テーブルAとテーブルBの関係は1:nの関係です。
以下のような2つのことがやりたいです。
テーブルAのfall0,fall1,テーブルBのfallはフラグです。
今、テーブルBのaid=001であるすべての行のfallを0から1に変えたとき、
それに対応するテーブルAの行のfall1が0から1にかわる。またテーブルBのaid=001である少なくとも一つの行のfallを0から1に変えたとき、
それに対応するテーブルAの行のfall0が0から1にかわるようなプログラムを作りたいのですが、なかなかうまくいきません。今aid=001のときをやりましたが、aidは任意のときを想定しています。もし、ご存知の方がいらっしゃいましたら教えていただけないでしょうか?
よろしくお願いいたします。以下は自分が書いたプログラムです。

drop table b;
drop table a;
create table A
(
aid text primary key,
fall0 integer,
fall1 integer
);

create table B
(
bid text primary key,
aid text not null references A(aid),
fall integer
);

insert into A values ('001',0,0);
insert into A values ('002',0,0);
insert into A values ('003',0,0);
insert into B values ('000001','001',0);
insert into B values ('000002','001',0);
insert into B values ('000003','002',0);
insert into B values ('000004','002',0);

/* 関数の定義 */
create function tri_test() returns trigger as '
begin
declare
aid_rec
if old.fall=0 and new.fall=1 then
update a set fall1=1 where a.aid = select b.aid from b where b.fall = 1);
end if;
return new;
end;
' language 'plpgsql';

/* トリガーの定義 */
create trigger tri_b after update or insert on b for each row
execute procedure tri_test();

/* B テーブルへのデータ操作 */
update b set fall=1 where aid='001';

PL/pgSQLについて質問させてください。
以下のような2つのテーブルAとBがあります。

テーブルA:
aid | fall0 | fall1
-----+-------+-------
001 | 0 | 0
002 | 0 | 0

テーブルB:
bid | aid | fall
--------+-----+------
000001 | 001 | 0
000002 | 001 | 0
000003 | 002 | 0
000004 | 002 | 0

テーブルAとテーブルBの関係は1:nの関係です。
以下のような2つのことがやりたいです。
テーブルAのfall0,fall1,テーブルBのfallはフラグです...続きを読む

Aベストアンサー

create or replace function trg_b_test() returns trigger as $$
declare
i int;
begin
if old.fall=0 and new.fall=1 then
update a set fall0=1 where a.aid = new.aid;
end if;
select count(*) into i from b where b.fall=0 and b.aid=new.aid;
if i = 0 then
update a set fall1=1 where a.aid = new.aid;
end if;

return new;
end;
$$ language 'plpgsql';

drop trigger trg_b_test on b;
create trigger trg_b_test after update
on b for each row
execute procedure trg_b_test();

Q【DMアルゴリズム】クラスタリングについて

クラスタリングについて詳しく教えて欲しいです。

クラスタリングとは同じような種類のものを集めて、他のものと分別することですか?

どのようにして分別するのか、クラスタリングすることでどんなメリットがあるのかが分からないので、そのあたりを教えてください。

わかりやすい具体例を挙げて下さるとありがたいです。

Aベストアンサー

クラスタリング:
似ている物同士をまとめる操作。
分類された対象間の似ている度合いを数値化した非類似度を規定したり分類対象の特徴をベクトル化して分類する操作を行うこと。
フェイルオーバクラスタ:主系と待機系に別れ主系が故障しても待機系が主系に置き換わってサービスを提供する。信頼性向上
負荷分散クラスタ:クライアントの要求を複数のコンピュータに分配する。クラスタノードが増えればそれだけ要求に応えることができる。処理性能の向上
並列処理クラスタ:ロジックの中で並行に処理できる部分を複数のノードに分散して演算する。処理時間の短縮

下記にWindowsクラスタリングの概要がありますのでこちらも参照してみてください。

参考URL:http://www.microsoft.com/japan/technet/prodtechnol/windowsserver2003/technologies/clustering/winclstt.mspx

Qpl/pgsqlで変数の扱い

pl/pgsqlで変数が文字列として扱われてしまうのですがどうすればいいのでしょうか。
具体的には以下のような感じです。

CREATE OR REPLACE FUNCTION test_func() RETURNS VOID AS $$
DECLARE

test_val TEXT ;
ofs_num INTEGER := 0;
lmt_num INTEGER := 0;
t_name TEXT := 'schema1.table1';

BEGIN

SELECT INTO ret_val * FROM t_name OFFSET ofs_num LIMIT lmt_num;

END;
$$ LANGUAGE plpgsql;

上記のofs_numやlmt_numは変数として認識してくれるのですが
FROMに続く「t_name」が変数ではなくそのままの文字列として認識されてしまいます。

t_nameを変数として認識させる方法はありませんでしょうか。

教えていただけると助かりますm(_)m

Aベストアンサー

最新のバージョン9.2であっても、PL/pgSQL では SELECT INTO は使用できません。(下記ページの注釈参照)
http://www.postgresql.jp/document/9.2/html/sql-selectinto.html
したがって、SELECT INTO の様なことを行う場合は CREATE TABLE AS に書き直してやる必要が有ります。

また、PL/pgSQL 内で動的にSQLを生成して実行する場合は EXECUTE を使う必要性が有るようです。
http://www.postgresql.jp/document/9.2/html/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN


例)

BEGIN

EXECUTE 'CREATE TABLE ret_val AS SELECT * FROM ' || t_name::regclass || ' OFFSET ' || ofs_num || ' LIMIT ' || lmt_num;

END;

最新のバージョン9.2であっても、PL/pgSQL では SELECT INTO は使用できません。(下記ページの注釈参照)
http://www.postgresql.jp/document/9.2/html/sql-selectinto.html
したがって、SELECT INTO の様なことを行う場合は CREATE TABLE AS に書き直してやる必要が有ります。

また、PL/pgSQL 内で動的にSQLを生成して実行する場合は EXECUTE を使う必要性が有るようです。
http://www.postgresql.jp/document/9.2/html/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN


例)

BEGIN

EXECUTE 'CREATE...続きを読む

Qpostfitを使用したメールサーバーにてクラスタシステムを導入する場

postfitを使用したメールサーバーにてクラスタシステムを導入する場合HPCクラスタとHAクラスタとロードバランスクラスタのどのクラスタシステムを使うのが一般的でしょうか。

Aベストアンサー

HPCクラスタにするかは、メールサーバーの処理能力の違いだけです。HPCは、アプリケーションがCPU(又はメモリ)の処理能力を必要とする場合に選択します。
通常、メールサーバは、負荷がかかるところは、ネットワークとディスクのIOになりますので、HPCクラスタは検討しません。
10GのLANを使用する場合は、検討する必要があるかもしれませんが。

ロードバランスクラスタは、処理件数が大きいときに使用します。また、一般的には、それぞれの処理が影響し合わないときに使用します。例えば、WEBサーバや検索サイトサーバなどです。
なお、サーバは、HPCクラスタ、HAクラスタ、どちらも可能です。

ということで、一般的には、HAクラスタから検討し、その必要要件に応じて、HPCや
ロードバランスを検討すると思います。

従い、メールサーバーに求められる必要要件を整理し、それに応じてサーバを構築することです。
HPCクラスタとHAクラスタとロードバランスクラスタは、問題解決するための手段の一つです。

QPL/pgSQLの返り値の取得方法について

now()の結果を返すだけの以下の2つのPL/pgSQLを試しに作りました。SQL1は正しく結果が返ってきますが、SQL2は結果が何も返ってきません。どなたか説明できる方、いらっしゃいますでしょうか。宜しくお願い致します。

■SQL1
CREATE OR REPLACE FUNCTION select_now1() RETURNS date AS $$

DECLARE
d_currentDATE:= NULL;

BEGIN
SELECT INTO d_current now();
RETURN d_current;

END;
$$ LANGUAGE PLpgSQL;

■結果1
select_now1
-------------
2011-03-19
(1 行)


■SQL2
CREATE OR REPLACE FUNCTION select_now2(OUT d_current date) AS $$

DECLARE
d_currentDATE:= NULL;

BEGIN
SELECT INTO d_current now();

END;
$$ LANGUAGE PLpgSQL;

■結果2
select_now2
-------------

(1 行)

now()の結果を返すだけの以下の2つのPL/pgSQLを試しに作りました。SQL1は正しく結果が返ってきますが、SQL2は結果が何も返ってきません。どなたか説明できる方、いらっしゃいますでしょうか。宜しくお願い致します。

■SQL1
CREATE OR REPLACE FUNCTION select_now1() RETURNS date AS $$

DECLARE
d_currentDATE:= NULL;

BEGIN
SELECT INTO d_current now();
RETURN d_current;

END;
$$ LANGUAGE PLpgSQL;

■結果1
select_now1
-------------
2011-03-19
(1 行)


■SQL2
CREATE OR REPLACE FUNCTION se...続きを読む

Aベストアンサー

SQL2 では DECLARE d_current DATE:= NULL; が不要です。この2行を削除すれば、結果が返ることを確認しました。名前がかぶっているため、OUT パラメータを隠してしまっているようです。

QSQL2000でのインデックスのクラスタ化

インデックスのチューニング作業を実施しようと、インデックスの勉強中ですが、
クラスタ化と非クラスタ化の意味がBooks Onlineを参照しても理解
出来ません。
インデックスのクラスタ化と非クラスタ化に詳しい方、どのようなのがクラスタ化、非クラスタ化なのかを教えて下さい。
よろしくお願いします。

Aベストアンサー

分かり易いように箇条書きにします。

クラスタ化インデックス

・データ自体が格納される
・データ行が自動的に並び替えられる
  →インデックスの並び順とデータの物理的な並び順が一致する
・1つのテーブルに作成できるインデックスの数は1つ
・すべてのデータが並べ替えられて格納されている
・範囲検索に有効
・値の重複が多い列をキーとする検索に有効


非クラスタ化インデックス

・データの物理的な並び順との整合性はまったくない
・インデックスキーしか格納されない
・1つのテーブルにつき最大249個まで作成できる
(データの挿入、更新、削除のたびにインデックスのメンテナンスが
自動的に行われるため、インデックスの数はほどほどに抑えたほうがよい)
・返される行数が少ない場合にしか役に立たない

QPL/pgSQLを使用してデータ移行がしたい。

Ver8.3.3
現行のテーブルの値を、別テーブルへ移行したいのですが、
コーディングのしかたが良く解りません。

ex)
Aテーブル
ID 
ビット合計1
ビット合計2

Bテーブル
ID 
ビット合計データ種別
ビット合計

1レコードの物を、2レコードに変換する具合です。

サンプル等が記載されているサイト等を教えて頂ければ幸いです。

宜しくお願い致します。

Aベストアンサー

テーブルAとBは、同じサーバにあるのでしょうか?
CSVファイルなどの媒介は、必要ないのでしょうか?

データ件数は、どのくらいあるのでしょう?
insert ~ selectの1文で可能なのですが、ストアドプロシジャでやりたいでしょうか?
データ件数が多量の場合、select文で条件検索し、何回かに分割して行うこともできます。

insert into B
select id,1,bsum1 from A
union
select id,2,bsum2 from A

QWin98クラスタスキャンが止まってしまいます・・・・・

ディスクトップパソコン再起動後に

ディスクスキャン後、クラスタスキャンになるのですが先日不良クラスタが約300件でクラスタスキャンが止まってしまいました。

本日、再度クラスタスキャンを行ったのですが先日の手前で不良クラスタ1件を認識し、また止まってしまいました。

とりあえず Win98 のツール以外からクラスタ復旧をすることはできないのでしょうか?

どうぞよろしくお願い致します。

Aベストアンサー

>デフラグしたら動かなくなっちゃいますでしょうか

1,みなさんが言われているように別のパソコンにハードディスクをスレーブ接続してデーターを吸い出してください。接続方法は下記サイト参考にして下さい。

2,毎回クラスタ不良が発見されているならばデフラグはやめた方がいいです。ダメモトですがプロダクトキーをメモして「format」→クリーンインストールした方がまだいいかもしれませんが、この場合もいずれ動かなくなると思います。

Windows98でプロダクトID(ProductKey)を確認する方法
【手順】
(1)「スタート」-「ファイル名を指定して実行」をクリックします。
(2)「名前」に「REGEDIT」と入力し「OK」ボタンをクリックすると、「レジストリエディタ」が起動します。
(3)「HKEY_LOCAL_MACHINE」フォルダの左側にある「+」マークをクリックします。
(4)「Software」フォルダの左側にある[+]をクリックします。
(5)「Microsoft」フォルダの左側にある[+]をクリックします。
(6)「Windows」フォルダの左側にある[+]をクリックします。
(7)「CurrentVersion」フォルダをクリックします。
(8)「レジストリエディタ」ウインドウの右側の「ProductKey」の右側に表示されます。
ProductKeyは、「XXXXX-XXXXX-XXXXX-XXXXX-XXXXX」の形式になっています

3,私の場合はハードディスクを購入してWin98インストール、現在サクサクと動いています。

参考URL:http://www.fmworld.net/biz/fmv/support/fmvmanual/0310-0403/9321w6/h_zousetsu11.html

>デフラグしたら動かなくなっちゃいますでしょうか

1,みなさんが言われているように別のパソコンにハードディスクをスレーブ接続してデーターを吸い出してください。接続方法は下記サイト参考にして下さい。

2,毎回クラスタ不良が発見されているならばデフラグはやめた方がいいです。ダメモトですがプロダクトキーをメモして「format」→クリーンインストールした方がまだいいかもしれませんが、この場合もいずれ動かなくなると思います。

Windows98でプロダクトID(ProductKey)を確認する方法
【...続きを読む

QPL/pgSQL 引数の数

PL/pgSQL を使用し更新処理を行いたいのですが、
パラメータの数が多すぎるのか
以下のエラーでデータベースにファンクションを定義出来ません。
ERROR: functions cannot have more than 100 arguments
SQLステート:54023

可変長引数で作成すると、データベースに定義は出来るのですが
ファンクション実行時に同様のエラーが発生し更新処理が行えません。

PL/pgSQL の引数を100以上使用出来る様にする設定等、存在するのであれば
教えて頂きたいです。

環境は以下の内容です。
CentOS-6.2-x86_64
Apache/2.2.15
PostgreSQL 9.1.3
PHP Version 5.3.3 (PDOを使用しています)

Aベストアンサー

100 以上の引数をもった関数を定義できるようにするには、ソースコードを修正してコンパイルしなおす必要があります。

ヘッダファイル src/include/pg_config_manual.h 内の定数 FUNC_MAX_ARGS を修正してください。ソースコードのコメントには約 600 まで増やせるということです。

100 以上の引数をもつ関数を定義すること自体、設計に何らかの問題がありそうなので、そちらを見なおしたほうがよいと思います。

あるいは、引数を配列や複合型で渡すことを考えたほうがいいかもしれません。


人気Q&Aランキング