5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

PostgreSQL Part.6

1 :NAME IS NULL:2008/10/18(土) 17:33:37 ID:???
PostgreSQL (ぽすとぐれすきゅーえる, ぽすとぐれす) について語るスレです。

●関連サイト
PostgreSQL 本家
http://www.postgresql.org/
日本PostgreSQLユーザ会
http://www.postgresql.jp/
ドキュメント
http://www.postgresql.jp/document/current/html/
ダウンロード
http://www.postgresql.jp/PostgreSQL
pgFoundry
http://pgfoundry.org/

●前スレ
PostgreSQL Part.5
http://pc11.2ch.net/test/read.cgi/db/1196512717/

2 :NAME IS NULL:2008/10/18(土) 17:34:37 ID:???
●過去スレ
PostgreSQL 2テーブル目 (WebProgから派生)
http://pc8.2ch.net/test/read.cgi/db/1056944337/
PostgreSQL & pgsql-jp ML 3テーブル目
http://pc11.2ch.net/test/read.cgi/db/1079771059/
【Windows】 PostgreSQL8 Part.1 【対応】 (実質part4)
http://pc11.2ch.net/test/read.cgi/db/1102247223/
PostgreSQL Part.5
http://pc11.2ch.net/test/read.cgi/db/1196512717/

●関連過去スレ
■   PostgreSQLのことならここで聞け   ■ (初心者part1)
http://pc8.2ch.net/test/read.cgi/db/1056960249/
■   PostgreSQLのことならここで聞け   ■ (初心者part2)
http://pc8.2ch.net/test/read.cgi/db/1091523132/
PostgresSQLについて語ろう (雑談part1)
http://pc8.2ch.net/test/read.cgi/db/1056992724/
PostgreSQLについて語ろう where OID=2::oid (雑談part2)
http://pc8.2ch.net/test/read.cgi/db/1136805513/

●関連スレ
2ch検索
http://find.2ch.net/index.php?STR=PostgreSQL
WebProg/PostgreSQL 2テーブル目
http://pc11.2ch.net/test/read.cgi/php/1047317680/

3 :NAME IS NULL:2008/10/20(月) 01:03:45 ID:???
ttp://business.rakuten.co.jp/nishino-itoffice/013016

PostagerSQLって………

4 :NAME IS NULL:2008/10/20(月) 01:17:34 ID:???
そういえば本家MLで、PostgreSQLが普及しない要因として
PostgreSQLという名称(読みにくいだったか、呼びにくいだったか忘れた)を理由に挙げていて、
変更しないか? って話しが出てたよねぇ。
日本ではソコソコ普及しているので名称を理由にするのはおかしいと
石井氏らは名称変更に反対していたようだけど、その後どうなったんだろう。

5 :NAME IS NULL:2008/10/20(月) 01:24:27 ID:???
なんかだっせぇ名前になるんじゃねぇの?
BestSQLとかFastSQLみたいなw
調べてみたらSuperSQLは実在するのな…

6 :NAME IS NULL:2008/10/20(月) 03:16:39 ID:???
MySQLに対抗してYourSQLとかな

7 :NAME IS NULL:2008/10/20(月) 04:24:03 ID:???
PoSQLも実在するのか
難しいな

8 :NAME IS NULL:2008/10/20(月) 05:12:02 ID:???
10年前とは違って、今ならSQLってつける必要ないんじゃね。
エスキューエルにしろシークェルにしろ、全体的に長ったらしくなる。
どうせならPogitとかPgrexみたいなのをきぼん。

9 :NAME IS NULL:2008/10/20(月) 07:18:49 ID:???
むしろSQLってついてるのSQL ServerとMySQくらいじゃね?
Oracle,DB2,infomix,Sybase,HiRDB,Firebird
だぜ他は

10 :NAME IS NULL:2008/10/20(月) 07:36:33 ID:???
>>9
OracleとかDB2ってSQLより歴史あるじゃん。って、DB2がSQLの始まりか。
で、10年ぐらい前なら「問い合わせ言語にSQLを採用」って文句があったりして
でも今なら、わざわざことわりを入れなくてもって意味。

11 :NAME IS NULL:2008/10/20(月) 07:41:21 ID:???
ダイソー風
ザ・データベース

ソースネクスト風
驚速データベース

小林製薬風
データベース置くだけ

12 :NAME IS NULL:2008/10/20(月) 08:52:27 ID:???
むかしSQLを勉強しようと思って
PostgreSQLて名前が怪しそうに思えて
MySQLで勉強始めた俺が居ます

13 :NAME IS NULL:2008/10/20(月) 10:01:02 ID:???
>>11 ワロタ

14 :NAME IS NULL:2008/10/20(月) 10:05:44 ID:???
>>11
データベース置くだけに一票。
でもカスタマイズ出来無そうw

15 :NAME IS NULL:2008/10/20(月) 16:09:02 ID:???
なんだか、名前の話ばかりで、機能や設定・保守にかかる手間の
話がないようですが、ここにいらっしゃる方たちが経験的に思った
「他と比べてPostgreSQLはこうだと思った」という意見を
聞きたいです。良いところ、悪いところ含めてお願い致します。

16 :NAME IS NULL:2008/10/20(月) 16:34:55 ID:???
前スレまでいっぱいあったじゃない

Oracleと較べてだけど、Linuxで使うには手軽、学習コスト少ない、
webの情報が多いのはいい。でもエンタープライズ系は情報少ないし、
使ってる人も少ないんだろうなって思う。そもそもキャッシュ2GB以上
設定しても性能が上がらないとかちょっと・・・って感じ。
突然死してデータ壊れたときにチェックポイントとアーカイブログから
データ復活させる方法とかOracleならサポートに聞けば一発だけど
Postgresだと「できるの?できないの?自分で調べろって?復旧予定時刻が
予測できません。」ってなる。だから定期バックアップとってれば
なんとかなるようなシステムでしか使わない。

データ復活の話はあくまで例で実際には壊れたことないんだけどね。

17 :NAME IS NULL:2008/10/20(月) 17:06:38 ID:???
エンタープライズってな話が出てきたので便乗質問。

前スレで質問してた人も居たpgpool-IIについてなんだけど、仕事で導入してる人って
どれぐらい居る?

今色々調べえてるんだけど、レプリケーションモードでSELECTを負荷分散させると、
待機系ノードの切り離しってノードダウン時しかない気がするんだけど・・・
無理やりINSERTで各ノード間でエラーを発生させると以下の様なメッセージが出る。

ERROR: pgpool detected difference of the number of update tuples
HINT: check data consistency between master and other db node

もう更新件数ずれてるって解ってるんだからスレーブ切り離してくれても良いのに。
replication_stop_on_mismatch っていうパラメータもSELECT負荷分散しない場合のみ
しか有効にならない(意味がない)っぽい。

色々ググったけど、公式READMEでも突っ込んだ内容が見つからない。
もう少し「出来る」「出来ない」を突っ込んで書いて貰えたほうがいいと思うんだけどな。

18 :NAME IS NULL:2008/10/20(月) 17:15:07 ID:???
仕事の質問2chでするなよ
MLで聞けば即答だろそんなもの

19 :NAME IS NULL:2008/10/20(月) 17:20:37 ID:???
MLは気軽に質問しづらいんだな

20 :NAME IS NULL:2008/10/20(月) 19:46:37 ID:???
MS SQL Server と比較してはどうかな。こんなもんかな?

・GUIツールが無い分、コマンドを覚えないといけない。
SQLを書くようにした方が、コマンドの履歴が残るので良いという意見もあるが。
・準備や学習としては低価格。
・稼動実績的には負ける。
・VBやAccessなどMSの製品との組み合わせではパフォーマンス的にやや劣る。

21 :NAME IS NULL:2008/10/20(月) 21:01:09 ID:???
全部間違いだと流石に釣りに見える

22 :NAME IS NULL:2008/10/20(月) 21:20:56 ID:???
MSSQLと比べて、
・GUIツールの機能が貧弱
・無料
・対応OSが豊富

印象としてはたくさん使われてそう
パフォーマンスはよく知りませんが、
Windows+MSSQL(未調整) >>>>>> Windows+Oracle(社員チューニング)
というケースもあるので、調整次第、環境次第。

23 :NAME IS NULL:2008/10/21(火) 00:20:09 ID:???
こんなスレで言うのもナンだが、MSSQLは割と良い
元々Microsoftが作ったわけじゃないけど今はMicrosoftが売ってるソフトは出来が良い法則だな
まぁ、シーケンス周りとか、ストアドファンクション、テーブルの継承とかそこらへんの便利さでポスグレの方を好んで使ってるけどさ

24 :NAME IS NULL:2008/10/21(火) 02:41:10 ID:???
MSが手に入れてすぐのバージョンがひどかったらしいという話は聞いたことあるなあ。
PostgreSQLはバキュームしなくてよくなったというのがすごく大きいと思う。

25 :NAME IS NULL:2008/10/21(火) 11:54:35 ID:???
>>21
全部間違いって何処が間違い?
PostgreSQLを主語にして読むんだろ?

26 :NAME IS NULL:2008/10/21(火) 12:01:26 ID:???
俺もどれも微妙に間違ってるように見えるがw

27 :NAME IS NULL:2008/10/21(火) 12:44:54 ID:???
・GUIツールが無い分、コマンドを覚えないといけない。
→GUIツールある

・準備や学習としては低価格。
→低価格じゃなく無料
 準備や学習に限らず実運用でも無料

・稼動実績的には負ける。
→SQL Serverのシェアが高いのはエンタプライズ分野に限った話
 中小サーバやレンタルサーバなども含めると
 稼働台数としてはオープンソース系DBの方が数が勝る

・VBやAccessなどMSの製品との組み合わせではパフォーマンス的にやや劣る。
→場合による

28 :NAME IS NULL:2008/10/21(火) 13:13:21 ID:???
>>25
>>22

29 :NAME IS NULL:2008/10/21(火) 13:16:19 ID:???
バキュームしなくて良くなったって
autoでしてるだけじゃね?

30 :NAME IS NULL:2008/10/21(火) 13:26:53 ID:???
>>29
ということはしなくて良いじゃん?

31 :NAME IS NULL:2008/10/21(火) 14:36:13 ID:???
日時バッチで大量にレコード削除とかすると勝手にvacuumが
走ってしまってバッチ処理完了が遅くなる。そういう場合は
autoをきってバッチ完了後に手動でやるようにセットしておいた方が効率的。
postgresqをちゃんと運用する上でvacuumがどういう処理をしていて
どういう風に使うと効率的なのかはきちんと把握していないと駄目だと思う。
max_fsm_pageの設定とかもあるし。

データサイズが1GB未満のシステムなら誤差の範囲でおさまるかもしれんが。

32 :NAME IS NULL:2008/10/21(火) 14:38:41 ID:???
そこでSSDですよ
爆速Random I/OでVACUUMも軽々

いやまだ試してませんが

33 :NAME IS NULL:2008/10/21(火) 14:44:57 ID:???
うちはRAMディスクに入れて驚速postgresqlにしてるよ。

34 :NAME IS NULL:2008/10/21(火) 14:50:16 ID:???
>>33
HDD等への待避とかどうしてる?
電断に備えてどういうことして居るのか詳しく教えて貰えると嬉しい。

35 :NAME IS NULL:2008/10/21(火) 15:06:28 ID:???
>>34
CRONで普通に12時間毎のバックアップと、電源断信号でのバックアップ。

36 :NAME IS NULL:2008/10/21(火) 17:25:18 ID:???
>>32
コンシューマ向けの2.5'/1.8'SSDは業務で使うにはまだ早いだろ。
信頼性評価でてないし、HDDより書き換え回数が少ない物を
業務用DBみたいに頻繁に書き込む奴に使うのはギャンブル。
業務用SSDは桁が2桁違うしな。

>>33
UPSと組み合わせてこれはいいかもしんない。
うちも検討しよう

37 :NAME IS NULL:2008/10/21(火) 22:26:54 ID:tlBq0Nw0
C#とPostgreSQLに詳しい方に質問させてください
Npgsqlを使ってPostgreSQLにアクセスするプログラムを作りました
しかし、Npgsqlのライセンスがいまいちよくわかりません
ダウンロードページにはBSDと書いてありますが、GPLと紹介しているページもあります
また、NpgsqlにもMono関係のライブラリが入り込んでいるように見えます
Npgsqlの正確なライセンスの情報を教えていただけると助かります
もしくは、Npgsql以外のPostgreSQLドライバを紹介していただけ無いでしょうか
よろしくお願いいたします

38 :NAME IS NULL:2008/10/21(火) 23:50:39 ID:???
それこそMLに投げればすぐ答えが出る質問をなぜまた過疎板に投げるか
ライセンス気にしてるんだから義務だろ?
ここでもし問題ないよって言われて実は問題あったらどうすんの?
上司に2chでそう言われたとでも言い訳するのか?

39 :NAME IS NULL:2008/10/22(水) 00:00:54 ID:???
まぁML登録すんのもめんどーだし、
カルーイ気持ちで質問したんじゃないのかな
気に食わないんだったらスルーでいんじゃーの

40 :NAME IS NULL:2008/10/22(水) 01:05:05 ID:???
軽〜い気持ちで会社倒産とかな
スルーでいいよw

41 :NAME IS NULL:2008/10/22(水) 01:07:19 ID:???
優しいおじさんがマジレスしちゃうけど
お前はどこからNpgsqlのファイルを落としたのかと問いたい
このページ見て解らないなら技術者辞めた方がいい
http://pgfoundry.org/projects/npgsql/

42 :NAME IS NULL:2008/10/24(金) 11:04:49 ID:???
他のDBとの比較の話が出てきていたので、質問です。
開発用のツールについてはどうでしょうか?
SQLの実行効率の確認のやりやすさとか、試験用、本番用の
相互移行がやりやすいとかいろいろあるかと思いますが。

あまりいろいろなDBを触ったことが無い私としては、GUIに力を
入れているMS製品がツール方面では強いのかなと思えるのですが。

43 :NAME IS NULL:2008/10/24(金) 12:12:41 ID:???
DBに依存しない強力な開発ツールがあればいいんだけどねえ。

俺が今まで使った中ではSI Object Browerが一番使いやすかったんだけど、
あれはOracleにしか対応してない。ストアドのステップ実行とかもできて
便利。Oracle標準のツールでもできるんだけど重いし画面も
わかりづらいんだよね

44 :NAME IS NULL:2008/10/24(金) 21:59:22 ID:???
Object BrowerがOracleにしか対応してないとか何億年前の話だよ

45 :NAME IS NULL:2008/10/24(金) 22:01:34 ID:???
あごめんERの方と勘違いしてたわ
ってか普通にPgAdmin使えばOB以上のことできるけどね

46 :NAME IS NULL:2008/10/25(土) 05:03:18 ID:???
Wndows版とかインストールするとついてくるやつ?
ダンプとかは楽だと思ったけど、複数接続の管理とか
SDI なウィンドウとか、いまいち使い勝手が微妙なんだよね。
Object Browserに慣れちゃってるせいもあるけど。
Postgresの時はさくさく動くCSEを未だに使ってます。
Vistaにしたら右上のフォルダツリーがうまく動かないけど

47 :NAME IS NULL:2008/10/25(土) 05:14:20 ID:???
複数接続の管理とかCSEの100倍楽に思うけど

48 :NAME IS NULL:2008/10/25(土) 07:33:04 ID:???
業務上複数のDBにぽこぽこ繋ぐので、SDIだとどのウィンドウが
どこの接続かわかりづらいんだよね。
いやよく出来てると思うけど。

Eclipseで開発してるからプラグインであると便利なんだけど、
DBViewerプラグインてインデックスとかシーケンスとか
見れないんだよなあ

49 :NAME IS NULL:2008/10/25(土) 09:54:34 ID:???
不便だと思うなら自分で作れば良いだけ。
それがオープンソースの思想。

50 :NAME IS NULL:2008/10/26(日) 20:37:51 ID:TPXcwIfN
phpとポスグレがつながらなくて困っているのですが、

どなたか、3歳の子供でもわかるくらい、丁寧に説明してくれている

サイト、知りませんか?

まじで、困ってます。どうぞ宜しくです。

51 :NAME IS NULL:2008/10/26(日) 21:58:34 ID:???
どうつながらないのか
構成とか

52 :NAME IS NULL:2008/10/26(日) 23:06:20 ID:???
ガムテープなら結構粘着力あるから繋がるんじゃないかな?
重ね貼りするなら布テープの方がいいかも

53 :NAME IS NULL:2008/10/27(月) 00:14:07 ID:???
他のに比べると、PostgreSQLはオープンソース思想が強いから
そういうところを障害だという状況の場合は、避けたほうが
良いのかもね。
逆に、製品思想が強い傾向にあるのが、MSとOracleかな。
MySQLはPostreSQLよりかな?

54 :NAME IS NULL:2008/10/27(月) 07:56:59 ID:???
製品の差を感じる以前の問題じゃないのか?

55 :NAME IS NULL:2008/10/27(月) 08:48:15 ID:???
製品思想ってそもそもなんだ

56 :NAME IS NULL:2008/10/27(月) 09:28:41 ID:???
>>53
オープンソースに向かってオープンソース思想が強い
製品に向かって製品思想が強いってさぁ・・・

57 :NAME IS NULL:2008/10/27(月) 11:08:31 ID:???
1行目を読んだ時は「他のオープンソースに較べて」ってことかなあと
思ったけど、商用製品に向かって製品思想がつおいっていうのを見て
レスする気が失せた

でも>>53の人気に嫉妬して書いてしまった

58 :NAME IS NULL:2008/10/27(月) 18:22:53 ID:???
>>50
そのクソったれなレス具合を見ると多分PHPのPostgreSQL用のモジュールもしくは
がPDOが使えてないだけだな!

59 :NAME IS NULL:2008/10/27(月) 18:38:34 ID:???
PostgreSQL×PHPで作るなんとかって本買ってやれよ
古いけど

60 :NAME IS NULL:2008/10/27(月) 18:49:27 ID:???
PHPでひっかかってるのか、PostgreSQLでひっかかってるのか
ネットワークやセキュリティ関連でひっかかってるのかわからんとなあ

61 :NAME IS NULL:2008/10/27(月) 19:00:20 ID:???
日本語力でだろどう考えても

62 :NAME IS NULL:2008/10/28(火) 00:14:22 ID:???
http://ftp3.jp.postgresql.org/pub/db/postgresql/binary/v8.3.4/win32/postgresql-8.3.4-1.zip
このリンクがFORBIDDENになるの俺だけ?

63 :NAME IS NULL:2008/10/28(火) 00:37:14 ID:???
じゃあftp2かSRAから落とせば?

64 :NAME IS NULL:2008/10/28(火) 00:44:00 ID:???
どこからそのURLを得たのか知らんが、プロトコルをftpに指定しなさいな。
もしくはここから好きなのを選びなさいな。
http://wwwmaster.postgresql.org/download/mirrors-ftp?file=%2Fbinary%2Fv8.3.4%2Fwin32%2Fpostgresql-8.3.4-1.zip

65 :NAME IS NULL:2008/10/28(火) 13:27:47 ID:qPqD78hF
plpgsqlの関数に、行型を渡す事は出来たのですが、
そこからさらに同じ行型の引数を取る関数に、その引数を又渡しして
呼ぶ事ができません。文法的な事だと思うのですが、
どうやるか、どなたか知りませんか?

66 :NAME IS NULL:2008/10/29(水) 06:36:40 ID:???
>>65
状況がよくわからんが、引数の型を record ではなく、
具体的なテーブル名にしてみてはいかが?

67 :NAME IS NULL:2008/10/29(水) 11:13:48 ID:zttMKq35
>>66
具体的なテーブル名でやってます。

-- テーブル定義
create table test_tbl (a int);

-- 関数定義
create or replace function func_test(test_tbl) returns int as '
begin
return func_test2($1);
end;
' language 'plpgsql';

create or replace function func_test2(test_tbl) returns int as '
begin
return $1.a;
end;
' language 'plpgsql';

-- 呼び出し
select func_test(test_tbl.*) from test_tbl;

これで、こんなエラーが出る感じです。

ERROR: there is no parameter $1
CONTEXT: PL/pgSQL function "func_test" line 2 at return

68 :NAME IS NULL:2008/10/29(水) 11:15:07 ID:???
なんで最初からソース貼らなかったんだ

69 :NAME IS NULL:2008/10/29(水) 11:24:27 ID:???
>>67
バージョンいくつ?
うちで8.1.4と8.3.1で、それそのままやってもエラーでないけど。

70 :NAME IS NULL:2008/10/29(水) 13:25:39 ID:???
バージョンはPostgres95という奴です
数字の部分が一番大きいのが最新版と聞いたのでこれにしました

71 :NAME IS NULL:2008/10/29(水) 15:43:55 ID:zttMKq35
70は偽。俺が65です。
バージョンは7.4.6、Linuxです。

72 :NAME IS NULL:2008/10/29(水) 22:43:53 ID:???
>>71
最新版は8.3.4だよ

>>69はエラーでないって言ってくれてるから8.3.4入れなおしてみたら?

73 :NAME IS NULL:2008/10/30(木) 00:47:59 ID:???
適当に入れ直せる環境ならいいんだけどね

74 :NAME IS NULL:2008/10/30(木) 01:37:32 ID:???
逆にこっちで7.xで試そうと思ってもちょっとめんどうだな

75 :NAME IS NULL:2008/10/30(木) 01:40:15 ID:???
せめて7.4.22にしろよ
.6とか検証しようないわ

76 :NAME IS NULL:2008/10/30(木) 07:57:53 ID:???
そろそろ7.4って公式サポート切れ(5年)なんだが、
今から7.4で開発ってまずくないか?

77 :65:2008/10/30(木) 10:54:46 ID:???
既存システムの改修なのでバージョンupは難しいです。
8の環境が手元に無いのですが、7と8では結構文法が違うみたいですね。
ほんとしょーもない文法的な事だと思うんですけど、
諦めつつあります…

78 :NAME IS NULL:2008/10/30(木) 12:43:50 ID:???
しょうもないと思うならなんで本家にコミットしなかったのか

79 :NAME IS NULL:2008/10/30(木) 12:52:54 ID:???
そうじゃなくて差の話でしょ?
たぶん代替手段はあるとは思うけど・・・

80 :65:2008/10/30(木) 13:05:49 ID:???
>>78
よくやる様な事なんで誰か知っているかなーと思い、
気軽な2chにポストしました。

>>79
ストアドを使わないという事ですか?
その方向で考えてます。今回はバージョンが低かったと。

原理的には出来る事のはずなので、8で出来るなら
7にも方法があるとは思うのですが、資料が無くてお手上げです。

81 :NAME IS NULL:2008/10/30(木) 13:07:39 ID:???
もしやそれって7のマニュアルすら探し出せないと言うこと?

82 :65:2008/10/30(木) 17:10:34 ID:???
>>81
7のマニュアルは見ていますが(もちろん8も)、
plpgsqlの解説は元々少ない上に、ほとんどプリミティブ型を使って
説明しているので、テーブル型につてはよく分からんのです。

83 :NAME IS NULL:2008/10/30(木) 17:14:45 ID:???
>>82
一旦、別の変数に代入してから渡したらどうかな?

84 :65:2008/10/31(金) 10:21:46 ID:???
>>83
create or replace function func_test(test_tbl) returns int as '
declare
t_row test_tbl;
begin
t_row := $1;
return func_test2(t_row);
end;
' language 'plpgsql';

で、以下のエラーが出ます。

ERROR: syntax error at or near "t_row"
CONTEXT: compile of PL/pgSQL function "f_test_summul" near line 4

代入の構文自体が間違っているのでしょうか?
プリミティブではこれでよいはずなのですが、行型はどうにも…。



85 :NAME IS NULL:2008/10/31(金) 11:29:41 ID:???
いや、それをやるなら
create or replace function func_test(test_tbl) returns int as '
DECLARE
in_t ALIAS FOR $1;
begin
だろうけど、、、

86 :65:2008/10/31(金) 12:52:30 ID:???
>>85
それは代入ではなくてエイリアスですね。
コメント67の $1 が in_t に変わっただけのエラーが出ます。

87 :NAME IS NULL:2008/10/31(金) 13:56:40 ID:???
そう?
うちで7.4.xで試したけど、明らかに>>67とは違うエラーになったよ。

88 :65:2008/10/31(金) 14:51:53 ID:???
当方では
ERROR: column "in_t" does not exist
と出ます。
どちらも「識別子が見つかりません」的な意味じゃないでしょうか。

89 :NAME IS NULL:2008/10/31(金) 15:04:12 ID:???
全然違うだろ、それをヒントに対応できるべ

90 :65:2008/10/31(金) 15:07:37 ID:???
>>89
同じにしか思えませんw
識別子が見つからない場合で、$付きならparameter、
.付きならrelation、そうでなければcolumnにしているだけでは?

91 :NAME IS NULL:2008/10/31(金) 22:06:36 ID:???
自分も7.4で試してみたが、確かに65の言うとおりになるわ。
7.4だと未対応なんだと思う。おとなしくプリミティブに分解するしかないかも。

92 :NAME IS NULL:2008/11/02(日) 09:12:18 ID:???
初めまして。
8.3.4を学習用にインストールしてみました。OSはWindows2000SP4です。
pgAdminVから'任意のSQLクエリーを実行'画面でSQLを打ち込んでみると
日本語のところが'□□□'のように表示されます。また、メッセージタブも□□・・・
と出力されます。インストール時のEncoding(UTF8)、Client(S-JIS)でした。
またpgAdminVの[ファイル]-[オプション]-[全体]-[ユーザ言語]は(ja_JP)日本にしております。
文字化けの解決方法はありますでしょうか。

93 :NAME IS NULL:2008/11/02(日) 09:29:37 ID:???
何もしなくても文字化けしたことないからわからん
逆に何か余計なことしたんじゃないのか

94 :NAME IS NULL:2008/11/02(日) 10:56:09 ID:???
フォント変えたらいいんじゃない?

95 :NAME IS NULL:2008/11/02(日) 12:29:01 ID:???
>>92
コマンドプロンプトからpsqlで実行してたらどうなるの?
多分pgAdminが原因だとは思うけど。
pgAdmin使ったことないからわからん

96 :NAME IS NULL:2008/11/04(火) 07:23:10 ID:asusX69j
v8.3.5 / v8.2.11 / v8.1.15 / v8.0.19 / v7.4.23
あんまり大きな修正は無いように見える。GiSTくらいか?
Update time zone in Argentina, Brazil, Mauritius, Syria が真のリリース理由かも。

97 :NAME IS NULL:2008/11/04(火) 08:28:19 ID:???
8.3.4はやけに短命だったな。

98 :65:2008/11/04(火) 11:31:10 ID:???
>>91
試していただきありがとうございます。どうもそうみたいですね。

全くの推測ですが、8から引数にOUT指定が出来るようになった事と
関係があるのではないでしょうか。OUT指定とは即ち参照渡しであり、
また行型はサイズが大きいので参照渡ししか許されない、とすると、
言語的に値渡ししかできない7では、行型の又渡しが出来ないのも
納得できる気がします。

まあ9割方外してるでしょうけど。

99 :NAME IS NULL:2008/11/06(木) 20:40:42 ID:???
しまった。
毎日300クライアントのアクセス(Delete, Insert)でVACUUMせずに放置してたら
いつの間にかDiskFullに。

やっちまった。orz


100 :NAME IS NULL:2008/11/06(木) 21:17:59 ID:???
バキュったところで時間の問題だろそんなの

101 :NAME IS NULL:2008/11/06(木) 21:25:21 ID:???
>>99
cron回しとけば良いのに。

102 :99:2008/11/06(木) 21:42:56 ID:???
データ的には1クライアント/8KBにも満たないテキストだったのと、
テスト運用環境だったので2ヶ月近く放置してましたがな。

>>100
まぁDiskも8GBのうち空きが33%とかいうテスト環境なんで。
時間の問題ですね。

>>101
さっき登録しました。

連休明けたら、アーッ! みたいなね。orz
本運用じゃなくて良かった。
とりあえずレポート取って容量の見積もり算出するかな…。


103 :NAME IS NULL:2008/11/06(木) 21:51:22 ID:???
見積もりで思い出したけどOracleみたいな見積もり出せって言われることあるんだけど
あんまり意味ないよね実際

104 :NAME IS NULL:2008/11/06(木) 21:54:40 ID:???
ソフトにかかる分ハードウェアに乗っけれるから、そーいう風でいいんじゃね?
とか言ってみるテスト。


105 :NAME IS NULL:2008/11/06(木) 22:23:01 ID:???
見積もりって容量見積もりのことでしょ?
PostgreSQLは物理ディスク空いてりゃそれでいいから、
必死に工数掛けて見積もりする意味はあんまないね。
昔のOracleだと領域作ってアタッチしなきゃならんかったから必須だったけど。

106 :NAME IS NULL:2008/11/07(金) 00:21:05 ID:???
すみませんが質問です。

pgAdminIIIなんですが、GUI上で、一旦定義したテーブルの列を修正・追加
したり、順番を入れ替えることは可能なのでしょうか。

右クリックから定義を保存してエディタでCREATE文を書き換え、テーブルを
削除してから定義を実行すればテーブルを作り直せるというのはわかりました。

なんというか、MS-ACCESSみたいに簡便になるとよいのですが。

107 :NAME IS NULL:2008/11/07(金) 00:45:33 ID:???
ALTER TABLE ADD COLUMN と書くだけなんだが、
それでもマウスで操作できないと嫌かい?

108 :NAME IS NULL:2008/11/07(金) 03:06:04 ID:???
順番入れかわらんだろそれじゃ
実は管理テーブル加工すれば順序変更できるけどお勧めできない

109 :NAME IS NULL:2008/11/07(金) 06:07:33 ID:???
列の順番を気にするのは人間だけだしDBMSとしては別にどうでもいいよという流れだからなあ。
MS製品は順番変えられるので人間に優しいね。

postgresだとテーブルダンプして、順番変えて、食わせてる。
つまり、同じくDROP→CREATEやってる。

110 :NAME IS NULL:2008/11/07(金) 14:43:31 ID:???
フレームワークの開発ツールだとあるんだけどね
S2JDBC-Genとか
コマンドライン操作でJava知らないと使えないけど

111 :NAME IS NULL:2008/11/07(金) 21:10:41 ID:???
フレームワークの開発ツールって壮大だなあ。

それはさておき、結局DROP CREATEをやってるようにしか見えたんだけど何が違うの?

112 :NAME IS NULL:2008/11/07(金) 23:28:38 ID:???
列を入れ替えたVIEWを噛ませば良いだけの話。

113 :NAME IS NULL:2008/11/07(金) 23:33:27 ID:???
>>111
まぁバックアップ→DROP→CREATE→リストアを自動でやるだけなんだけどね
目的が達成できるなら中身はどうでもいい気がするけど

114 :NAME IS NULL:2008/11/09(日) 01:45:06 ID:???
>>100の「バキュった」って何か良いね。

バキュる
バキュり
バキュった
バキュられた
バキューン

今度仕事で使わせてもらう。
まぁ、使ってるのは原則8.3系だから意図的にバキュる事はあんまり
ないんだけど

115 :NAME IS NULL:2008/11/09(日) 04:05:18 ID:???
バキュられたって言われたら鉄壁ガードされてるみたい

116 :NAME IS NULL:2008/11/09(日) 16:13:26 ID:???
バキュラかw

117 :NAME IS NULL:2008/11/09(日) 22:33:55 ID:???
胸がバキュバキュしちゃう☆

118 :NAME IS NULL:2008/11/10(月) 17:52:33 ID:WZ408Xm8
質問です。
postgres7.2.4環境です。

顧客IDと日付をキーとして、一日一顧客一レコードで管理しているマスタがあります。
データ構造のイメージとしてはタイムカードのような感じです。
日付マスタという物は存在せず、データは管理画面で日付情報と共に作成指示をした時点で、
顧客IDと日付のキーで挿入されます。

上記前提で、任意の顧客が、タイムカードを押していない期間直近○日のリストを
得たいのですが、それにはどういう手法が考えられますでしょうか。

ニュアンス的には、
 SELECT 日付配列.日付 FROM (特定期間の日付配列)
 WHERE 日付配列.日付::date NOT IN (SELECT マスタ.date::date FROM マスタ WHERE 顧客ID=1)
 ORDER BY 日付配列.日付 DESC;
みたいな事がしたいのですが…。

例えば、postgresのsql中で配列を定義して、それをテーブルのように
扱うことは出来ないんでしょうか。
('2008-10-1'::date..'2008-12-31'::date みたいなイメージ)

または、何か方法がありましたらご教示ください。
宜しくお願いしますm(_ _)m

119 :NAME IS NULL:2008/11/10(月) 18:24:12 ID:???
>>118
> 例えば、postgresのsql中で配列を定義して、それをテーブルのように
> 扱うことは出来ないんでしょうか。
> ('2008-10-1'::date..'2008-12-31'::date みたいなイメージ)

generate_series関数を使う。
ex.) 2008-11-01から30日分
SELECT '2008-11-01'::DATE + (generate_series||' days')::INTERVAL FROM generate_series(0,29);

で、上で得た表からマスタ分をEXCEPTすりゃ桶なんじゃね。
SELECT * FROM
(SELECT '2008-11-01'::DATE + (generate_series||' days')::INTERVAL FROM generate_series(0,29)) AS T1
EXCEPT
(SELECT マスタ.date::DATE FROM マスタ WHERE 顧客ID=1) AS T2;

120 :118:2008/11/10(月) 20:43:28 ID:???
>>119
うぉぉ、ありがとうございます!
EXCEPTとかはじめて知りました…

121 :NAME IS NULL:2008/11/10(月) 22:08:53 ID:???
118はgenerate_seriesが7.2には無いことをまだ知らない…。

122 :119:2008/11/10(月) 23:45:15 ID:???
>>121
あー、そだっけw。
標準ではインストールされないけど、
connectbyの様に用意されてなかったかな。

123 :NAME IS NULL:2008/11/11(火) 11:30:27 ID:???
質問です。

select * from a_tbl join b_tbl on (条件1) where (条件2);
select * from (select * from a_tbl where (条件2)) T0 join b_tbl on (条件1);

条件2が a_tbl の列にしか関係しない場合、
後者の方が速度やメモリの面で有利でしょうか?

124 :118:2008/11/11(火) 18:34:54 ID:???
>>121-122
朝からサーバーのデータを壊してしまい、
夕方にやっと昨日の続きにとりかかれました…orz

generate_seriesの件、おっしゃるとおり素の7.2では使えないようです。
使えないかどうか調べてみて、進展があったら結果を書き込みますね。
ご教示ありがとうございました。

125 :NAME IS NULL:2008/11/11(火) 22:41:23 ID:???
7.4ならともかく7.2ならDBごとうpグレードしないと
コマンドが使えないレベルじゃないことがそのうち起こる可能性もある予感がするけど

126 :119:2008/11/11(火) 23:55:18 ID:???
7.x時代から連番生成関数を使ってた記憶が...
そういやそんな関数作ったんだっけ、と思い出した。
で、その関数ソースはどこへやったか出てこないが、
generate_seriesの簡易版でこんな感じ。

CREATE FUNCTION generate_serial(INTEGER,INTEGER) RETURNS SETOF INTEGER AS $$
DECLARE
startno alias for $1;
endno alias for $2;
cno INTEGER;
BEGIN
cno := startno;
LOOP
EXIT WHEN cno>endno;
RETURN NEXT cno;
cno := cno +1;
END LOOP;
RETURN;
END;
$$ LANGUAGE plpgsql;

7.2で動くかどうか知らないけど、とりあえず手元の8.3で確認済み。
細かい引数チェックとかしてないからね。

127 :NAME IS NULL:2008/11/12(水) 04:26:02 ID:???
>>123
select * from a_tbl join b_tbl on (条件1 AND 条件2);
こうしてるけど、それが効率的なのかどうかは知らない。
ここでそれの解をえられると何かとありがたいかも。

128 :NAME IS NULL:2008/11/12(水) 05:28:58 ID:???
>>123
バージョンによって違うと思うが、プランナやオプチマイザが賢いので
効率は同じだろう。
っていうか、EXPLAIN で調べりゃわかると思うが。

129 :NAME IS NULL:2008/11/12(水) 07:59:49 ID:???
>>123
まず間違いなく同じプランになっているはず。
このあたりは昔からPostgresは最適化をがんばってきてた。
条件を分けて与えるとか小賢しいことはせず、↓でよい。
select * from a_tbl, b_tbl where (条件1) and (条件2);


130 :123:2008/11/12(水) 12:58:16 ID:???
バージョン7.4にて explain で調べたところ、

select * from a_tbl join b_tbl on (条件1) where (条件2);
select * from (select * from a_tbl where (条件2)) T0 join b_tbl on (条件1);
select * from a_tbl join b_tbl on 条件1 and 条件2;
select * from a_tbl, b_tbl where 条件1 and 条件2;

上記のどれも同じプランになっていました。さすがpostgresですね。

実用としては、条件1のみが結合条件である事を明示するために、
1番目の書き方を使っていこうと思います。
(そうでない場合は当然3番目や4番目の書き方になるでしょう。)

>>127-129さん、ありがとうございました。

131 :NAME IS NULL:2008/11/12(水) 17:32:41 ID:H/r/LysL
ODBCマネージャーを使用して接続接続したいと考えているんですが、
PostgreSQLのconfigureを見るとVer.7.3以降は未対応なんでしょうか?
7.2.8をDLしてmakeするとエラーで止まってしまいます。
ODBC接続用のライブラリはどこから入手されてますか?
(クロス環境なのでソースからのmake必須で)
環境:
HOST機 RedHat9

./configure --enable-odbc --with-unixodbc CC=〜
make clean
make
ODBC関連のコンパイルでヘッダー参照出来ず返ってこなくなる

132 :NAME IS NULL:2008/11/13(木) 07:58:49 ID:???
>>131こそ、どこから入手してるんだ?

133 :NAME IS NULL:2008/11/13(木) 10:15:50 ID:???
ttp://www.postgresql.org/ftp/odbc/versions/src/
ここから新しいのもっていっては?

134 :NAME IS NULL:2008/11/14(金) 01:54:52 ID:???
古いソースってことならここにたくさん。
ftp://ftp-archives.postgresql.org/pub/source/

135 :NAME IS NULL:2008/11/18(火) 19:44:56 ID:???
スキーマに対するGRANTについて教えてください。

あるスキーマに属する全てのテーブルに対して、SELECTのみ許可したいです。
将来そのスキーマにテーブルが追加されても自動的にその許可属性(SELECTのみ)を
持たせたいです。

調べたところ、スキーマに対するGRANTはCREATEとUSAGEしか付与できる権限が
ないようなので、SELECTのみ許可させるにはテーブル単位でGRANTするしか
なさそうで、困っています。

なにか良い方法はありますでしょうか?


136 :NAME IS NULL:2008/11/18(火) 21:15:48 ID:???
SELECT権限しかないユーザ作りゃええやん

137 :NAME IS NULL:2008/11/18(火) 23:26:33 ID:???
やりたいことはわからんではないが、自動的な権限の譲渡は危険すぎるな。
「テーブル一覧を取得してGRANTのSQLを作成し、文字列として返す」
みたいなSQLを書けば一括で処理できるかなぁ。


138 :NAME IS NULL:2008/11/19(水) 18:29:55 ID:???
>>136,137
教えていただき、ありがとうございました。


139 :NAME IS NULL:2008/11/19(水) 18:32:31 ID:???
pgAdminIII (Ver1.8.4)について教えてください。

pgAdminIIIでは、データベース or スキーマ or テーブル に、ログインロールの権限を
追加することはできないのでしょうか?

pgAdminIIIにて、データベース or スキーマ or テーブルのプロパティから「権限」タブを
選択し権限を設定しようとすると、権限ロールの欄は「public」しか選択
できません。
SQL文でやらなきゃダメなんでしょうか?


140 :NAME IS NULL:2008/11/19(水) 19:15:08 ID:???
ちょっとやってみたけど、
そこの権限はグループロールに対してだけできるみたいね。

141 :NAME IS NULL:2008/11/19(水) 20:14:23 ID:???
>>139
ウチがVer1.8.2なので、表記が違うかもしれないけど、以下をオンにすればできるはず。
ファイル→ オプション→設定項目ページの権限のためのユーザー表示



142 :NAME IS NULL:2008/11/20(木) 09:07:41 ID:???
>>141
できました!
ありがとうございました!

これで丸2日、悩んでました。


143 :NAME IS NULL:2008/11/22(土) 07:36:13 ID:???
pgpoolIIについて教えてください。

pgpoolIIをLinuxで動作させ、PostgreSQL本体は
LAN接続された2台のWindowsマシン上で動作させる
ことは可能でしょうか?


144 :NAME IS NULL:2008/11/22(土) 07:54:13 ID:???
>>143できる。

145 :NAME IS NULL:2008/11/22(土) 12:52:55 ID:???
>>144
ありがとう。やってみます。

146 :NAME IS NULL:2008/11/25(火) 23:31:19 ID:???
データベース名を変更するにはどうすれば良いでしょうか?

147 :NAME IS NULL:2008/11/25(火) 23:46:16 ID:???
すんません。
ALTER DATABASE name RENAME TO newname
で出来るんですね。

148 :NAME IS NULL:2008/11/26(水) 03:28:26 ID:???
>>147
実行すればいいじゃん

149 :NAME IS NULL:2008/11/26(水) 03:28:59 ID:???
>>147
すまん。疑問文じゃなかったw

150 :NAME IS NULL:2008/11/26(水) 22:59:32 ID:???
>>148
どんまいw

151 :NAME IS NULL:2008/12/01(月) 18:56:09 ID:???
すみません。
とあるテーブルで主キーをintegerにして、その値を自動的に振ってほしいと考えてます
できれば連番になっているとうれしいです
PostgreSQL(SQL)にはsequenceという文があるとのことですが、これをpgAdminIII上で設定することは可能でしょうか?
よろしくお願いいたします


152 :NAME IS NULL:2008/12/02(火) 01:43:58 ID:???
>>151
できますよ

153 :NAME IS NULL:2008/12/02(火) 02:22:52 ID:???
PostgreSQLの場合、serial型を指定すればsequenceの作成とデフォルト値の設定を自動でやってくれる。
pgAdmin3でもserial型を指定すれば桶。

154 :NAME IS NULL:2008/12/02(火) 07:58:01 ID:???
ありがとうございます
serial型指定してみます


155 :NAME IS NULL:2008/12/03(水) 22:25:37 ID:???
アプリケーションが取得したコネクションを一定期間後に無効にする設定は可能でしょうか?
たとえば、webアプリケーションがPostgreSQLへのコネクションをプールしていたとき、一定期間(1日とか)プールされているコネクションが利用されない場合は切断するなどの処理です
よろしくお願いいたします

156 :NAME IS NULL:2008/12/04(木) 07:08:19 ID:???
>>155
そのものズバリな機能は無い。そういう機能を持つコネクションプールを使うか、
pg_stat_activity.query_start を見て、1日以上昔の時刻になっている
バックエンドの pid へ kill -TERM するよう cron でも仕掛ける必要がある。

157 :NAME IS NULL:2008/12/04(木) 13:40:31 ID:???
webアプリケーションがコネクション切断するもんだろ普通
無効は使おうと思って繋いでるのにDB側の判断で勝手に切ったら
その後の最初のアクセスはエラーになるぞ

158 :NAME IS NULL:2008/12/04(木) 13:44:48 ID:???
>>155
pgpoolでどうでしょう?
切ったら終了じゃなくて、コネクションの再起動になるけど。

159 :NAME IS NULL:2008/12/04(木) 23:41:55 ID:???
レスありがとうございます
こんな質問した理由ですが、とある仕事でデータベースをMySQLからPostgreSQLにする必要が発生しました
先輩からMySQLは半日くらいで無駄なコネクション切断する機能があるから、Webアプリケーションのコネクションプーリングに細工して、コネクションが勝手に切断されていないかチェックする仕組みを入れていると言われました
そのため、PostgreSQLでも同じ仕組みを入れたかったのですが、よく考えたら、勝手に切断されないなら、コネクション監視をwebアプリでやるのはムダですが、別に動作はしますよね
ありがとうございました


160 :NAME IS NULL:2008/12/05(金) 00:48:02 ID:???
>MySQLは半日くらいで無駄なコネクション切断する機能があるから
なんだこの嘘情報は

161 :NAME IS NULL:2008/12/05(金) 00:52:08 ID:???
ひょっとしてコネクション閉じないでガンガン接続して
thread_cache_size越えちゃって破棄されてるだけじゃねーの?
確かデフォが1024だからそのシステムはだいたい半日で1024回使われてるってことで

162 :NAME IS NULL:2008/12/05(金) 01:26:07 ID:???
MySQLは8時間使用していないコネクション切るとかなかったけ?
別のDBだったかな?
なんかで、聞いた気がする

163 :NAME IS NULL:2008/12/05(金) 03:22:25 ID:???
>>160
8時間がデフォだから半日は嘘ってこと?
わかりにくいよ!

164 :NAME IS NULL:2008/12/05(金) 09:24:06 ID:???
MySQLはwait_timeoutというパラメータでアイドル切断される。
デフォルトは28,800秒=8時間。

165 :NAME IS NULL:2008/12/05(金) 19:36:08 ID:???
PHPでPostgreSQLを使っている方に質問させていただきます。
(このスレでいいのかな?)

bytea型のフィールドのデータを、PDO経由で取得できません。

下記のコードで、$bytea_data に正しいデータが入りません。
何故なのでしょうか?

 $sql = "select <bytea_field> from <bytea_tbl>";
 $sth = $dbh->prepare($sql);
 $sth->execute();
 $sth->bindColumn(1, $bytea_data, PDO::PARAM_LOB);
 $sth->fetch(PDO::FETCH_BOUND);

PHPはVer5.2.3, PostgreSQLは8.3.5です。
よろしくお願いします。


166 :NAME IS NULL:2008/12/05(金) 19:59:01 ID:???
直接pg_escape_bytea()とかして入れたのは読み書きできるの?

167 :NAME IS NULL:2008/12/05(金) 20:30:07 ID:???
>>166
あ、そうですね!
PDO経由じゃなくって直接関数を呼んで切り分けしないと、ですね。
会社でないと試せないので、月曜にやります。
結果は来週報告します。
(超早いレスなのに、申し訳ないです)

168 :NAME IS NULL:2008/12/05(金) 20:53:51 ID:???
>>164
MySQLはそんな仕組みがあるのか。
PostgreSQLとか他のDBもそういう仕組み準備してるのかな?

169 :NAME IS NULL:2008/12/07(日) 15:17:58 ID:???
http://kitagata.jp/manual/postgres/

170 :NAME IS NULL:2008/12/07(日) 17:57:10 ID:???
なにこのマニュアルの下にアフィリ入れて公開する悪質さは

171 :NAME IS NULL:2008/12/07(日) 18:06:39 ID:???
>>170
気持ち悪いけどライセンス守ってるんなら別に良いんじゃないの?

172 :NAME IS NULL:2008/12/08(月) 00:47:51 ID:???
2chの規約に違反してるな

173 :NAME IS NULL:2008/12/08(月) 00:52:00 ID:???
2chの規約って?

174 :NAME IS NULL:2008/12/08(月) 01:00:45 ID:???
広告目的の書き込み禁止

175 :NAME IS NULL:2008/12/08(月) 01:08:25 ID:???
この程度で広告目的とするのは酷だと思うが
閾値を設定するのが難しいからとりあえず全部違反って言うのが無難なのだろうな
明らかに住人じゃない人たちによるまとめサイト潰しが流行ってるのもそういう背景があるんだな

176 :NAME IS NULL:2008/12/08(月) 01:10:14 ID:???
>>170
別にアフィには見えないんだけどね。
どうしても気になるならこのサイト使わなきゃいいだけじゃん。

177 :NAME IS NULL:2008/12/08(月) 01:20:48 ID:???
アフィってなーに? わからないのは無視していんでしょ。

178 :NAME IS NULL:2008/12/08(月) 03:18:16 ID:???
>>176
アフィの善し悪しはともかくとしてアフィがあるのは誰でも見えると思うんだが…

179 :NAME IS NULL:2008/12/08(月) 09:28:52 ID:???
アフィには見えないな。
ただのリンクが付いてるだけにしか見えない。
何の意味があるのかワカランが、SEOなのか?

180 :NAME IS NULL:2008/12/08(月) 16:27:49 ID:???
広告じゃなくSEOだな
無料でサーバー貸す代わりにリンクを貼らせるタイプの


181 :NAME IS NULL:2008/12/08(月) 21:51:50 ID:70eIdlVB
列が文字列で出来ていて、この文字列の右側とかにある空白を削除して
列全体を更新したいのですが、以下の文は成功したように見えて、実際には
動きません。
テンポラリに一旦書き込んで、その結果を戻すしかないのでしょうか?

UPDATE table1 SET namae = rtrim(namae);

UPDATE xxx と、成功したかのようなメッセージが出るのですが、select
してみると、空白が右側にきっちり詰まってます。



182 :NAME IS NULL:2008/12/08(月) 22:17:36 ID:???
>>181
それでいけるはずだが。
デフォでは半角空白だけみたいなので、
[TAB]とか全角空白には効かないよ。

183 :NAME IS NULL:2008/12/08(月) 22:39:13 ID:???
列がvarcharじゃなくてcharとか

184 :NAME IS NULL:2008/12/08(月) 23:25:44 ID:???
XML型使ったことある人いますか!!


185 :181:2008/12/09(火) 05:12:54 ID:???
>>182-183 レスありがとうございます。

pgadminで見る限りは、半角スペースが詰まっているように見えるのですが。

>>183 その通り、charです。charだとrtrimが動かないのでしょうか?
元の文字列データは、タブ区切りのテキスト形式を読み込んだものです。

テーブルをvarcharで定義し直して、テキストを読み込むと、スペースが
後ろに付かないのは確認しています。

186 :183:2008/12/09(火) 05:51:13 ID:???
>>185
http://www.postgresql.jp/document/pg835doc/html/datatype-character.html
ということです。

187 :NAME IS NULL:2008/12/09(火) 06:53:21 ID:???
165です。

PHPでPostgreSQLのbytea型へのアクセスについて調査しましたので報告します。
(PHP 5.2.3 + PostgreSQL 8.3.1です)

1.PHPからpg_*関数を使用してbytea型のフィールドの読み書きは問題なく出来ます。
(書き込み時はpg_escape_byteaでエンコード、読み出し時はpg_unescape_byteaで
 デコードする必要あり)

2.PHPからPDO経由でbytea型のフィールドの読み書きは、下記の注意が必要です。

(1)書き込み(insert)時は、bindParamの第3引数にPARAM_LOBを指定する。
 ex. $sth->bindParam(":data", $data, PDO::PARAM_LOB);

(2)読み出し(select)時は、bindColumnの第3引数にPARAM_STRを指定する。
  ex. $sth->bindColumn("data", $data, PDO::PARAM_STR);

同じフィールドなのに読み書きでパラメタが違う・・・
なんかバグっぽいですね(^^;


188 :NAME IS NULL:2008/12/09(火) 07:28:00 ID:???
>>187
バグじゃなくて使い方を間違えてるだけ。
"data"列がBYTEA型の場合は

$sth->bindColumn("data", $rsrc, PDO::PARAM_LOB);
$sth->execute();
$data = stream_get_contents($rsrc);

で、ラージオブジェクトのOIDの場合は

$sth->bindColumn("data", $oid, PDO::PARAM_LOB);
$dbh->beginTransaction();
$sth->execute();
$data = stream_get_contents($dbh->pgsqlLOBOpen($oid, 'r'));
$dbh->commit();

が正解。

189 :181:2008/12/09(火) 07:28:48 ID:???
>>186 レスサンクス。
検索用途だと、charとvarcharではヒットするしないがあるのは知っています。

ただ、charになぜrtrimが効かないかが分からないのです。

190 :NAME IS NULL:2008/12/09(火) 07:39:31 ID:???
>>189
rtrimが利いた上で、その後でまた空白が追加されているんだよ。
char と varchar の使い分けくらいは考えようぜ。

191 :NAME IS NULL:2008/12/09(火) 07:43:01 ID:XC+middI
>>190 うわー、マジすか。
rtrimの後から空白を追加しているとは。目から鱗でした。

もっとも、今はvarcharで組み直してあるので、問題はないのですが。

ありがとうございます。

192 :NAME IS NULL:2008/12/09(火) 16:42:50 ID:???
キャストでもいい

193 :NAME IS NULL:2008/12/09(火) 19:21:28 ID:???
>>188
PDO::PARAM_LOBを指定すると、正しいデータを取得できないんですよ。
で、PDO::PARAM_STR ならOKでした。

ヘンでしょ?
だからバグっぽい・・・

194 :NAME IS NULL:2008/12/09(火) 20:09:35 ID:???
>>193
どう、正しいデータを取得できないの?

195 :NAME IS NULL:2008/12/09(火) 22:56:50 ID:???
>>9
sqlite のこともたまには思い出してあげてください。

196 :NAME IS NULL:2008/12/09(火) 23:17:49 ID:???
>>195
Accessは?ねぇAccessは?

197 :NAME IS NULL:2008/12/09(火) 23:19:42 ID:???
>>196
それ、SQLって入ってないから。。。
挙げられてないってだけなら桐とかFileMakerとか

198 :NAME IS NULL:2008/12/10(水) 05:28:36 ID:???
>>194
200KBくらいのバイナリデータでテストしたが、insertは正しくできるのだが、
selectではサイズが14バイトしか取得できなかったです。


199 :NAME IS NULL:2008/12/10(水) 07:53:46 ID:???
\0で途切れているとかいうオチでは。

200 :NAME IS NULL:2008/12/10(水) 10:16:18 ID:???
自分の頭がバグっぽいだけだな

201 :NAME IS NULL:2008/12/11(木) 00:26:09 ID:???
shared_bufferを3Gくらい割り当ててやろうと思ったら、2700MBあたりより上を
指定すると、shmatがCannot allocate memoryとか言ってきて起動できません。
shmmaxは充分とってあるし(これが原因だと別のエラー出るよね)、shmallもipcsでみると8Gある。

postgres8.2で、OSはRHELの3だったはず。総メモリは4G。
なんかあやしい設定箇所とかあったら教えてください。

202 :NAME IS NULL:2008/12/11(木) 00:29:42 ID:???
>>201
何ビットOS??

203 :201:2008/12/11(木) 00:31:24 ID:???
うお、レス早、thx
32ビットです。

204 :NAME IS NULL:2008/12/11(木) 00:47:10 ID:???
ほかのプロセスがすでに残りを予約してたりしない?

205 :NAME IS NULL:2008/12/11(木) 00:58:18 ID:???
Linux 32bitの仮想メモリ空間ってユーザ3GB、カーネル1GBだから
そのぐらいで限界だよ。
あんまりぎりぎりを狙うと運用中に落ちちゃうぞ

206 :201:2008/12/11(木) 01:03:14 ID:???
うーんと、ipcs -mででてくるのを全部足しても約2750M。
shmmaxは3705032704だから…約3500M。

と、>>205ありがとう! 不勉強ですまん…。
OS制限じゃしょうがないので少し下げて遊び持たせます。
やっぱ64bitかー。

207 :NAME IS NULL:2008/12/11(木) 05:13:26 ID:???
1つのプロセスに2GBメモリ使わせたい場合は、64bit必須と考えといたほうがいい。

208 :NAME IS NULL:2008/12/11(木) 07:40:18 ID:???
PAEには対応してないしな。

209 :NAME IS NULL:2008/12/11(木) 12:53:12 ID:???
RHEL3のころのカーネルってPAE対応してなかったの?

210 :NAME IS NULL:2008/12/11(木) 12:56:40 ID:???
PAEカーネルなんて遅くて使えるかよ
DB鯖なんて特に致命的だよあんなの
CPUを予定の倍くらい早いのに替える覚悟じゃないと無理

211 :NAME IS NULL:2008/12/11(木) 14:08:16 ID:???
やっぱsparc

212 :NAME IS NULL:2008/12/11(木) 16:03:38 ID:???
2.6になるまでSMPカーネルですら微妙だしなLinuxは

213 :NAME IS NULL:2008/12/11(木) 16:14:32 ID:???
早い遅いじゃなくて、対応してるかどうかなんだけど

214 :NAME IS NULL:2008/12/11(木) 16:18:06 ID:q9vn8l9s
\timingをONにしたときに表示される時間と、EXPLAIN ANALYZEで表示される
時間の値の違いについて、分かる方いらっしゃいますか?

215 :NAME IS NULL:2008/12/11(木) 17:17:48 ID:???
日毎にレコードがどんどん増えていくようなデータをPostgreSQLで管理しています。
古いデータは見たいけど、運用中のDBに昔のデータも残しておくとパフォーマンス的にもったいない気がしました。
そこで、古いデータは古いデータとして別のDBに移そうと思っています。

しかし、PostgreSQLでは別のDB(同じサーバー内の別DB)にデータを移動する方法がわかりません。
# MySQLでは (データベース名).(テーブル名)で参照できる

INSERT INTO tmp_terminals SELECT * FROM (別のデータベース名).terminals WHERE 〜〜〜
みたいなことをしたい場合はどうしたらいいでしょうか?

216 :NAME IS NULL:2008/12/11(木) 17:44:20 ID:???
>>215
よほど変なことをしていない限り、DBサイズが大きくなっても
処理時間はリニアに増えていくわけじゃないぞ。

217 :NAME IS NULL:2008/12/11(木) 17:52:25 ID:???
>>215
自分は使ったことないけど、dblink は?

218 :NAME IS NULL:2008/12/11(木) 17:58:35 ID:???
>>215
普通では出来ないけど、なんかを使えば出来るみたいなのがあった気が...。

で、同じ鯖ないならDB別けせずにスキーマだけ別けておいた方がいいんじゃね。
それこそ、
INSERT INTO (バックアップ用スキーマ).tmp_terminals SELECT * FROM (本番スキーマ/public).terminals WHERE 〜〜〜
みたいなのが出来るはず。

219 :NAME IS NULL:2008/12/11(木) 21:54:58 ID:???
nice!

220 :NAME IS NULL:2008/12/11(木) 22:11:18 ID:???
単に dump & reload すればいいんじゃないの?

221 :NAME IS NULL:2008/12/12(金) 08:32:56 ID:???
よdblink

222 :215:2008/12/12(金) 10:36:37 ID:???
ありがとうございます。アドバイスを元に調べてみます。

223 :NAME IS NULL:2008/12/12(金) 11:44:03 ID:???
便乗質問だが、 >>215 の件はテーブルの継承使えないの?

【PostgreSQLウォッチ】第19回 ベータ・リリースを間近に控えたPostgreSQL 8.1
ttp://itpro.nikkeibp.co.jp/members/ITPro/oss/20050722/165140/?ST=oss&P=2
の下半分。
HDDはしっかり食いますが。


224 :NAME IS NULL:2008/12/12(金) 14:48:05 ID:???
日本PostgreSQLユーザ会の鯖落ちてる?

225 :NAME IS NULL:2008/12/12(金) 18:09:18 ID:???
そうみたいだ

226 :NAME IS NULL:2008/12/12(金) 18:37:35 ID:???
あーあポスグレ採用し等と思ったけど緊急だからMySQLにするかな
公式落ちてるんじゃ駄目だよね
こういう所がポスグレってだめだよなあ

227 :NAME IS NULL:2008/12/12(金) 18:58:53 ID:???
226は自分は優秀な釣り師と思っている

228 :NAME IS NULL:2008/12/12(金) 21:23:18 ID:???
>>223
継承のパーティショニング的な使い方だな。
VACUUM の必要性を気にしないんだったら良い選択だと思う。

229 :NAME IS NULL:2008/12/15(月) 05:35:40 ID:???
公式はhttp://www.postgresql.org/じゃないのか?
「日本PostgreSQLユーザ会」は名前の通りユーザーの会だろw

230 :NAME IS NULL:2008/12/15(月) 08:55:36 ID:???
釣られるなってw

231 :NAME IS NULL:2008/12/15(月) 09:07:42 ID:???
だが、きちんとしておいたほうが良い。
「本体の品質」にはまるで影響はないが、
「日本ユーザ会」は屑であることは間違いない。

232 :NAME IS NULL:2008/12/15(月) 09:27:31 ID:???
まだ落ちてんのかな
>>231
確かにw

233 :NAME IS NULL:2008/12/15(月) 15:57:56 ID:WEqZVJO5
シーケンスの用途としては、だいたいprimary keyのあるカラムでユニークな値を生成するために使うと思うのですが
ユニークでさえよければ良いのだから複数のテーブルのprimaryなカラムで共同で1つのシーケンスを
共用しても良さそうなものですが運用上マズーなことってありますか?


234 :NAME IS NULL:2008/12/15(月) 16:22:03 ID:???
別にいいと思うよ。
そっちの方が手間がかかるけどオブジェクトは減るね。

235 :NAME IS NULL:2008/12/15(月) 17:00:33 ID:???
最近postgres触るようになってユーザ会の今までを知らないんだけど
なにが悪いの?客観的にはクズ呼ばわりするなら自分でやればって
感じなんだけど。日本語の情報があるだけでもずいぶんありがたいじゃん

236 :NAME IS NULL:2008/12/15(月) 22:47:11 ID:wDeakmV2
やっと直ったみたい

237 :NAME IS NULL:2008/12/15(月) 22:52:44 ID:???
7.4の頃からちょいちょい見てるけど、何がクズなのか俺もわからん。

238 :NAME IS NULL:2008/12/15(月) 23:29:54 ID:???
ハード障害だって

239 :NAME IS NULL:2008/12/16(火) 00:48:01 ID:???
タダ、そしてボランティア活動家がいる。ありがたや…

240 :NAME IS NULL:2008/12/16(火) 01:43:32 ID:???
あるコミュニティをクソだというのはたぶんタチの悪い他のコミュニティの人なんだろう。
情報を提供されるだけのユーザがそんなこと考えるなんてあり得ない。
どこのコミュニティの方が優れているのかを提示してもらえると参考になるんだけど。

241 :NAME IS NULL:2008/12/16(火) 04:39:03 ID:???
日本ユーザ会って本家にもかなりコミットしてるからねぇ
アメリカ主流のOSS界にあって日本人が活躍してる数少ないプロダクトなのに

242 :NAME IS NULL:2008/12/16(火) 11:35:17 ID:???
ドキュメントが見られるようになっただけでもありがたや・・・

243 :NAME IS NULL:2008/12/17(水) 14:34:52 ID:???
lets.postgresql.jpってどうなったんでしょう…

244 :NAME IS NULL:2008/12/17(水) 15:36:25 ID:???
postgresqlに対応したクールなER図作成ソフトってある?

245 :NAME IS NULL:2008/12/17(水) 15:56:58 ID:???
環境は?
ODBC汎用でもいい?

246 :NAME IS NULL:2008/12/17(水) 16:02:53 ID:???
>>243
今はサーバ仮復旧だから、そっちまで手が回らないのかも。

247 :NAME IS NULL:2008/12/17(水) 16:09:00 ID:???
ODBC対応の場合、何か問題点ってあるの?
パフォーマンス?


248 :NAME IS NULL:2008/12/17(水) 19:30:09 ID:???
"The answer to the question of Life, the Universe and Everything is 42."
さっきこれが PgAdminIII の「今日のヒント」に出てきた。
誰だよ入れたの。

(参考)
人生、宇宙、すべての答え - Wikipedia
http://ja.wikipedia.org/wiki/%E4%BA%BA%E7%94%9F%E3%80%81%E5%AE%87%E5%AE%99%E3%80%81%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AE%E7%AD%94%E3%81%88


249 :NAME IS NULL:2008/12/17(水) 19:43:04 ID:???
googleで。
http://www.google.co.jp/search?q=what+is+the+answer+to+life+the+universe+and+everything

vimエディタを使えるなら :he 42 とやってみるのもいい。

250 :NAME IS NULL:2008/12/17(水) 19:52:25 ID:???
>>249
Sugeee!! このためだけに久々に Vim 立ち上げたよ!
Emacs はないのかな。調べても見つからん。

251 :NAME IS NULL:2008/12/23(火) 20:24:56 ID:???
バイナリデータをバカスカ格納したいんですけど、
LargeObject型
Text型
Bytea型
のどれがいいのでしょうか?
(信頼性、メンテナンス性、速度の面で)

サイズは1データ最大300MB程度です。


252 :NAME IS NULL:2008/12/23(火) 20:28:42 ID:???
ってかbytea型しか無いんじゃないの?
それ以前に1つ300MもあるデータをDBに格納してる人はあんまりいないと思われる
あってもせいぜい数メガの画像程度でしょ

253 :NAME IS NULL:2008/12/23(火) 20:30:06 ID:???
やるんであればoid型じゃね?
DB自体にデータは格納されないでそのデータがあると言うことだけDBに保存されるんだけど

254 :NAME IS NULL:2008/12/23(火) 20:34:39 ID:???
300MBとかbyteaやエンコードしてtext型とか絶対無理
メモリ何ギガも必要になる
ラージオブジェクト(oid)じゃないと無理
ただしラージオブジェクトの場合、DB鯖が分離してると使えない
バッチか何かでDB鯖にファイルコピーする必要がある

255 :NAME IS NULL:2008/12/23(火) 21:14:48 ID:???
そのサイズだとファイルとして保存して、
DBにはパスだけ入れておくのが一般的。

256 :NAME IS NULL:2008/12/24(水) 15:02:20 ID:???
> そのサイズだとファイルとして保存して、
> DBにはパスだけ入れておくのが一般的。

それ素人が良くやる最悪の設計のひとつ
こういう設計を一般的とか言っている時点で >>255 は素人か
周りに迷惑かけまくってる事に自分で気がつかないバカのどちらか

なにが悪いって、こんな事をすれば検索もバックアップもろくに出来なくなるわけよ
で、それが満足に出来ないならわざわざDB使う必要ないじゃん?って話になる
初めっからファイルで格納してfindなりGoogle Desktopなり好きな物使って探せよ
DBは使うな、使おうとすら思うな

そんな設計のDBを保守してゆく事がどれほど大変なことか……
つか、そんな事も分からない >>255 はレスすんなって

257 :NAME IS NULL:2008/12/24(水) 15:09:51 ID:???
キミはどうやってんの?
300MBをBYTEAで入れてるのかw

258 :NAME IS NULL:2008/12/24(水) 15:17:59 ID:???
いやだからoidだろJK

259 :NAME IS NULL:2008/12/24(水) 15:49:48 ID:???
うちもファイル名のみ格納してるシステムあるなあ。
検索できない:そのデータの中身で検索しないのは前提条件だろう。
バックアップできない:これは確かに。

260 :NAME IS NULL:2008/12/24(水) 16:26:40 ID:???
検索って何?
ファイルの内容文を検索する事?
バイナリのファイルの場合はどうするの?

261 :NAME IS NULL:2008/12/24(水) 19:31:34 ID:???
だからoid(要するにラージオブジェクト)で格納すればいいだろうに

262 :NAME IS NULL:2008/12/24(水) 21:47:27 ID:???
>>260
いや、だから、検索する必要がないという前提がおけるなら、
ファイル保存でもいいよねっていうことだろ >>259 が言いたいのは。
読解力ないのか

263 :NAME IS NULL:2008/12/24(水) 22:41:18 ID:???
ラージオブジェクトでFA?

スピードはどよ

264 :NAME IS NULL:2008/12/24(水) 22:45:59 ID:???
>>256
少しは考えろ。

300MBのファイルの検索って、どうやってやるつもりだい?
byteaとしてもラージオブジェクトとしてもインデックスを張りようが無い。
検索するならば特徴量なり概要のみ抜き出してテーブルに格納すれば良い。

「バックアップできない」ってのも意味が分からん。
普通にファイルシステム層でバックアップをとればいい。
300MB規模のデータが複数入る可能性のあるDBを、論理バックアップでまかなうつもりかい?

もし難点を指摘するならば、トランザクションやリカバリ管理が
自前になるのが面倒なことだろう。まったく本質を外した反論だ。

265 :NAME IS NULL:2008/12/24(水) 22:57:15 ID:???
>>262
>>256が「検索も――碌に出来なく」云々書いてるから、
検索って何?ってレスしてんですよ。

そもそもDBに巨大ファイルの検索なんて責任範囲外だろ。
そんなの横断的な全文検索エンジンとかの機能じゃねーの?

266 :NAME IS NULL:2008/12/24(水) 23:04:24 ID:???
>>265
>>262>>256 に対する突っ込みだったか。すまん失礼。
だがちょっと離れすぎだろアンカーかけよ
普通直前へのレスだと思うだろ

267 :NAME IS NULL:2008/12/24(水) 23:05:05 ID:???
x >>262
o >>260

268 :NAME IS NULL:2008/12/24(水) 23:19:07 ID:???
古い資料だけど
http://mikilab.doshisha.ac.jp/dia/research/report/2003/0606/001/report20030606001.html
当然byteaよかラージオブジェクトで突っ込んでoidだけ管理した方が速い
100Mで2分くらいだから普通のファイルシステムよりは遅いかね

269 :NAME IS NULL:2008/12/24(水) 23:20:05 ID:???
わざと追い込むけど、

>>262
>読解力ないのか

>>266
>だがちょっと離れすぎだろアンカーかけよ
>普通直前へのレスだと思うだろ

こんな感じでリアルに豹変されたら信頼なんて出来ないよ。

270 :NAME IS NULL:2008/12/24(水) 23:43:20 ID:???
うざ・・

271 :NAME IS NULL:2008/12/25(木) 00:03:53 ID:???
「世間は厳しい」って言葉の意味の一つとして、
「誰も指摘してくれない」って意味合いがあるんだよね。
わざわざ一言断って指摘してくれてるのに駄目な人ですね。

272 :NAME IS NULL:2008/12/25(木) 02:13:19 ID:???
この流れでそれを読み間違う人に読解力がないとか言われたくないな確かに

273 :251:2008/12/25(木) 05:44:49 ID:???
皆様ありがとうございました。

264の発言が正論と思いました。
264の文中で難点と言われたトランザクションやリカバリ管理は
確かに問題になりますね。
トランザクションは一旦開発してしまえば後々問題になることは
なさそうですが、バックアップ、リカバリ管理、メンテ面はよく考慮
しておかないと後々問題になりそうですね。

数MB程度のデータなら、ファイル保存ではなくbytea型がお手軽で
良いんでしょうね。

274 :NAME IS NULL:2008/12/26(金) 20:27:41 ID:???
PowerGresのドキュメントを見ていて思ったのですが
ttp://powergres.sraoss.co.jp/manual/onWin/V50/ja/admin/others.html
analyzeってvacuum --analyzeとは異なるものなのでしょうか?

275 :NAME IS NULL:2008/12/27(土) 03:28:07 ID:???
VACUUM ANALYZE = VACUUM + ANALYZE。
処理(負荷)そのものはまったく同じ。
統計情報の更新の仕方がちょっとだけ違って、
連続して実行するよりは若干精度が高まる。

276 :NAME IS NULL:2009/01/01(木) 04:40:14 ID:???
>>275
274じゃないけど。

analyze はanalyzeだけ。
vacuum --analyze はvacuum後analyze。
の違いだけかと思ってたけど、

> 統計情報の更新の仕方がちょっとだけ違って、
> 連続して実行するよりは若干精度が高まる。

analyzeそのもののがちょっと違うってこと?

277 :NAME IS NULL:2009/01/01(木) 11:40:11 ID:???
>>276
処理はまったく同じ。行数情報の更新がちょっとだけ違うけど微々たる差。
・VACUUM → 正確な行数が分かる。
・ANALYZE → データ分布と行数の概算が分かる。
・VACUUM ANALYZE → 正確な行数と、データ分布の概算が分かる。

278 :NAME IS NULL:2009/01/06(火) 13:24:05 ID:vCVtLuPS
純粋にvacuum直後であることが保証される前提であれば
何らかの効果的なanalyzeの手法を利用できるってことかなあ

279 :NAME IS NULL:2009/01/08(木) 07:39:37 ID:fq3yDhNY
初歩的な質問ですみません。ググっても上手くヒット出来なかったので。

ポスグレでviewを定義した後、viewを構成している列の情報を取得したいの
ですが、どのようにすれば良いのでしょうか。

目的は、viewで定義した内容を、webブラウザ上で入力画面として再現
したいわけです。
viewを構成している列がわかったら、PHPで入力フォームを自動生成
できるのではないか、と思ったわけです。

280 :NAME IS NULL:2009/01/08(木) 08:22:01 ID:???
>>279
具体的なやり方まで調べてないけど、ヒントを2点ほど。

1) テーブルとかビューなどの定義内容はシステムカタログ(pg_*)のテーブルに登録されてる。

2) psql を -E オプションで起動して \d viewname と打てば、ビュー(viewname)の定義内容を
問い合わせするSQLが表示される。
\d以外にもpsqlで使えるコマンドがどのようなSQLで問い合わせているのかわかるので、いろいろ参考になるよ。

281 :NAME IS NULL:2009/01/08(木) 11:07:05 ID:???
ちょっとやってみた。
select *
from pg_attribute
join pg_type on pg_attribute.atttypid = pg_type.oid
where attrelid =
(select relfilenode
from pg_class
where relname = 'ビューの名前')
order by attnum

とりあえず*でやってみたが、列の選択は任せる。

282 :NAME IS NULL:2009/01/08(木) 23:26:02 ID:???
>>281
それちょっと間違い。relfilenode != pg_class.oid だよ。

select *
from pg_attribute, pg_type, pg_class
where attrelid = pg_class.oid
and atttypid = pg_type.oid
and relname = 'ビューの名前'
order by attnum

がよいと思う。単にビューの名前で絞り込むなら regclass を使うと楽。

select attname, attnum
from pg_attribute, pg_type
where attrelid = 'ビューの名前'::regclass
and atttypid = pg_type.oid
order by attnum


283 :NAME IS NULL:2009/01/09(金) 15:11:59 ID:McdBsPt0
日付型に整数型でレコードに保存されている年数を加えるにはどうすればいいのでしょうか?
select now() + ( 1 || ' year' );
では無理でした

284 :NAME IS NULL:2009/01/09(金) 15:13:48 ID:???
日本語の意味が解らん
つまるところ日付と整数どっちなんたよ

285 :NAME IS NULL:2009/01/09(金) 15:35:03 ID:???
select now() + cast((1 || ' year') as interval)

intervalに明示的に型変換するのがポイント。

286 :NAME IS NULL:2009/01/09(金) 15:57:26 ID:???
intervalにcastっていうのは思いつきませんでした
ありがとうございました

287 :NAME IS NULL:2009/01/10(土) 10:25:40 ID:???
select now() + interval '1 year' * intcolumn;
でも良いかも。

288 :NAME IS NULL:2009/01/13(火) 19:01:02 ID:???
教えてください。
SJISエンコードのデータベースを作成したいのですが
lc_ctypeがjapanese_japan.928ですとエラーになってしまいます。
ロケーションをOSの環境変数で変えれば良いとまで調べたのですが
具体的に環境変数に何と書けば良いでしょうか?
OSはWindoowsXPです。


289 :NAME IS NULL:2009/01/13(火) 20:11:00 ID:???
japanese_japan.928ってそもそも何なんだよ

290 :NAME IS NULL:2009/01/13(火) 20:55:10 ID:???
すみません、間違いました。
lc_ctypeがjapanese_japan.932(=Shift_JIS)の間違えでした。
localeがSJISなのに何故SJISエンコードのDBが作成できないのでしょうか?

エラーが起こりました:ERROR:SJIS is not a valid encoding name

と表示されてSJISエンコードのDBが作成できないのです。


291 :NAME IS NULL:2009/01/13(火) 21:04:05 ID:???
データベース作成しようとSQL実行したら

CREATE DATABASE test WITH ENCODING 'SJIS';

ERROR: SJIS is not a valid encoding name
SQLステート:42704

になりました。
エラーコード調べたら下記のようになってましたが、どうすれば
SHIFT_JISエンコードのDBって作成できるのでしょうか。

42704 未定義オブジェクト undefined_object


292 :NAME IS NULL:2009/01/13(火) 22:29:22 ID:???
OSはどうでもいいからPostgreSQLのバージョン教えろ
まさか7とかじゃないよな?

293 :NAME IS NULL:2009/01/13(火) 23:45:24 ID:???
>>292
ひょっとして、データベース本体もSJIS対応になってたりするの?

>>291
俺の記憶では、SJISが指定できるのはクライアントのみで、データベース本体は無理。

294 :NAME IS NULL:2009/01/13(火) 23:54:24 ID:???
postgresqlのバージョンは8.3です。
まだ解決できてないですが、データベースエンコードが問題じゃないことが分かってきましたので、
SJISエンコードの問題は保留ということでお願いします。すみませんです。。。


また知っている&経験ある方がおりましたら教えていただきたいのですが、現在PHP+Openid+Postgresqlで
開発してます。そこでOpenidのライブラリで、認証情報の格納先をPostgressqlにするとエラーとなってしまうのです。
DBのエンコードが問題かと思っていたのですが、原因は他にあるらしく下記SQLの実行箇所でエラーとなっています。


1.PostgresDBの認証保持用テーブル「oid_associations」に「bytea」型のフィールド「secret」があり、次のSQLを実行しています。
INSERT INTO oid_associations (server_url, handle, secret, issued, lifetime, assoc_type) VALUES (?, ?, '!', ?, ?, ?)

2.プレースホルダーの内容は1個目の引数から
"https://openid.excite.co.jp/・・・"::text ,
"9wePj・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・6c8fac"::text ,
'\152\31\310\133・・・・・・・・・・・・・・・・・・・・・・・・・・・\113\41'::bytea ,
123・・・・・45::integer ,
12・・・・00::integer ,
HMAC-SHA1::text

となっており、引数3個目の'\152\31\310・・・・'をbytea型列に値を入れるところで失敗してるようです。
次のSQLを単体で実行してもエラーになるのですが、エラーの原因がいまいちよく分からずな状態です。

update oid_associations set secret='\152\31\310';
update oid_associations set secret='\152\031\310';
update oid_associations set secret='\\152\\031\\310';

byteaは 3 桁の 8 進番号が入るとPostgresqlマニュアルにありましたが「\31」なる2桁の値が混ざっていたりして
これをどうすればいいのか迷っています。何か良きアドバイスありましたらお願いします。


295 :NAME IS NULL:2009/01/14(水) 00:46:14 ID:???
>>294
update oid_associations set secret=E'\\152\\031\\310';

> byteaは 3 桁の 8 進番号が入るとPostgresqlマニュアルにありましたが「\31」なる2桁の値が混ざっていたりして
スレチネタ。2桁の物を3桁にするだけだと思うけど、
そもそもなんで2桁の物が出てくるのかな? エスケープに使用する関数を間違ってるとか。

296 :NAME IS NULL:2009/01/14(水) 00:49:29 ID:???
古いマニュアルを見たのかな。
http://www.postgresql.jp/document/pg830doc/html/datatype-binary.html
これみるとEつけてってなってるよ

297 :NAME IS NULL:2009/01/14(水) 04:12:54 ID:???
Openidってのが、どこのライブラリか知らないが
pg_escape_byteaとpg_unescape_byteaを使って
検証スクリプトを作るしかないんじゃね?


298 :NAME IS NULL:2009/01/14(水) 06:11:31 ID:xfxOZTQe
>>295-297
ありがとうございます。
SQLを下記のようにしたらbyteaに値を入れることに成功しました。
どおやらライブラリにバグがあるようですので書き換えてみたいと思います。

(失敗)
update oid_associations set secret='\152\31\310';
update oid_associations set secret='\152\031\310';
update oid_associations set secret='\\152\\031\\310';
update oid_associations set secret=E'\152\31\310';
update oid_associations set secret=E'\\152\\31\\310';
update oid_associations set secret=E'\152\031\310';

(成功)
update oid_associations set secret=E'\\152\\031\\310';

マニュアルが古いかったようで7.2のマニュアル見てました・・・
http://www.postgresql.jp/document/pg721doc/user/datatype-binary.html


299 :NAME IS NULL:2009/01/20(火) 10:27:21 ID:???
PostgreSQLにVB2005からアクセスする場合
ODBCとNpgsqlではどちらが一般的でしょうか?
またはそれ以外に何かメジャーなものはありますか?

300 :NAME IS NULL:2009/01/20(火) 12:15:37 ID:???
.NET系はNpgsqlでいいと思うよ。
昔はlibpq.dllを直接呼ぶこともやったかな。

301 :NAME IS NULL:2009/01/21(水) 09:57:56 ID:???
>>300
ありがとうございます。


302 :NAME IS NULL:2009/01/21(水) 18:34:43 ID:???
MySQL の found_rows() と同等機能を御存じの方おられませんか?

>SELECT SQL_CALC_FOUND_ROWS * FROM xxxx limit 10;
>SELECT found_rows();

やりたいことは、limit による制限のかかった結果の行数ではなく、limit がかかっていない場合の全体の行数を取得です

マニュアル見ても、ぐぐってみても「そんな機能はない」で結論ついてる感じなのですが・・・

303 :NAME IS NULL:2009/01/21(水) 19:48:12 ID:???
>>302
postgresは同じ条件でcount(*)するしかないっぽいな


304 :NAME IS NULL:2009/01/21(水) 20:34:03 ID:???
>>302
どうしてもスキャン1回で済ませたいなら、
カーソルでLIMIT件だけ先に取得して、あとは末尾までシークって感じかなぁ。

305 :302:2009/01/22(木) 13:05:36 ID:???
ここの住人でもわかりませんか・・・
ないんでしょうねぇ・・・

2回投げるか、全部とってlimit分だけ返すか二択ですね
レスありがとうございました


306 :NAME IS NULL:2009/01/22(木) 13:10:51 ID:???
MySQLだって便宜上関数つくってるだけで
内部では2回呼んでるのも同じだろうし

307 :NAME IS NULL:2009/01/22(木) 14:00:00 ID:???
>>305
>全部とってlimit分だけ返すか
この選択肢はなしだと思います

308 :NAME IS NULL:2009/01/22(木) 14:57:29 ID:???
一覧のページャとかでそういうのよく必要になるが、いつも検討の結果2回投げることにしてる
countするだけなら結合しなくていいテーブルとか出てくるだろうし、速度もいつも問題にならないくらいに収まる

309 :NAME IS NULL:2009/01/23(金) 09:13:09 ID:???
initdbで新しいデータベースクラスタを作って
そっちをデフォルトにするにはどうすればいいですか?

310 :NAME IS NULL:2009/01/23(金) 09:30:14 ID:???
よく意味が解らんが-dで新しくできたディレクトリの方指定するとかそんな答えでいいタイプの質問?

311 :NAME IS NULL:2009/01/23(金) 09:32:12 ID:???
>>310
はい。そうです!

312 :NAME IS NULL:2009/01/23(金) 13:43:31 ID:???
windows版postgreでも文字コードはEUC-JPにするのが普通ですか?
UTF-8のほうがいいですか?

313 :NAME IS NULL:2009/01/23(金) 13:53:30 ID:???
普通なんてない
自分が必要な文字コードにするまで

314 :NAME IS NULL:2009/01/23(金) 18:47:02 ID:???
気分悪いだろうがSJISが一番無難らしい
文字コードに詳しい知人が言ってた。
ベストではなく無難ね。

反論よろ。 ってFAQかなw

315 :NAME IS NULL:2009/01/23(金) 19:37:57 ID:???
>>314
その理由は?

316 :NAME IS NULL:2009/01/23(金) 20:02:40 ID:???
SJISはサーバの文字コードには使えないよ。
EUC-JPだと外字の変換に微妙なクセがあるので、UTF-8がお勧め。

317 :NAME IS NULL:2009/01/23(金) 21:24:37 ID:???
個人的には、全部UTF-8に統一できないのなら、
DB内部文字コードをEUC-JPにして、
クライアントとのやりとりをSJISにするのがおすすめ。

内部をUTF-8にすると、SJISからUTF-8への変換時に
機種依存文字とかでエラーが出たりする。

318 :NAME IS NULL:2009/01/23(金) 21:32:04 ID:???
EUC-JPにします!

319 :NAME IS NULL:2009/01/23(金) 22:20:25 ID:???
EUC-JP には難しい 斉藤 の字が入らないらしい。
そかSJISを選べなかったとわ。
まだまだ未熟者だ...
いちおー自宅鯖のpgqlはUTF8にしてる。

320 :NAME IS NULL:2009/01/23(金) 22:23:26 ID:???
EUCは「〜」がないよね

321 :NAME IS NULL:2009/01/23(金) 22:34:27 ID:???
DBをSQLASCIIにしてSJIS突っ込んでる。
携帯が絡んでくる事が多いのでSJIS必須。

322 :NAME IS NULL:2009/01/23(金) 23:07:29 ID:???
>>319
他にも色々入らないよ。はしごだか、とか。

>>320
〜の問題は厄介だね。なんであんなことに、と思う。

323 :NAME IS NULL:2009/01/23(金) 23:10:30 ID:???
UTF-8にします!

324 :NAME IS NULL:2009/01/24(土) 00:39:20 ID:???
少なくともJava、Perl、PHP、BASHなんかではMS932とUTF8の変換には困らんぞ
MS932じゃなくてSJISから変換しようとして
機種依存文字で落ちてるんじゃないの?
気を付けるのは機種依存文字じゃなくて〜とかの
マッピング違う文字だけだよ

325 :NAME IS NULL:2009/01/24(土) 00:40:02 ID:???
BASHってかiconvね

326 :317:2009/01/24(土) 01:15:22 ID:???
>>319,320,322
クライアントの文字コードも EUC-JP で使ってるの?
クライアントは SJIS にすれば、普通に使えてるよ。

>>321
そのテクニックは知らなかった。
なにか困ることとか無いの?

>>324
いや、SET CLIENT_ENCODING='SJIS' 実行して、
PostgreSQL 側で文字コードの変換をさせてるから、
クライアントアプリ側でUTF-8への変換は実行してない。

機種依存文字の問題は PostgreSQL が MS932 を
扱えるようになれば解決しそうだけどねー。

327 :NAME IS NULL:2009/01/24(土) 02:25:48 ID:???
SJISとMS932って違うのか
勉強せねばw

328 :NAME IS NULL:2009/01/24(土) 02:26:33 ID:???
出来れば全てUTF-8が望ましいね〜

329 :NAME IS NULL:2009/01/24(土) 02:27:34 ID:???
クライアントをSJISにってなんかやな予感しかしないんだけど、最近は
2バイト目に0x5cがあるような文字もさらりとやってくれるようになってるの?
あと、MS932て記述珍しいかも。エディタでの指定にcp932でphp内での指定にsjis-win使ってる。
MS932でも通るのかな?

330 :NAME IS NULL:2009/01/24(土) 02:32:15 ID:???
>>329
PHPでSJISとBOMありUTF-8は未だにウンチだよ
SJISのfgetcsvとかは0x5c問題が未だに解決されてないはず。
Eclipseで開発しようとするとUTF-8はBOMありだからhedaderでリダイレクトするとエラーがでるし・・・

331 :NAME IS NULL:2009/01/24(土) 02:37:29 ID:???
クライアントはUTF-8にしといて内部処理もUTF-8でやって
テンプレート出力時に好きな文字コードで出力するのが最近の王道だと思うの

332 :NAME IS NULL:2009/01/24(土) 04:50:27 ID:???
>>329
MS932ってJava用語っぽいね。
一般的にはMS932=cp932っぽい。

333 :NAME IS NULL:2009/01/24(土) 05:04:06 ID:???
俺もsambaでは
unix charset = UTF-8
dos charset = CP932
display charset = UTF-8
ってしてる。

334 :NAME IS NULL:2009/01/24(土) 05:52:49 ID:???
遙か昔はCP932って言うとIBMのCP932しか想定しなくて良かったけど、
Javaができた頃にはもうWindowsがあってWindows-31Jとの区別も必要だったから、
厳密にするためにWindowsの文字コードの方はMS932ってしたんだよね。
JSPなんかではWindows-31Jってしたりするわ。

335 :NAME IS NULL:2009/02/06(金) 06:58:55 ID:eu9JDTxG
マイナーリリース : 8.3.6 / 8.2.12 / 8.1.16 / 8.0.20 / 7.4.24

336 :NAME IS NULL:2009/02/15(日) 03:16:10 ID:???
pl/pgsqlで複数行・複数列を返すってのに3日ハマってましたよ。orz

337 :NAME IS NULL:2009/02/15(日) 03:30:46 ID:???
そろそろポスグレにJSONデータ型っていうのが出来ても良い頃合いだと思うんだ

338 :NAME IS NULL:2009/02/18(水) 21:25:52 ID:???
すいません。おしえてください。エロイ人><

wakachi
senna
ludia

普通にインストールでいいんですよね?
インデクッスは作成さるんですが、インデクッススキャンしてくれないんです。

./configure UTF8指定
make
make install

Table "public.zip"
Column | Type | Modifiers
---------------+--------------+-----------
id | integer |
zip_code_5 | character(5) |
zip_code | character(7) |
ken_kana | text |
city_kana | text |
machi_kana | text |
ken | text |
city | text |

"idx_zip_city_senna_ludia" fulltext (city)

ludia=# explain analyze select * from zip where city like '%横浜%';
QUERY PLAN
-------------------------------------------------------------------------------------------------------
Seq Scan on zip (cost=0.00..4184.94 rows=37 width=143) (actual time=8.703..102.535 rows=971 loops=1)
Filter: (city ~~ '%横浜%'::text)
Total runtime: 105.441 ms
(3 rows)

Time: 134.188 ms
ludia=# explain analyze select * from zip where city @@ '横浜';
QUERY PLAN
----------------------------------------------------------------------------------------------------------
Seq Scan on zip (cost=0.00..4798.11 rows=123 width=143) (actual time=3198.851..3198.851 rows=0 loops=1)
Filter: (city @@ '横浜'::text)
Total runtime: 3198.980 ms
(3 rows)

339 :NAME IS NULL:2009/02/19(木) 00:01:18 ID:???
>>338

↑ wakachi ← mecab

version 8.3.3です。よろしくお願いします。



340 :NAME IS NULL:2009/02/19(木) 01:49:23 ID:???


ludia は、いまだ確認できませんが、別の手段で時間短縮できたので、クローズします。

ludia は、引き続きググってみます。


341 :NAME IS NULL:2009/02/19(木) 02:26:52 ID:???
>>340
使ったことがないから手伝えないけどあんまり夜遅くまで無理しちゃダメだよ?
明日(今日?)やれるんならもう休んだほうが良いよ。
寝て起きたら直ぐに原因が分かった!って事が結構あるんだから。

342 :NAME IS NULL:2009/02/19(木) 03:31:49 ID:???
>>341の優しさに泣いたので俺も寝る

343 :NAME IS NULL:2009/02/19(木) 04:07:02 ID:???
>>341

>>338-340です。

ありがとうございます。
思わず、涙が。

私も寝ます。おやすみなさい。

344 :NAME IS NULL:2009/02/19(木) 21:43:23 ID:???
>338

PostgreSQL8.3以降は、tsearch2が標準になって@@演算子を使うようになったので
Ludiaインデックスを使用する演算子は%%に変更されています。

8.3系でLudiaを使うには、Vacuum後にreindexする必要があったりするので要注意。

いつもならスルーするんだが、340みてたら書く気になってもうた。

345 :NAME IS NULL:2009/02/20(金) 15:00:22 ID:???
>>344

>>338です。レスありがとうございます。
>>341さんのいうとおりでした。翌朝、目が覚めて、ググって即判明しました・・・・。READMEが間違いだなんて><。
そのほかにも、(、Vacuum後にreindexする必要)あるんですね。

新たに、別の手段もわかりましたので、ludiaはちょっと保留です。

346 :NAME IS NULL:2009/02/25(水) 08:46:10 ID:CKM958xB
Debian etch上でPostgreSQL8.1 を走らせて、Win側からODBC
(psqlodbc_08_03_0400.zip)接続をしています。
ODBCのデータソースの設定の中で、リードオンリィにチェックを
つけてみたのですが、元データを自由に改ざんできてしまいます。
何か設定にミスがありますでしょうか?
どなたかアドバイスをお願いします。
また、データベースに直接リードオンリー属性をつけても同じ状況です。
こちらもアドバイスをお願いしたく思います。



347 :NAME IS NULL:2009/02/25(水) 10:31:45 ID:???
通常はGRANT使うけど・・・
現状の運用に合わせるとなると、今どうやってるのかわからないと。

348 :NAME IS NULL:2009/02/25(水) 13:42:10 ID:???
パラメータ default_transaction_read_only があったような。

349 :NAME IS NULL:2009/02/27(金) 14:49:31 ID:???
PostgreSQL8.1を使ってますが、
--
Delete from TableA where id=xxxxxxx;
vacuum TableA;
--
ってPHPで都度都度テーブルバキュームするのって
なんか問題ありますか?

350 :NAME IS NULL:2009/02/27(金) 21:17:59 ID:???
場合によるけどそもそもなんで都度バキュームする必要あるの?

351 :NAME IS NULL:2009/02/27(金) 21:21:25 ID:???
そもそもトランザクション内でvacuumできなかったような気がするが。。。

352 :NAME IS NULL:2009/02/27(金) 21:34:20 ID:???
そこまでやるなら普通に8.3使ってオートvacuumでええやんけ

353 :NAME IS NULL:2009/02/28(土) 08:51:21 ID:???
vacuum中にvacuumしたらどうなるんだろ

354 :NAME IS NULL:2009/02/28(土) 10:19:05 ID:???
>>353
同一テーブルではシリアル実行のみ。後続が待たされる。
別テーブルならパラレルに走る。

>>349
更新が激しいなら1分間隔くらいで vacuum をスケジュールするのは
アリだと思うが、アプリよりはデーモンから発行したほうが良いと思う。

355 :NAME IS NULL:2009/03/01(日) 05:22:26 ID:???
>>353
まさかRDBMSにはロックという仕組みがあることを知らないとかないよな

356 :NAME IS NULL:2009/03/01(日) 06:01:51 ID:???
ROCK!!

357 :NAME IS NULL:2009/03/01(日) 11:51:45 ID:???
おれクラシック

358 :NAME IS NULL:2009/03/01(日) 17:51:57 ID:R7fc700l
マイSQLとなにがちがうのですか?

359 :NAME IS NULL:2009/03/01(日) 18:35:34 ID:???
製造元が違う

360 :NAME IS NULL:2009/03/01(日) 19:37:18 ID:???
バカだな 名前が違うだろ

361 :NAME IS NULL:2009/03/02(月) 00:33:44 ID:???
MySQL=私の
PostgreSQL=ポストグレ氏の

362 :NAME IS NULL:2009/03/02(月) 09:31:06 ID:???
なるほど〜

363 :NAME IS NULL:2009/03/02(月) 10:21:19 ID:???
舞ちゃんの、です

364 :NAME IS NULL:2009/03/02(月) 17:35:43 ID:???
          _____
        /        \
      / /・\  /・\ \
      |    ̄ ̄    ̄ ̄   |
      |    (_人_)     |  里田最高〜
      |     \   |     |
      \     \_|    /


365 :349:2009/03/02(月) 22:58:51 ID:???
>>349
>更新が激しいなら1分間隔くらいで vacuum をスケジュールするのは
>アリだと思うが、アプリよりはデーモンから発行したほうが良いと思う。

レス、ありがとうございます。
ちょっとサービスやcronの利用は最小にしたい希望があります。

とりあえず開発環境で試してますが、リレーション貼るテーブル
ではないので問題なさそう且つ機能しているみたいなんですけど。。。
ググってもこんな使い方している事例が出てこないので
ちょっと心配ですね。

以前8.2は互換性に問題があってやめましたが、
まだ8.3は8.1との互換性は検証してないんです。



366 :NAME IS NULL:2009/03/03(火) 00:30:01 ID:???
本番環境はリレーション貼る必要ないだろ
特に高負荷なシステムなら更新性能落とすだけで意味ない

367 :NAME IS NULL:2009/03/17(火) 18:14:58 ID:24PL+uN8
drop table table_name;
とすると、何も帰ってきません。topで見てもCPUは使われていない。ログにもなにもでてきませんが、
どうしたのでしょう?
試しにcreate table xxx;とやってdrop table xxx;とやると正しく削除されるのですが、
以前に作成したテーブルをdrop table table_name;として削除しても何も動いてくれません。
だんまりです。コンソールも戻ってこない。なんででしょうか?

368 :NAME IS NULL:2009/03/17(火) 18:24:26 ID:???
httpdあたりrestartしてみると動いたりしないかな?


369 :NAME IS NULL:2009/03/17(火) 18:46:09 ID:24PL+uN8
お騒がせいたしました。削除できました。
postgresqlを再起動したら削除できたようです。

370 :NAME IS NULL:2009/03/18(水) 12:53:34 ID:???
しばらく情報追っかけてなくて浦島状態なのですが
レプリケーションするときの最近の主流は何ですか?


371 :NAME IS NULL:2009/03/18(水) 15:08:41 ID:???
>>370
以前と同様、主流といえるものはまだ存在しない。

372 :NAME IS NULL:2009/03/18(水) 15:22:47 ID:???
組み込まれるまでこのままだろうなあ
Slony-IIはどうなったんだ

373 :NAME IS NULL:2009/03/18(水) 15:26:55 ID:???
って中断したままか。
Postgres-Rが有望なのかな?

374 :NAME IS NULL:2009/03/18(水) 15:46:16 ID:???
という事はほとんだやってないって事か?

375 :NAME IS NULL:2009/03/18(水) 22:20:51 ID:???
pgpoolはちゃんとメンテナンスされてるしどうだろう?

376 :NAME IS NULL:2009/03/19(木) 15:40:31 ID:???
ピジプーはもう、本体に入れちまえばいいのに。
そう思わん?


377 :NAME IS NULL:2009/03/19(木) 18:16:35 ID:???
みなさんの知恵をお貸しください

内部コード:UTF8
client_encoding:euc-jp

上記の設定のDBにsjisのデータをINSERTしたところ、
2バイト文字・機種依存文字など全て文字化けすることなく登録できました。
connection後、「SET client_encoding TO 'sjis'」等は行っていません。

これはINSERT時にPostgreSQL側で型を自動判別して変換しているということでしょうか?
文字化け対策に特定の文字をhtml内に出力しておくことでブラウザに文字コードを判断させてる
ということを聞きますが、PostgreSQL型で判別を間違う事はないのでしょうか?

378 :NAME IS NULL:2009/03/19(木) 21:58:35 ID:???
>>377
自動判別ってのは聞いたこと無いな。
SET client_encoding TO 'sjis' をやらなくても、
環境変数とかで設定できるから、なにかで設定されてるんじゃない?

あとPostgreSQLのバージョンは?
バージョン8.3からJIS X 0213に対応してるから、
機種依存文字とかもUTF-8に変換して登録できるはず。

http://postgresql.at.webry.info/200703/article_6.html
http://itpro.nikkeibp.co.jp/article/COLUMN/20070409/267852/
http://www.postgresql.org/docs/8.3/static/release-8-3.html

379 :NAME IS NULL:2009/03/19(木) 22:29:01 ID:???
1) どういう手段でINSERTした?
2) INSERTできていることをどうやって確認した?

(PHP等の)スクリプトが噛んでるんだったら
そこで変換が掛かってる可能性が、とか。

よく判らんけど。


380 :NAME IS NULL:2009/03/20(金) 02:14:32 ID:???
すみませんが、質問です。
PostgreSQL 7.4 on ContOS 5.2 という環境があるのですが、
これにpgpool-IIをインストールするには、どういう方法が
いちばん容易でしょうか?

yumでpgpool-IIをインストール - ZeBeVogue別館
http://d.hatena.ne.jp/zebevogue/20090120/1232438315

こんなページを見つけたのですが、うまく行きませんでした。
こちらで必要なPostgreSQLのバージョンが古いせいでしょうか。

http://yum.pgsqlrpms.org/reporpms/7.4/pgdg-centos-7.4-4.noarch.rpm
7.4用のこれ↑をインストールして、
pgpool-II以外を置き換えられてしまわないように、上のページと逆に
/etc/yum.repos.d/pgdg-74-centos.repo に
exclude=postgresql*
という設定を入れました。

しかしインストールできません。
libpq.so.3 というライブラリがない、と言われます。

上の設定を外してみると、インストールは進みます。
=============================================================================
Package         Arch    Version     Repository    Size
=============================================================================
Installing:
pgpool-II        i686    2.0.1-1.rhel5  pgdg74      325 k
Installing for dependencies:
postgresql-libs     i686    7.4.19-1PGDG.rhel5 pgdg74      372 k
postgresql-libs.i686の中に、libpq.so.3があったようです。

381 :380:2009/03/20(金) 02:20:43 ID:???
続きです。

しかし、postgresql-libs.i386 が、CentOSのデフォルトのレポジトリからすで
にインストールされているのです。このままインストールしたら競合を起こし
そうでこわいです。できたらCentOSの方のライブラリを利用したいのです。

この新しいレポジトリは、すべてi686用のパッケージになっているようで、そ
のためにi386用のパッケージがインストールされていても、パッケージの依存
関係は解決されないようなのです。

新レポジトリに、i386用の pgpool-IIがあったらいちばん良かったのですが。

ここから先は、どうしたらよいでしょうか?


382 :NAME IS NULL:2009/03/20(金) 02:58:32 ID:???
>>380
なぜ今どきPostgreSQL 7.4を使うの?
PostgreSQL 8.x使えないの?

383 :380:2009/03/20(金) 03:09:26 ID:???
>>382
私もそう思うのですが、これは古いシステムの部分修正で、DBのバージョンを
上げることができないのです。
その割にpgpool-IIを導入したりするのは、矛盾している気もしますが、いずれ
にせよ、決定権は私にはありません。


384 :NAME IS NULL:2009/03/20(金) 03:37:57 ID:???
>>381
rpm -qpl コマンドで、
postgresql-libs.i686 でインストールされるファイルと、
既存の postgresql-libs.i386 のファイルを比較して、
上書きされないようなら、インストールして大丈夫なんじゃない?

確かi686用とi386用はそれぞれインストールできたはずだし。

>>383
あるよね、そういうこと。
上司や元請けは現場のこと理解してないのに、勝手になんでも決めるしね。

385 :380:2009/03/20(金) 10:57:09 ID:???
>>384
ありがとうございます。ご返事が遅くなってすみません。

> 確かi686用とi386用はそれぞれインストールできたはずだし。

なるほど。しかしそうなると、今度は逆に、用の pgpool-II.i686を導入して、
既存のpostgresql.i386から利用できるかという心配をしてしまいます。調べて
みます。

> >>383
> あるよね、そういうこと。

はい。ただ、一番の原因は、私に技術力がないことだと思います。今も、yumで
インストールされた postgresql-libs.i386のファイルを取り出すにはどうした
らいいか、調べている最中です。yum やrpmの基本的な仕組みが分かっていない。
だから、相手にはっきりしたことを言えないでいるんです。上に書いた心配も
同根です。

なんかPotgreSQLではなくRPMの質問になってしまいました。スレ違いかも知れ
ません。ごめんなさい。

皆さん、どうもありがとうございました。

386 :NAME IS NULL:2009/03/21(土) 16:47:05 ID:???
>>378>>379
レスありがとうございます。
PostgreSQLは8.3.6 windows版
ODBCドライバ 08_03_0400です。
環境変数は設定していませんでした。

INSERTは4thDimensionという言語から
ODBC接続経由でINSERTしました。
4thDimensionの内部コードはShiftJISです。

確認はpgAdminから半角カナ、「(株)」等の機種依存文字を確認しました。

ここまで書いてて思ったんですが、ODBCドライバのところで
変換されてる可能性もあるんでしょうか?

387 :NAME IS NULL:2009/03/22(日) 00:41:41 ID:???
>>386
ODBCドライバのログを取ってみれば分かると思うよ。

388 :NAME IS NULL:2009/03/22(日) 10:01:46 ID:s8j4mKbf
>>386
ODBCのプロパティでエンコード指定するとこ、なかったっけ?

389 :NAME IS NULL:2009/03/28(土) 14:37:46 ID:???
PostgreSQL 8.1.17 を使っています。

UPDATE t_test t1
 SET t1.id=SELECT t2.id FROM t_test t2 WHERE t1.parent_id=t2.id

という SQL 文は使えないのでしょうか?
ERROR:  syntax error at or near "t1" at character 15
となってしまいます。

PostgreSQL では、どういう SQL 文にすれば良いのでしょうか?

390 :名無し募集中。。。:2009/03/28(土) 15:47:18 ID:7lyHoUqc
as

391 :NAME IS NULL:2009/03/29(日) 02:41:42 ID:???
UPDATE t_test
SET id=SELECT t2.id FROM t_test t2 WHERE parent_id=t2.id
UPDATE対象のテーブルにはrename使えないだろ

392 :NAME IS NULL:2009/03/29(日) 03:18:18 ID:???
こうじゃないのか?
UPDATE t_test AS t1
SET id=(SELECT t2.id FROM t_test AS t2 WHERE t1.parent_id=t2.id);

"AS" とつけるのは俺の趣味だが、
>>391のWHERE句は t2.parent_id=t2.id になっていそう。

393 :NAME IS NULL:2009/03/29(日) 03:23:35 ID:???
PostgreSQLはテーブル名の方はas省略できないだろ
カラム名の方はできるけど

394 :NAME IS NULL:2009/03/29(日) 03:28:59 ID:???
>>393
テーブル、カラムどちらとも必ずASと書いているので、気づいてないだけかもしれんが、
少なくとも手元の8.3.5では省略できる。以前も出来てた希ガス。
出来ないのはテーブルを返すサブクエリには、必ず別名をつけなきゃならないことじゃ?

395 :NAME IS NULL:2009/03/29(日) 08:54:01 ID:???
>>391-392
本当に試してみたのか?

>>391
>>392でも指摘されているが期待通りの結果にならないだろ。

>>392
8.1ではUPDATEでAS指定はできない。
http://www.postgresql.jp/document/pg815doc/html/sql-update.html

396 :NAME IS NULL:2009/03/31(火) 23:08:32 ID:???
>395
UPDATEでテーブル名省略したときには優先的にUPDATE対象のテーブルになる。
UPDATE対象にASは使えないのだから391で正しいはず

397 :NAME IS NULL:2009/04/01(水) 08:14:00 ID:???
PostgreSQL の次のログにある[47-1]というのは何を表わしているのでしょうか?

Mar 30 14:15:40 localhost postgres[2748]: [47-1] FATAL: connection limit ...




398 :NAME IS NULL:2009/04/07(火) 13:52:07 ID:???
oracleでいう
select * from v$session;
ってpostgreだとなんでしょう?

399 :NAME IS NULL:2009/04/07(火) 14:22:39 ID:???
>>397
syslog?うちじゃ出ないからわからん。

400 :NAME IS NULL:2009/04/07(火) 14:23:34 ID:???
v$sessionでググったけど、そのうちどれが知りたいの?
それぞれ個別にはとれるから、それを集めたSQLを発行すればいけると思う

401 :NAME IS NULL:2009/04/08(水) 23:19:56 ID:iDHCZoF+
SET @i := 0;
SELECT (i=i+1) AS rank FROM test;
で連番を振れないのはどうしてですか?

402 :NAME IS NULL:2009/04/09(木) 22:30:25 ID:???
>>401です。
SERIALで自己解決しました。

403 :NAME IS NULL:2009/04/11(土) 19:37:37 ID:xGvi71qq
失礼します

PL/pgSQLで作ったファンクションのSQLをローカルのテキストに保存してたのですが捨ててしまいました。
ファンクションのソースを参照するコマンドやSQLがわかりません。
どうすればいいでしょうか。

404 :NAME IS NULL:2009/04/11(土) 19:49:52 ID:???
>>403
SELECT prosrc FROM pg_catalog.pg_proc WHERE proname = '関数名'

関数のインタフェースはまた別で取らないといけないけど。
CSEとかのGUIプログラムで大抵は分かるようになってるんじゃね?

405 :NAME IS NULL:2009/04/11(土) 19:57:40 ID:xGvi71qq
>>404
出来ました!!有難うございます!!

406 :NAME IS NULL:2009/04/16(木) 09:59:21 ID:BcIkA+SW
PostgreSQL 8.4 beta1

407 :NAME IS NULL:2009/04/18(土) 14:07:54 ID:???
Windows2008にPostgreSQL8.2をインストールして運用されている方いますか?
今度新規で買うwin2008サーバーに入れる予定なんだけど、問題点があれば
事前に知っておきたいです。

408 :NAME IS NULL:2009/04/18(土) 18:27:52 ID:???
別にServer2008に限った話じゃないが、遅いぞ

409 :NAME IS NULL:2009/04/18(土) 19:43:24 ID:???
新規ならなぜ8.3にしないの?

410 :NAME IS NULL:2009/04/18(土) 21:30:30 ID:???
わざわざWindowsで使う利点は無いんだが。

411 :NAME IS NULL:2009/04/18(土) 22:33:38 ID:???
>>409
あとサーバーを新規に入れるだけで、DBMS は今使ってるバージョンを
そのまま使うとかじゃね。わざわざ?

>>410
Windows しか使ったことないとか、会社のポリシーとか色々理由はあ
るだろ。利点なんて人それぞれだということぐらい理解しなよ。

412 :NAME IS NULL:2009/04/18(土) 22:52:08 ID:???
昔のpgsql-jpを思い出すな。
質問者の使っているバージョンが古いと、答えるより先に
「なんでそんな古いの使ってるの?」と逆質問するやつが
必ずいたもんなw

413 :NAME IS NULL:2009/04/18(土) 22:54:00 ID:???
レンタルサーバなんて多くがまだMySQL4.1だったりするしな
そういう制限に出会ったことがないくらいの経験ということだよ

414 :NAME IS NULL:2009/04/18(土) 22:58:48 ID:???
極端すぎる
そんなレンサバ選ぶって時点でもう…

415 :NAME IS NULL:2009/04/19(日) 00:07:27 ID:???
レン鯖の話で言うならPostgreSQL対応の多くのレン鯖が7.4だったりするわけだが
MySQLだと下手したら3.23なんて所もある

416 :NAME IS NULL:2009/04/19(日) 00:32:59 ID:???
そんなカス業者使わないで素直に仮想化プラン使えるとこ選べよってオチ

417 :NAME IS NULL:2009/04/19(日) 07:51:10 ID:???
Windows + 8.1 は直せないバグがあって既にサポート切れだけど、
8.2 ならまだメンテされてる。ただ、8.3 で Windows 上でメモリ消費が減る
改修が入っていたと思うから、やっぱり新しいほうが得ではあるね。

418 :NAME IS NULL:2009/04/19(日) 09:12:59 ID:???
8.2から8.3にして暗黙型変換しない件で困ったけど、下の記事で解決。
ttp://lets.postgresql.jp/documents/tutorial/cast/

419 :NAME IS NULL:2009/04/20(月) 20:26:37 ID:???
ふーん
型変換が厳密なったと言えば聞こえはいいけど
0.1 バージョンアップでSQLが非互換とか頭沸いてるな

420 :NAME IS NULL:2009/04/20(月) 20:29:16 ID:???
「0.1 バージョンアップ」=「メジャーバージョンアップ」
だと理解した上で発言して欲しいものだ。

まぁ、この件はさすがにやりすぎだとは思うけど。
互換オプションくらい残せば良かったのにねぇ。

421 :NAME IS NULL:2009/04/20(月) 23:48:41 ID:???
PGClusterってもう開発止まっちゃってるのかな?

422 :NAME IS NULL:2009/04/21(火) 11:06:38 ID:???
話きかないね。
バージョン固定だし、コードひどいし、こっちがコード送っても
素直に組み込まずにこねくり回して自分のものにしてから組み込むし

423 :421:2009/04/21(火) 12:02:58 ID:???
>>422
ありがとうございます。
他のにした方がよさそうですね。

424 :NAME IS NULL:2009/04/24(金) 18:05:35 ID:???
PITRでウォームスタンバイの環境を作ろうとしてるんだけど、
バックアップされたWALって無限に増殖するよね。
随時リストアするわけだし古いログ削除してもいいの?
それとも古くなったログから削除してくれる機能ってあるのかな・・・

425 :NAME IS NULL:2009/04/24(金) 18:32:45 ID:???
ちなみにウォームスタンバイの方法はここを参考にしますた
ttp://www.techscore.com/tech/sql/replication/2.html#rp2.4

426 :NAME IS NULL:2009/04/25(土) 03:39:40 ID:???
>> 424
http://www.postgresql.jp/document/current/html/pgstandby.html

pg_standbyに%rを指定しろ。

427 :NAME IS NULL:2009/04/25(土) 07:14:23 ID:Ny76O360
おしえてくださいおながいします。

INSERTされてる最中のテーブルを別のアプリがSELECTできないようにする簡単な方法って
ありますか?なんでも追記型DBなんでロックしててもSELECTできないとか聞きました。
バージョンは7.Xです。

あと、高速化の参考になる本とかWebサイトとかあったら教えてください。

428 :427:2009/04/25(土) 07:17:24 ID:Ny76O360
すいませんすいません。

× SELECTできない
○ SELECTできる

です

429 :NAME IS NULL:2009/04/25(土) 09:11:59 ID:UNU8504O
>>427
begin insert commit
の繰り返しなら insertしてる行以外なら普通に読めると思うけど
どんな想定なのか、がわからないとなんともいえない


430 :NAME IS NULL:2009/04/25(土) 09:39:24 ID:Ny76O360
すいません。聞き方がまずかったです。

BEGIN INSERT ENDのただ中にあるテーブルに他のアプリがSELECTをかけてきた場合、
SELECTをエラーにする方法はありますでしょうか。

431 :NAME IS NULL:2009/04/25(土) 12:00:41 ID:???
明示的にテーブルロックすればいい

432 :NAME IS NULL:2009/04/28(火) 00:35:42 ID:???
postgresqlってまだVACUUM文流す必要あるんですか?


433 :NAME IS NULL:2009/04/28(火) 00:39:19 ID:???
すいません他すれで解決しました

434 :NAME IS NULL:2009/04/28(火) 07:03:10 ID:R5TUyxyI
>>430
事故解決しますた。COMMITするまではINSERTのデフォルトロックで、他のプロセスの
SELECTがきかないみたいです。

>>431
それもありですね。

435 :NAME IS NULL:2009/04/28(火) 10:10:08 ID:ZrsNSBAo
>>432
8.3系列だとAutoに任せていいんじゃない?

436 :NAME IS NULL:2009/04/28(火) 23:21:53 ID:???
>>434
ロックとMVCCを誤解していないか?

437 :NAME IS NULL:2009/04/29(水) 02:49:25 ID:???
>434
セッション隔離とロックを分けようね。

ttp://www.postgresql.jp/document/pg837doc/html/mvcc.html
この辺。

438 :NAME IS NULL:2009/05/01(金) 12:09:11 ID:???
聞くだけ聞いて、御礼はなしか・・・。

自己解決だろうが、レスには、お礼をつけるようにな。

439 :NAME IS NULL:2009/05/01(金) 12:27:28 ID:???
ただの御礼は不要というか邪魔。
解決したかどうかの報告なら欲しいけどね。

440 :NAME IS NULL:2009/05/01(金) 12:33:47 ID:???

人間として、社会で生活する、最低限のマナー。



441 :NAME IS NULL:2009/05/01(金) 18:06:46 ID:???
クライアント側は8.1.11(centosのpostgresql-libs-8.1.11のrpm)で
サーバ側は8.3をコンパイルして利用したいと思っているのですが
互換性がないとか効率が悪くなるような問題ありますでしょうか?


442 :NAME IS NULL:2009/05/01(金) 21:16:38 ID:???
>>441
クライアントで使うのが libpq だけなら大丈夫だと思うけど、
psql を使うとテーブル表示とかでエラーになるかも。

443 :NAME IS NULL:2009/05/08(金) 23:18:09 ID:???
Vine Linux上でPostgreSQL動かしてて
XPからODBCで接続したいのだけれど

Could not connect to the server;
Asocket operation was attempted to an unreachable host.

というエラーで接続できません。

FWは切ってみても同じ。

ドライバは
PostgreSQL Unicode 8.03.04.00
PostgreSQL ANSI 8.03.04.00
PostgreSQL 7.01.00.06 (インターウィズから)
を使ってみても同じ。

PostgreSQLは8.1.4で、
pg_hba.confにはIPアドレスを追加、
postgresql.confでlisten_addresses=*。

ドライバがおかしいのでしょうか。
PostgreSQLの設定がおかしいのでしょうか。
それとも何か別の原因があるのでしょうか。

444 :NAME IS NULL:2009/05/09(土) 01:24:50 ID:???
pg_hba.conf

445 :NAME IS NULL:2009/05/09(土) 01:25:52 ID:???
変なところでEnter押しちゃった
pg_hba.confに書いてある認証方法が正しいかと
postmasterの起動オプションで外部接続おkにしてるか確認

446 :NAME IS NULL:2009/05/09(土) 15:49:51 ID:???
unreachable host.
が気になる。XPからLinuxへのODBCの設定はIPでしてるの?
打ち間違ってない?

447 :NAME IS NULL:2009/05/10(日) 10:24:28 ID:???
pingは通るのか、pgAdmin等でつながるのか、とかやってみた?

448 :443:2009/05/10(日) 20:08:29 ID:???
遅れまして。
色々調べてますが、
どうにも行き詰っています。

>>445
pg_hba.confにて接続を許可するIPアドレスは指定しています。
postmasterには
pg_ctl -o "-i" start
としてオプションつけてみました。
ただ、調べた中で、
cat /usr/local/pgsql/data/postmaster.opts
の結果が
/usr/local/pgsql/bin/postmaster -i
となればよいとありましたが、
実際には
/usr/local/pgsql/bin/postgres -i
となります。

>>446
IPアドレスでもホスト名でもやってみました。
数回試してもダメでした

>>447
pingは通ります。
pgAdminも使えるし、自作のwebツールも動きます。
いっそ全てwebでやってしまおうかと考えてしまいますが、
そうするには時間が足りない所です。

449 :NAME IS NULL:2009/05/10(日) 22:14:43 ID:???
IPアドレスじゃなくて認証方式確かめろって言ってんじゃないの?

450 :NAME IS NULL:2009/05/10(日) 22:24:43 ID:???
>>448
telnet サーバ 5432
で入力待ち状態になる? いきなり切断される?

451 :NAME IS NULL:2009/05/10(日) 23:15:24 ID:???
>>448
postgresql.confのlisten_addressesとportは?

452 :NAME IS NULL:2009/05/10(日) 23:56:36 ID:???
>>451
>>443
ポートはデフォルトなんでしょ

453 :NAME IS NULL:2009/05/11(月) 00:04:50 ID:???
iptablesとかは?

454 :NAME IS NULL:2009/05/11(月) 00:19:47 ID:???
VineってデフォでプロキシONになるんだっけ?
だとしたら多分プロキシだな

455 :NAME IS NULL:2009/05/11(月) 01:03:59 ID:???
PGって、XP Home にインストールできたか?
Pro以上じゃないと無理なのかな?

456 :NAME IS NULL:2009/05/11(月) 01:32:07 ID:???
>>455
Homeでダイジョブ

逆なら99%SELinuxだろうけどな〜

457 :NAME IS NULL:2009/05/11(月) 01:33:07 ID:???
Windows側のイベントログには何も残ってらんのかね?

458 :NAME IS NULL:2009/05/11(月) 10:26:32 ID:???
>>452
postgresql.confがデフォだと外側からlistenしない罠

459 :NAME IS NULL:2009/05/11(月) 11:07:28 ID:???
pgAdminでODBCと同じPCからつながるんなら、ポートとかは問題ないってことじゃない?
でも、自作のWebツールとわざわざ言ってるのが気になるな。
Webのプログラムは同じサーバからつなぐだろうから確認にならんからな、、、、
まさかpgAdminもローカルで動かしてたりして・・・

460 :NAME IS NULL:2009/05/11(月) 12:48:57 ID:???
いやだから認識方式

461 :NAME IS NULL:2009/05/11(月) 13:26:26 ID:???
認証でなくて?
認証確認するにしても、ODBCでやるためにはどうすればいいのか
というのもあるし、まずは順番に確認すればいいでしょ。
切り分けでtrustでつながるか試す手もあるけど。

462 :NAME IS NULL:2009/05/11(月) 14:17:55 ID:???
そうそう認証
携帯の予測変換使ったら間違っちゃった

463 :NAME IS NULL:2009/05/11(月) 14:44:48 ID:???
>>458
だからlistenは提示されてるだろ

464 :NAME IS NULL:2009/05/11(月) 14:56:30 ID:???
>>446の言うのが気になるね。
そのアドレスのホストそのものが存在してないように見える。
pingが通っているらしいが、そのpingのアドレスそのままODBCに入れてるのかな?

465 :NAME IS NULL:2009/05/12(火) 00:51:37 ID:???
>> 443
せっかくみんながヒント教えてくれてるんだから、
ちゃんと順番に切り分けて考えたらいいんじゃない?

A. Linux上にて netstat -an (等) で プロセスが listen してるか確認
B. Linux上にて psql -h [外向けのIP] で 接続できるか確認
C. XP上にて ping で Linux に到達できるか確認
D. XP上にて telnet [LinuxのIP] [ポート] で、コネクション張れるか確認
E. XP上にて pgAdmin でつながるか確認
F. XP上にて PostgreSQLドライバ の [接続テスト] でつながるか確認

適当にこれぐらいの確認ポイントを思いついたら
前から確認してみたり、後ろから確認してみたり (2分探索してみてもいいけど)
とにかく切り分けられるポイントを探そうよ。

> pgAdminも使えるし、自作のwebツールも動きます。
ってが「本当に正しい」とすれば、たぶん E と F の間が問題なわけだから
認証方式 (などの上位層) を疑うのが正解じゃないかなぁ。

これがまったくの勘違いで、pgAdminがローカルでした、ってのなら
A-F のドコなのかを きちっと切り分けないとだめでしょ。。
切り分けて、そして、そこから細分化していかないと。

# 頼むから、ping 使うべき場面で、IE 起動するようなマネだけはやめてくれ... orz

466 :443:2009/05/12(火) 12:52:23 ID:???
皆さんありがとう
引き続きやっております。

まずポートはデフォルト5432です。
pgAdminはサーバー上で動いてるのをXPから使ってます。
イベントログには特に何もないようです。
telnetは動かしてなかったので動かそうとしてみました。
が、なんだかうまくいかないので保留です。

認証方式について調べます。

467 :NAME IS NULL:2009/05/12(火) 13:07:43 ID:???
telnetで繋ぐのはtelnetじゃなくて
postgresのポートだぞ?

468 :NAME IS NULL:2009/05/12(火) 13:29:03 ID:???
Windows版pgAdminIIIをインストールしてWindowsから使ってみてよ。
というか、>>443のエラーはWinsockの10065のエラーでホストに到達できないんだけど。
ping通ったってまさかtelnetとかでサーバのコンソールからping撃ったんじゃないだろうね?
Windowsのコマンドプロンプトから打った?もしそれで通ってるならODBCのサーバの欄に
それと同じ名前で入れてるのか確認してみてよ。

469 :NAME IS NULL:2009/05/12(火) 13:36:31 ID:???
とりあえずやったことをどのマシンからどういうコマンドでどうなったかまで書いてくれ。
あと、アドレスを仮定してpg_hba.confの内容やhosts等設定した内容そのものを書いてみて。
たとえば、サーバが192.168.0.1でWindowsPCが192.168.0.2とか仮定してさ。

470 :NAME IS NULL:2009/05/12(火) 13:44:28 ID:???
あーでもプライベートアドレス使ってるんなら直接そのアドレス書いてもらった方がいいかな。
同じネットワークアドレスじゃない感じがしないでもないので。

471 :NAME IS NULL:2009/05/12(火) 22:06:53 ID:???
実はWindows機とLinux機が別のネットワークにあってファイアウォールで5432閉じられてるとか・・・
あるかな?あるかもな?

472 :NAME IS NULL:2009/05/12(火) 22:32:49 ID:???
みなさん、想像力ゆたかですね

473 :NAME IS NULL:2009/05/12(火) 22:52:57 ID:???
>>472
だって想像するしかないじゃん

474 :NAME IS NULL:2009/05/12(火) 22:57:59 ID:???
>>473
いいや、エラーメッセージの内容から>>468の通りWinsockのエラーなのは分かるんだから
認証方式がとか的外れなことを書いても仕方ない。

とにかく443はさっさと質問に答えるかアドバイスに従って追試しろよ。

475 :NAME IS NULL:2009/05/12(火) 23:53:15 ID:???
443はあからさまに頭が悪いので、放置すべきだとは思うけどね。

476 :NAME IS NULL:2009/05/13(水) 07:35:48 ID:???
そういや最初にFW切ってもダメと書いてあったが
ここを疑うべきだったかもね
ノートンとか効いてるとどうなるんだろ

477 :443:2009/05/14(木) 09:28:01 ID:???
いやまあ
反応は遅いですが

サーバー上からPing打つとかありえない想像いうか仮定してるのは
ちょっと的外れです
PostgreSQLのスレでまさかPingの打ち方を問題視するレベルの人が口を出してくるとは思ってませんでした
見込み違いのようですので
これにて失礼します

478 :NAME IS NULL:2009/05/14(木) 09:52:11 ID:???
見込み違い、そのとおり。
そんなノイズを取り除けないようならここで聞くべきではない。

479 :NAME IS NULL:2009/05/14(木) 11:39:20 ID:???
君のレベルがどの程度かわからないし、
それを指摘されてもしょうがない程度の情報しか
君が出してないと言うことになぜ気がつかない?


480 :NAME IS NULL:2009/05/14(木) 16:01:45 ID:???
477は明らかに成りすましでそ。443が馬鹿なのは確かだけどさ。

481 :NAME IS NULL:2009/05/15(金) 04:43:00 ID:???
サーバー上でrootで
# iptables -F
したら繋がる予感

482 :NAME IS NULL:2009/05/16(土) 16:02:22 ID:wSUSR8sg
ログインユーザー sasaki, yoshida, takahashi, ikeda, ....
ポストグレスのユーザー teacher
がいます。
sasaki, yoshida, takahashi, ikedaからDBの共通ユーザteacherで
ログインしたいです。
この時に
psql -U teacher -d teachers_address
として、コマンドを打つのですが、
psql: FATAL: Ident authentication failed for user "sasaki"
とでてログインできません。
ポストグレスのユーザ名とログインユーザ名が異なっていても
ポストグレスのデータベースにログインできるようにするには
何かほかに必要でしょうか?
パスワードは現在は設定していません。

483 :NAME IS NULL:2009/05/16(土) 16:05:22 ID:???
ロール設定しろ

484 :NAME IS NULL:2009/05/16(土) 16:24:05 ID:???
pg_ident.conf でマッピングできなかったっけか。

485 :NAME IS NULL:2009/05/16(土) 17:57:30 ID:???
pg_hba.confに
local teachers_address teacher  password
と追記

486 :NAME IS NULL:2009/05/16(土) 18:53:59 ID:???
サーバ側で小細工するより、素直にロールでの管理にした方がいいと思うけどね。

487 :NAME IS NULL:2009/05/17(日) 01:25:00 ID:???
そうかもね

>ポストグレスのユーザ名とログインユーザ名が異なっていても
>ポストグレスのデータベースにログインできるようにするには

これに答えることしか考えてなかった。
サーバーには他にもユーザーがいっぱいいてちゃんと管理する
(postgresにアクセスできないユーザーも作るとか)ならロールの方がいい。
けどユーザー追加するたびに設定しないといけなくね?
テストDBとかでアカウント追加したら全員teacherでアクセスできるようにするなら
postgres.confなら一回変更しておけばOK。

予想だと校内LANの本番サーバーってとこかな。あるべき論ならロール設定だけど。


488 :NAME IS NULL:2009/05/19(火) 11:16:19 ID:???
pgsql-jp 保存書庫
ttp://ml.postgresql.jp/pipermail/pgsql-jp/

が今年からアーカイブされていないけど、復活する見込みはないの?

489 :NAME IS NULL:2009/05/19(火) 22:26:52 ID:???
>> 482
単純に ident 認証したくないでだけであれば、
pg_hba.conf を編集して認証方式を ident から trust に変更すれば OK。

例えば、Unix ドメインソケット経由の接続であれば、

# TYPE DATABASE USER CIDR-ADDRESS METHOD

local all all ident sameuser



local all all trust

というように書き換えるだけ。

ただ、これだと PostgreSQL 上のユーザを指定すれば誰でも接続できてしまいます。

ident 認証で Unix システムと PostgreSQL 上のユーザの対応を記述するのであれば、
>> 484 の言うように pg_ident.conf にマッピングを定義しましょう。

pg_hba.conf を以下のように書き換えて (teachers はマップ名、任意の名前でOK)、

# TYPE DATABASE USER CIDR-ADDRESS METHOD

local all all ident teachers

さらに pg_ident.conf にマッピングを定義します。

# MAPNAME IDENT-USERNAME PG-USERNAME

teachers sakaki teacher

teachers yoshida teacher

teachers takahashi teacher

teachers ikeda teacher


ユーザが増えるごとに pg_ident.conf を編集するのが嫌なら、
以下のように記述して $PGDATA/teachers にユーザ名のリスト記述してもいいでしょう。

teachers @teachers teacher


まあロールで管理するにしても認証方式を trust にしない限りは、
ユーザが増えるたびに何かしら設定する必要はありますね。
グループロールに共通の設定を行って新規のユーザをそのロールに所属させるのがいいかな。

>> 485
パスワード認証するなら password ではなく md5 にすべきでは、
プライベートなネットワークなら問題ないと思うけど。


490 :NAME IS NULL:2009/05/19(火) 22:29:25 ID:???
>>488
中の人に言っておきます


491 :NAME IS NULL:2009/05/20(水) 09:36:35 ID:???
>>490
ありがとうございまーす

492 :NAME IS NULL:2009/05/20(水) 11:33:19 ID:IicKG2eN
PostgreSQL8.4-beta2

493 :NAME IS NULL:2009/05/20(水) 20:52:43 ID:???
>>489
>プライベートなネットワークなら問題ないと思うけど。
publicなネットワークにIP制限とか無しでDBのポート公開することなくね?
もちろんmd5に越したこと無いけど


494 :493:2009/05/20(水) 20:53:32 ID:???
ごめんなさい勘違いしてました。
忘れてください。

495 :482:2009/05/23(土) 19:15:37 ID:9SGiy29B
493も含めて勉強しました。
皆様ありがとうございます。

496 :NAME IS NULL:2009/05/27(水) 11:26:55 ID:???
http://www.sraoss.co.jp/technology/postgresql/8.4/
色々変わるけど、ALTER RENAMEが一番嬉しい。

497 :NAME IS NULL:2009/05/27(水) 23:56:18 ID:???
>>496
ALTER RENAMEってALTER TYPE RENAMEのこと?
ALTERは使う機会が少ないので、いまいち実感がわかないな

それよりもmax_fsm_{pages,relations}が消えたのがうれしいな
ウインドウ関数やWITH節が追加されたのはいいがSQLが書けねーwww

498 :NAME IS NULL:2009/05/28(木) 10:21:32 ID:???
psqlコマンドの-cでSQLを実行させた時に-vでstatement_timeoutを設定しても
無視されるんだけど、何か使い方間違ってるかな?
psql -h dbhost -d database -U postgres -t -v statement_timeout=10 -c クエリー

psqlをインタラクティブで実行してsetで設定してからSQL流すのは動作するんだけど、
そういうものなのですか?

499 :NAME IS NULL:2009/05/28(木) 11:23:51 ID:???
勘違いしてるみたいだ。スマンかった。

500 :NAME IS NULL:2009/05/28(木) 20:48:46 ID:90SWG0se
なぜかMySQLに勝てないな
知名度
おれはこっちのほうが使用経験多いけどなー

501 :NAME IS NULL:2009/05/28(木) 21:45:13 ID:???
性能で抜いたから問題ないよ
あっちは所詮読み出し番長

502 :NAME IS NULL:2009/05/28(木) 22:01:01 ID:???
MySQL作った人(名前忘れた)はSunやめて今新しいDBMSつくってるんでしょ?
多分MySQLはOracleの簡易版みたいな扱いになるんではないかと踏んでいる。

503 :NAME IS NULL:2009/05/28(木) 22:10:57 ID:???
そうか。
はい、つぎのひと。

504 :NAME IS NULL:2009/05/29(金) 03:34:04 ID:???
ぼぼぼぼくはおおおおおにぎりが食べたいんだな!

505 :NAME IS NULL:2009/05/29(金) 22:14:02 ID:???
カレー食いたい

506 :NAME IS NULL:2009/05/30(土) 05:24:16 ID:???
>>501
そんなのずいぶん昔の話じゃないの?
日本だけPostgreSQLが流行ってるのは早い頃から
ユーザーグループが日本語文章公開してたからだと思う。
今はどっちもそれなりじゃないかと思うんだけど。

FreeBSD vs Linuxみたいにならないといいなあ。
mysqlとpsqlのコマンドが似てて混乱したり
キャッシュの特性とか最適化の方法とかMySQLの分まで
覚えるのめんどい。

507 :NAME IS NULL:2009/05/30(土) 09:15:34 ID:???
>>506
日本でPostgreSQLが流行ったのってPHP3が流行りだした時に、
PHP+PostgreSQLのいわゆるマンモス本でPHPとPostgreSQLを
覚えた人が多いからじゃないかと思っている。
でその前後で石井さんのPostgreSQL本を読んだ記憶がある。

MySQLも同時期に流行りだしてたけど、当時の日本語解説本がイマイチだったのと
商用使用の場合、ライセンスがどうなのかがあやふやで悩んだな。

今は日本語の情報や構築例がどっちも数多くあるから、
どっちを使うかは開発メンバーと案件次第だな。

508 :NAME IS NULL:2009/05/30(土) 09:56:54 ID:???
そもそもPostgresが普及し始めたころ、MySQLはトランザクションもサブクエリも
まともに使えないから見向きもされていないという感じだったからなぁ。
その後欧米じゃMySQLの方が普及していると聞いても、逆に信じられないという
雰囲気だったし。

509 :NAME IS NULL:2009/05/30(土) 14:22:00 ID:???
COALESCE(null) や GREATEST(null) が text 型になるのが納得できない。

510 :NAME IS NULL:2009/05/30(土) 15:57:40 ID:???
::型 でキャストすりゃいいじゃん
何かしらの型で返答しなきゃいけないんだから
そりゃ一番汎用的な型で返してくると思うよ

511 :NAME IS NULL:2009/05/30(土) 16:40:37 ID:???
>>508
日本で流行り始めた当時はまだPostgres95の時代だったと思うけど、
・MySQLに比べて明らかに遅い
・頻繁にVACUUMする(当時はVACUUM = FULL VACUUM)する必要があり、
継続したサービスを行えない
なんていうデメリットはかなり大きかった。

MySQLがDBとしての機能の面で用途を限られていたのに対し、Postgres95は
性能と運用の面で用途を限られていた。

512 :NAME IS NULL:2009/05/30(土) 16:46:38 ID:???
95の時代流行ってたか?
6.5くらいからじゃね

513 :NAME IS NULL:2009/05/30(土) 17:03:34 ID:???
そもそもPostgres95の頃MySQLあったっけ?msqlなんてのはあったけど。

514 :NAME IS NULL:2009/05/30(土) 17:34:13 ID:???
>>510
なんで unkown 型のままじゃだめなん?と思っただけ。
型キャストしたけどさ。

515 :NAME IS NULL:2009/05/30(土) 17:40:55 ID:???
>613
一応あったけど日本に限らずどっちも使われてるってレベルじゃなかったはず
MySQLは3になってから、PostgreSQLはマルチバイトサポート入ってからあたりなので
98年とかそのくらいじゃないかねフリーRDBMSが流行りだしたのは

516 :NAME IS NULL:2009/05/31(日) 23:09:28 ID:0AQMJBED
pg_dumpをインサート文で出力した物を、psqlにてリストアすると
300MBの容量でもECCメモリ搭載サーバは60分以上時間を要し、
サーバ用途モデルでないx86_64PCでも10分でリストア完了します。
この差には何か原因があるのですか?


517 :NAME IS NULL:2009/05/31(日) 23:39:19 ID:???
>>516
なぜECCなんて関係ないものを引き合いに出す?

518 :NAME IS NULL:2009/05/31(日) 23:56:30 ID:???
性能差じゃないの
スペック晒してみなよ

519 :NAME IS NULL:2009/06/01(月) 01:42:26 ID:???
・そもそもスペックが違う
・実は設定も違う
・オチ思いつかなかった

520 :NAME IS NULL:2009/06/01(月) 02:42:59 ID:???
サーバはキャッシュ無しSCSIだったりするとディスクアクセス遅かったりするし
同じように見えても適当に処理してるPCの方が速度だけは速いこともある

521 :NAME IS NULL:2009/06/01(月) 03:31:21 ID:???
RAIDカードが壊れてたりして

522 :NAME IS NULL:2009/06/01(月) 03:42:19 ID:???
運用中でアクセスがあるサーバと自分専用のクライアントPCで比較してるんじゃないか

523 :NAME IS NULL:2009/06/01(月) 11:12:33 ID:???
TABLEの構造によるかもしれないけど、300MBで60分って掛かりすぎじゃね?

こないだサーバ連鎖死亡でリストアしまくったけど300MBぐらいだと大体2分以内だったよ。
ラージオブジェクトを多量に含んだ2Gのは、10分ぐらい掛かったけど。

スペックはXEON3300台でメモリ8G ECCとQ9550でメモリ8G nonECC。

しかし3年は持ったとはいえHPめ。一斉に死ぬとは。
コンパックの時と同じ事やりやがって、ゆるさん。

524 :NAME IS NULL:2009/06/01(月) 11:18:26 ID:???
サーバがみんな最新のだと思うなよ
最新だとしても低電圧CelelonとかVIAとかかもしれん

525 :NAME IS NULL:2009/06/01(月) 12:42:04 ID:???
restoreの時間に大きく影響のあるIO関係が全然書かれてないけど
どちらも非運用中でその速度だとメモリ以外のどっかが故障してるんじゃ?

OSから見えない負荷(RAIDのrebuildとか)かかってるとか




526 :NAME IS NULL:2009/06/01(月) 15:29:30 ID:1n52fUK4
516です。
処理の早い順にスペックを記載します。

@CPU:core2duo E6300 RAM:1GB SATA2 10分
ACPU:Xeon x5260 * 2 RAM:8GB SAS_Raid5 60分以上
BCPU:Opteron 1216 RAM:2GB SATA2 120分以上
CCPU:Xeon x3210 RAM:2GB SATA2_Raid1 120分以上

OSは、全て同じCentOS5.2_64bit版 DBは、8.3.3です。
DBチューニングも全て同じでWALのfsyncも全てonです。
唯一相違は、RAMの搭載量に応じてconfファイルのメモリー割り当て量
が若干違うのとメモリの形式が違う事ぐらいです。

また、-D無しダンプのコピー文(30MB)だと全てのマシンが1分程でリストア
を完了します。
この差は、何故?という感じです。









527 :NAME IS NULL:2009/06/01(月) 15:51:36 ID:???
>>526
リストア時は、fsyncはOFFに。多分それだけで解決するかと。

ただfsync onでも早いサーバは早いのは
なんでなんだろう。

528 :NAME IS NULL:2009/06/01(月) 16:15:30 ID:???
そういや一昔前、遅ければDROP INDEXしてダンプしろって言われたな。


529 :NAME IS NULL:2009/06/01(月) 20:53:46 ID:???
>>526

Aのメモリテストを行って正常なのを確認したうえで、ディスクをRAID5からシングルのディスクにして試してみる事はできる?
RAIDのディスクは書き込みが遅くなることが良くあるよ。それが機器構成のせいなのかコントローラのせいかは解らないけど。






530 :NAME IS NULL:2009/06/01(月) 21:44:08 ID:???
運用中なのかそうじゃないのかだけでもはっきりしろ

531 :NAME IS NULL:2009/06/01(月) 21:45:50 ID:???
最初に ECC がどうとか言ってたんだから、相手するだけ時間の無駄

532 :NAME IS NULL:2009/06/02(火) 00:37:38 ID:BU3d+dIz
>>529

Aのテストは、既に本番稼動していますので、残念ながら無理です。

533 :NAME IS NULL:2009/06/02(火) 01:56:24 ID:???
じゃあ遅い理由は本番稼動してて負荷掛かってるからだら

534 :NAME IS NULL:2009/06/02(火) 02:42:57 ID:???
>>532

RAIDでないディスクがつながっているならそちらを使って試す、って事もありかと思うけど。

どういった意図で >>516 のテストを行ったのかは不明だけど、お客の要望で調べているなら
同じマシンをしつらえて確かめるか、メンテでお休み日を狙って試すしかなさそう。

比較するなら比較したい所以外の要素をできる限り同じにしなきゃ。

例えば@が誰もアクセスしないスタンドアロンで、Aが運用中の負荷ありサーバ、これで比較したところで
せいぜい解るのが「負荷のかかるAが遅い」ってくらいの物。「そりゃそうだよねぇ」くらいしかいえない。

条件を同じにして比べたうえで「じゃあメモリ?」「じゃあディスク?」と切り分けしていかないと。


535 :NAME IS NULL:2009/06/02(火) 11:14:43 ID:???
運用中なら単純にロック取るのに時間掛かってるってだけだろ…

RAIDカードがショボいとかバッテリー無いか切れててキャッシュしてないとかでそもそも早く無い構成な気がする

遅延コミット周り調整したら多少は改善されないかな?



536 :NAME IS NULL:2009/06/02(火) 15:24:22 ID:lKPgw7jB
>>534

Aでテストした時は、DBサーバ入れ替えの為に、新たに新品
を購入しまして、コピーダンプとインサートダンプの違いを
把握したかっただけです。復旧作業所要時間把握の為

ですから社内ローカルにある@BCと基本的に同一条件での
結果でした(つまりリストア処理のみ)。

コピーダンプで障害復旧時のリストアは1分程で終わるので
問題ないレベルかなと。。。。

Webを検索してもそのような事を語っているサイトを見つけられなかった
ので、原因・対処方法をご存知の方がいらっしゃるかと思い。

その処理に限り、何故単なるPCが数倍から数十倍早いのかなぞだった
ので、raid1は早くないのは知っていましたが、違い過ぎかなと。

537 :NAME IS NULL:2009/06/02(火) 17:57:22 ID:???
PostgreSQLでデータベースクラスタを作るのには、
・PostgresForest
・PGCluster
のどちらがいいでしょうか?

また、上記以外にお勧めの構成があれば教えてください。

よろしくお願いします。

538 :NAME IS NULL:2009/06/02(火) 18:15:47 ID:???
pgpool-IIじゃダメなの?

539 :NAME IS NULL:2009/06/02(火) 19:22:03 ID:???
>>536
http://decide.cocolog-nifty.com/blog/2009/03/pg_restore-b240.html
「pg_restore 遅い」で検索したら真っ先に出てきたが。

540 :NAME IS NULL:2009/06/02(火) 19:30:45 ID:???
そもそもI/Oメインのリストアで、メモリがどうとか
I/Oのベンチも取ろうとせず、違いすぎかなとか、もうね。

541 :NAME IS NULL:2009/06/02(火) 20:46:46 ID:???
>>536

新品でも古くてもリストアしなおしても、RAIDが遅い事があるよ、ってのは変わらないです。
RAIDよりノーマルのディスクの方が速かったなんて、ミドルレンジの安いハードでならよくある話。
#H社のサーバなんかじゃよくそんな現象にぶつかる。SEさんに言って解決したためしは今のところ無い

私的にはディスクアクセスにRAIDのコントローラが付いていけてないんだと思います。I/O負荷の高そうなことをやってるみたいだし。



単に何で遅いのか・対処法を知りたかったのならもう色々レスがあるから終了ですね。


542 :NAME IS NULL:2009/06/02(火) 21:35:48 ID:???
SCSIならキャッシュないとATAより遅いよ

543 :NAME IS NULL:2009/06/02(火) 22:49:22 ID:3q/0YykO
create table hoge
( id serial not null,
"type" character varying(255)
description character varying(255)
constraint hoge_pk primary key (id)
)

ていうテーブルに

select * from hoge where type='hogehoge' order by description

というクエリでソートが発生しないようにインデックスを張ろうとおもって、
descriptionに張ったのですが、インデックスが使用されません。

どう張ったらインデックスが使用されるようになるのでしょうか。
教えてください。

ちなみにレコード数は4万件ほどで、postgres8.3です

544 :NAME IS NULL:2009/06/02(火) 23:28:19 ID:???
とりあえず第一段階はtypeとdescriptionで様子見
ただデータ内容にもよるから絶対に走らないとは言えない
データ長いから部分インデックスにした方がいい
あとインデックス気にするくらいパフォーマンスに気を遣ってるなら
せめて*はやめよーぜ

545 :NAME IS NULL:2009/06/02(火) 23:31:43 ID:???
そりゃtypeに張らにゃあ
つーか「ソートが発生しないように」は無理じゃね?

546 :NAME IS NULL:2009/06/02(火) 23:34:32 ID:???
postgresに当てはまるかどうか知らんが
「ただし、ORDER BY句の列はNOT NULLである必要があります。」だって

http://www.hi-ho.ne.jp/tsumiki/doc_1.html



547 :NAME IS NULL:2009/06/03(水) 06:36:50 ID:???
SET enable_seqscan = off してもソートするようならスキーマの問題。
ソートされないならオプティマイザの判断の問題だから、
そのインデックスに基づいて CLUSTER するしかないかも。

548 :NAME IS NULL:2009/06/03(水) 14:30:37 ID:WSowL2mJ
order by 指定で sort が発生しないという考えが理解できない
indexは検索が早くなる・かも知れない・けど、並び順と関係
あるという記述はみたことがないのだが・・・



549 :NAME IS NULL:2009/06/03(水) 14:39:06 ID:WSowL2mJ
select したデータ>バッファ内
それの order by だから、検索結果をフルスキャンしないと
順序は決められないわな・・・・
#と思うのだが

550 :NAME IS NULL:2009/06/03(水) 14:59:52 ID:???
>>548
並び順と関係のないインデックスなんて聞いたことない。

551 :NAME IS NULL:2009/06/03(水) 15:03:08 ID:???
>>538
pgpool-IIではクラスタも作れるようになっているんですね。
テストしてみます。

ありがとうございました。


552 :NAME IS NULL:2009/06/03(水) 16:08:43 ID:WSowL2mJ
>>550
(HDD上の)物理的にどこにあるかを早く探す為にあるんでしょ?
selectした結果をソートするのに、物理的な場所なんか関係
無いと思うのだが

553 :NAME IS NULL:2009/06/03(水) 17:27:55 ID:???
>>552
INDEXスキャンだと、探し出す時点でソート済みになる。

554 :NAME IS NULL:2009/06/03(水) 20:13:44 ID:???
>>550
BITMAP INDEX

555 :NAME IS NULL:2009/06/04(木) 03:48:32 ID:???
>>543

行の読み出し順と order by 句で指定した列に張られたインデクスの並び順が、少しで一致していない可能性があればソートされちゃうんじゃないかと。

(1)列type にはインデクスが張られてないから、where 句の指定によりテーブルのフルスキャンが行われる。
(2)読み出される行の順は列description に張られたインデクスの並びとは全く関係なく読み出しされる可能性がある。
(3)読み出した行のセットは order by 句の指定によりソートされる。

つまり無理なのではないかと。


試しに where 句を外したクエリを実行するとどうなるか調べてみては?
ソートが行われるかどうかのテストはできる。


556 :NAME IS NULL:2009/06/04(木) 21:21:37 ID:???
>>550
Hashインデックスは?

557 :NAME IS NULL:2009/06/04(木) 21:29:24 ID:???
>>548
BTreeインデックスはソートの代わりになります。

=> EXPLAIN SELECT aid FROM accounts ORDER BY aid;

QUERY PLAN

--------------------------------------------------------------------------------------

Index Scan using accounts_pkey on accounts (cost=0.00..3975.26 rows=100000 width=4)

(1 row)


558 :NAME IS NULL:2009/06/04(木) 21:51:41 ID:???
>>543
ソートせずにインデックススキャンしたい理由が分からない
インデックススキャンのほうが必ず速いと思っているならそれは間違い

実行計画やデータの分布を確認しないと断言できないが
description 列にインデックスを定義してもインデックススキャンにならない原因は
type 列の値が hogehoge である行が少ないからでは?

type 列の値が hogehoge である行が 4 万行に対して 10 数行しかないなら
シーケンシャルスキャンよりも 1 行あたりの処理コストの高いインデックススキャンによって 4 万行を取得し
type 列の値が hogehoge である行をフィルタリングするより

4 万行をシーケンシャルスキャンして type 列の値が hogehoge である行をフィルタリングし
10 数行をソートしたほうがはるかに速くになります

そもそも速くしたいのなら >>545 の言うようにまず type 列にインデックスを定義するべき



559 :名無し募集中。。。:2009/06/05(金) 00:25:15 ID:gMhUL+S6
4万件くらいならサーバのメモリフルに使うように設定して
テーブルの情報がメモリに載るようにすれば多少フルスキャン掛かっても問題ない

560 :NAME IS NULL:2009/06/05(金) 01:58:29 ID:???
>>558
「ソートせずに」じゃなくて「ソートが発生しないように」でしょ。
その下に書いてることも間違いだらけ。
唯一合ってるのは「type列にインデックスを定義すべき」ってとこだけ。

561 :NAME IS NULL:2009/06/05(金) 08:20:03 ID:IZGperrr
select した後、サーバーカーソルからの読み出しに有効だろう 普通> order by
indexが効くのは データの5%くらいといわれているんだけどね>Oracleの場合ね

562 :NAME IS NULL:2009/06/05(金) 17:46:03 ID:???
普通indexは行を絞れるところにしか張らない
558の考え方はソート中心であまりにも本末転倒
まあindexでソートを速くしたいってもともとの話が変なんだが・・・

563 :NAME IS NULL:2009/06/05(金) 19:18:24 ID:???
質問があるのですが、
テーブル名をワイルドカード指定することは可能でしょうか?
例えば、A0,A1というテーブル名のテーブルがあった場合、
SELECT * FROM A*;
のように、テーブル名をワイルドカード指定して、A0,A1の内容を参照したいのですが。


564 :NAME IS NULL:2009/06/05(金) 20:44:01 ID:???
>> 563
エスパーぢゃねから良く分からないけど、
DBの設計自体がおかしくね?

分かんないヤツは黙っとけ! とか言うなよ?

565 :NAME IS NULL:2009/06/05(金) 21:54:17 ID:???
>>560
hogehoge が 1 行しかない場合はソートとなり、

QUERY PLAN

-------------------------------------------------------------

Sort (cost=994.01..994.01 rows=1 width=70)

Sort Key: description

-> Seq Scan on hoge (cost=0.00..994.00 rows=1 width=70)

Filter: ((type)::text = 'hogehoge'::text)


すべての行が hogehoge の場合はインデックススキャンとなる

QUERY PLAN

-----------------------------------------------------------------------------------------

Index Scan using hoge_description_idx on hoge (cost=0.00..3551.42 rows=40000 width=46)

Filter: ((type)::text = 'hogehoge'::text)

俺の言っていること、何か間違ってるかな?
突っ込まれると自信ないが

>>562
本末転倒なことは分かっている
ただインデックススキャンが選ばれる理由を説明したかっただけ

566 :NAME IS NULL:2009/06/05(金) 23:03:27 ID:???
意図的にソートさせるのかさせないのかって話じゃないんだから(できないし)
ソートせずにじゃなくてソートが発生しないようにってことじゃないのか

567 :NAME IS NULL:2009/06/06(土) 12:00:30 ID:???
>> 563
まず
SELECT tablename FROM pg_tables WHERE tablename LIKE 'A%'
でテーブル一覧だしてからちょこちょこいじればいいんでないかい


568 :NAME IS NULL:2009/06/06(土) 12:24:14 ID:???
>>563
SQLで直接 FROM に書くテーブルにワイルドカードをするのは無理。
PL/pgSQL とかで動的SQLにするか、A0, A1 の共通の親テーブルを作って
継承 (INHERITS) する手はあるかも。

569 :NAME IS NULL:2009/06/08(月) 10:37:12 ID:???
>>565
説明は合ってるしわかるのでおk

>>563
それ、すごい感覚だね!
うまくやりたいなら、568のいうように継承使うのがいいと思う
マニュアル読んでみー
http://www.postgresql.jp/document/pg837doc/html/ddl-inherit.html

シェルでファイルいじる感覚でDB使う人もいるってことか・・・
「プログラマー」や「フレームワーク」がDBを物入れにしか使ってないのに
辟易してる場合じゃないのかもね


570 :NAME IS NULL:2009/06/08(月) 11:03:11 ID:???
>>563
プログラムで対応するのが簡単かも

たとえば、SQLで
SELECT tablename FROM pg_tables WHERE tablename LIKE 'A%';
とかで返ってきた結果をひっぱればいいんでない?

571 :NAME IS NULL:2009/06/08(月) 17:09:12 ID:???
>>569
元々SQLって非開発者の経理担当者とかでもさわれるように
開発されたモノだから、感覚としては本来の意義に近いのかもね・・・。

DBサーバーみたいに増設するのが大変なところにロジック入れるよりは
より単純な物入れにすべきだと思うけどね。APサーバー側をスケールアウト
できるように設計してで重い処理やったりキャッシュ処理やったり。
クライアントが数えるほどしかコネクション張らないならDBサーバーで
なんでもやった方が早いけどさ。

572 :NAME IS NULL:2009/06/08(月) 20:34:54 ID:???
>>566
「ソートせずに」という表現は適切でなかったと反省している

言いたかったことは「ORDER BY 句による並び替えを行わずに」と言うことではなく、
あくまで「実行計画において Sort が選択されないように」ということでした


573 :NAME IS NULL:2009/06/08(月) 20:42:14 ID:???
>>570
俺もプログラムで対応するに一票

そもそもワイルドカードでテーブル名を指定する必要があるという状況がアレだが、
無理して SQL のみ(もしくは PL/pgSQL)で対応しようとすると返って手間がかかる

574 :NAME IS NULL:2009/06/10(水) 00:15:23 ID:???
PostgreSQL 8.1

24時間常駐のデーモンが突然

ERROR: could not open relation 1663/89962/98351: No such file or directory :UPDATE
mg_site SET dt_start=COALESCE(dt_start,LOCALTIMESTAMP(0)), dt_last=LOCALTIMESTAMP(0), laststat='200', active=true WHERE site_id=10

と出て落ちたんですが、これってどういうエラーなんでしょうか?
心当たりとしては、この時間帯はちょうどcronジョブで VACUUM FULL + ANALYZE + REINDEX が走ってたんですが
それでこんなことになりますか?

デーモン自体は再起動して何事もなかったかのように動いています。

575 :NAME IS NULL:2009/06/10(水) 08:36:36 ID:???
DiskのIOエラって事はないですか。

576 :NAME IS NULL:2009/06/10(水) 20:08:42 ID:???
ERROR では落ちる (=クラッシュ) することは無いんだが、単に言葉遣いが
いい加減なだけかな? 8.2 より昔のバージョンだと、REINDEX とぶつかって
そのエラーになることはあり得る。単にクエリをリトライするしかないと思う。

577 :NAME IS NULL:2009/06/10(水) 22:43:06 ID:???
あぁ落ちるというのは当方の常駐プロセスがエラーを吐いてexit()するという意味で使いました。

REINDEX との衝突で起こるのですか。
トランザクションモードとかロックとかで回避できるものでもないんですかね。

瞬間的な事象なら素直にロールバックしてリトライしますが
REINDEXしてる間ずっと起こる可能性があるのは困るですね。

ありがとうございました。

578 :NAME IS NULL:2009/06/10(水) 23:37:12 ID:???
というかこのいかにもDB壊れましたみたいなメッセージを
リトライ対象にするって怖いんですけど。。。

579 :NAME IS NULL:2009/06/11(木) 07:27:13 ID:???
REINDEX は物理ファイルを交換する。このエラーメッセージは
古いほうのファイルを見に行ってしまい、ファイルが無いと言っている。
リトライすれば新しいファイルが見えるので大丈夫。

まぁ、ディスクが壊れてファイルが無くなっちゃった時にも
同じメッセージになることはあるから、リトライ回数に上限は必要かも。
8.3 以降ならちゃんと新しいファイルを見に行くようになったから、
リトライするのが心配ならアップグレードしましょう。

580 :NAME IS NULL:2009/06/11(木) 23:40:25 ID:JRzTn4Mz
ODBCで外部PCのDBにアクセス中にLANを引っこ抜いたりすると、
psqlodbc35w.dll(オフセット00046bb1だったっけか)で落ちることが
あるんだけど、こんなもん??
パターン掴んでないから詳細はわからんけど、
誰か原因の予想つく人教えてくださいな。
<PC環境>
 ・OS:WinXP SP2
 ・PostgreODBC:ver.8.3.4
 ・H2DB 使用
 

581 :NAME IS NULL:2009/06/13(土) 08:07:19 ID:???
知らんがな

582 :NAME IS NULL:2009/06/13(土) 08:13:22 ID:Pbq7ki72
8.3.4から使えるwindow関数っていいね。rank()で順位簡単に出せるようになったり。

583 :NAME IS NULL:2009/06/13(土) 12:24:24 ID:???
8.4からじゃね?>window関数

584 :NAME IS NULL:2009/06/13(土) 20:33:23 ID:???
間違った。8.4.3か。

585 :NAME IS NULL:2009/06/13(土) 20:36:23 ID:Pbq7ki72
まだβか。いつ頃正式リリースなんでしょね?

586 :NAME IS NULL:2009/06/13(土) 22:19:27 ID:???
8.4.3から使えるのかw

587 :sage:2009/06/13(土) 23:45:26 ID:???
FreeBSDのportsはまだ8.3.7だったからソースからインスコしたべ。

588 :NAME IS NULL:2009/06/14(日) 18:31:33 ID:???
8.3.7 が安定版では最新だから。8.4RC1がそろそろ出るみたいだけど。

589 :NAME IS NULL:2009/06/16(火) 08:49:31 ID:YNjSFTFS
PostgreSQL8.4 RC1

590 :NAME IS NULL:2009/06/17(水) 19:53:43 ID:3VT5X4sH
8.4.3でpg_dump使ってバックアップしようとしたらロール関連のエラーで出来なかったのでやり方が悪かったかもしれないが仕方ないので、dataディレクトリごとtarで固めてバックアップしてバックアップ先で展開したら普通に動いたけどこんなもんなん?

591 :NAME IS NULL:2009/06/17(水) 20:41:40 ID:???
pg_dump は ROLE をダンプしないので、先に作成しておかないとダメ。
pg_dumpall で ROLE もまとめてダンプするか、
pg_dumpall --roles-only + pg_dump なら期待の動作になるはず。

8.4.3 にはツッコまずにおく。


592 :NAME IS NULL:2009/06/17(水) 22:35:46 ID:???
初物には手を出さずに2バージョンくらいは様子見るんですねわかります

593 :NAME IS NULL:2009/06/18(木) 23:54:40 ID:???
スレチと思いますが、postgresqlのダウンロード方法について教えてください。
私はVISTAを使っています。ユーザーアカウント制御をして、いざダウンロードをしようとしたら、モジュールを加えるのを選べみたいな文字が出てきます。
ちなみに英語版のpostgresqlをインストールしようと思っています。
適当に選んでダウンロードしてもうまくダウンロードできません。
そもそも、モジュール (Module)とは、「工学などにおける設計上の概念で、システムを構成する要素となるもの」(WIKI)らしいです。
意味がわかりません。ダウンロードがうまくいかないのはたぶん、このモジュールの選択にある気がします。いろいろ調べてもこのモジュールの選択についてはどこにも記載がないです。

すみませんが、助けてください。お願いします。ちなみに難しいパソコン用語は全くわかりません。でも、がんばって調べます。
よろしくお願いします。


594 :NAME IS NULL:2009/06/19(金) 00:34:45 ID:???
>593
なんか物凄く難しくしてるな。ダウンロード以前の問題だから。

595 :NAME IS NULL:2009/06/19(金) 00:38:38 ID:GeJezkbU
なぜpostgresqlを選んだのか教えてくれ。話はそれからだ。

596 :593:2009/06/19(金) 01:47:35 ID:???
インストールしようとしたら、モジュールというのがたくさん選べる感じなんです。
インストールマニュアルにはそんなこと書いていませんでした。
postgresqlを選んだのは、外国のゲームに必要らしいのです。画面上に成績を表示させるみたいな感じでしょうか。

インストールまでの、initialize database clusterという画面から、ユーザーネームやパスワード等を入力して次の画面にいくと、enable procedural languagesという画面になって、pl/pgsqlというのにチェックが入ってます。
次の画面で、enable contrib modulesという画面になり、adminpackやら、isn、xml2等といったチェックする項目がたくさん出てきます。それと、
initialize database clusterという画面では、encodingでは、WIN1252を選べと書いてありました。

これほどのものは、コンピューターのプロでない人にとっては、わかるはずもありません。というか、自分が何してるのかもわかりません。





597 :NAME IS NULL:2009/06/19(金) 02:50:37 ID:???
クライアントにデータベースサービス要求するとかどんだけ鬼畜なゲームだよw
てか、ダウンロードで困ってるのかインストールで困ってるのかはっきりすれ

598 :NAME IS NULL:2009/06/19(金) 07:29:20 ID:???
インストールの意味でダウンロードという単語を使っているぽいな。
とりあえず、ぜんぶデフォルトのまま「次へ」で良いんじゃないの?
ちゃんと理解したいなら、「PostgreSQL インストーラ」で検索すれば
解説サイトはすぐ見つかるから、好きにしてくれ。

599 :593:2009/06/19(金) 08:10:37 ID:???
>>597
ダウンロードとインストールって別モノだったんですかぁ、知りませんでした。Σ( ̄□ ̄lll)
困っているのインストールが正常にできないということです。

インストールの途中で、エラー、failed to connect to database. procedural languages files are installed, but are not activated in any databases.
(データベースへの接続に失敗しました。ファイルは、インストールされますが、どんなデータベースも動きません。ヤフー翻訳機より。)

と、でてきます。OKを押すと、再びエラー、could noo connect to sever: connection time out [0x000274c/] is the server running on host `127.0.0.1` and accepting tcp/ip connections on port 5432?
(次のものを切断するために接続することができませんでした:接続タイムアウト[0x000274c/]はホスト上で作動するサーバーです「127.0.0.1「またポート5432上のtcp/ip接続を受理すること ライブドア翻訳機)

とでてきます。そしてまたOKを押すと、エラー、failed to connect to the `templete1` database. contrib files are installed, but are not activated in any databases.
(『templete1』データベースに接続することをできません。contribファイルはインストールされるが、少しのデータベースでも動かされません。 ヤフー翻訳機)

とでてきます。そのご、インストールはきちんとされたのかわかりませんが、一応スタックビルダというのが出てくるようになります。

しかし、これではダメっぽいです。きちんとユーザーアカウント制御をして再起動もしています。モジュールはわからないので、とりあえず全部の項目にチェックを入れてみました。
でもダメでした。(o´_`o)ハァ・・・
やっぱりVISTAが悪いのかな。私の頭が悪いのはいうまでもありません。

参考にしている外国のサイトです。http://www.holdemmanager.net/faq/afmmain.aspx?faqid=176

600 :593:2009/06/19(金) 09:21:57 ID:???
>>598

デフォルトでもやりました。しかし、同じくエラーになりました。


夜までパソコン環境にありませんので、また夜にこのスレをのぞかせていただきます。

601 :NAME IS NULL:2009/06/19(金) 10:32:52 ID:???
>>593
ゲーム諸共あきらめることをすすめる。

そもそもデータベースなんてのはパソコンのライトユーザが直接触って使うような種類のプログラムではない。
時間の無駄だよ。

602 :NAME IS NULL:2009/06/19(金) 10:56:32 ID:???
593 は大馬鹿かキチガイか釣りじゃなければ
天然さんだと思うのだけど、大化けすることを期待して

ttp://allabout.co.jp/internet/database/closeup/CU20080412A/

を参考にしてみては。

603 :NAME IS NULL:2009/06/19(金) 11:15:03 ID:???
具体的にゲームって何ていうゲーム?

604 :NAME IS NULL:2009/06/19(金) 11:18:19 ID:???
ここの住人の反応を楽しむゲームです

605 :NAME IS NULL:2009/06/19(金) 12:56:16 ID:eE7inlmt
>>593
いいからそのゲーム名を晒せ。
晒せるか?どうなんだ?

釣りとかするつもりじゃないよな?

606 :593:2009/06/19(金) 14:16:35 ID:???
釣りなわけありません。携帯からですみません。私は文系なので理系、パソコンはさっぱりです。法律でわからないことがあれば、ほぼ全てのことが回答できますよ。

ゲームはエベレストポーカーっていうものです。そしてpostgresqlはその相手の行動をみるためにホールデムマネージャー(上記のURL)というソフトを起動するために必要らしいのです。

>>602さん、今は携帯しなく、そのサイトをみることができませんでしたが、夜にはみて頑張ってみます。ありがとうございます。

ライトユーザーどころか、インターネットユーザーレベルなのです。それなので、このような高レベルのスレに書き込むのは場違いすぎるのはわかっています。低レベルな話をしていて本当にすみません。

607 :NAME IS NULL:2009/06/19(金) 15:05:13 ID:???
がんばれ

608 :NAME IS NULL:2009/06/19(金) 15:54:18 ID:???
>ライトユーザーどころか、インターネットユーザーレベルなのです

新しいな。ワロタ。とにかく死ね

609 :NAME IS NULL:2009/06/19(金) 16:00:10 ID:???
まぁまぁ。
PostgreSQL ユーザが一人増えたと歓迎しましょう。

とはいえ、インストールが終わっても
pg_hba.conf あたりでハマりそうだから、
帰宅途中に本屋に行ってシーラカンスの絵の
PostgreSQL の本 ( 今はもっといいのがあるかな? ) でも
立ち読みするといいよ。

610 :NAME IS NULL:2009/06/19(金) 16:07:03 ID:???
このレベルでシーラカンス本が読めるかなあ

611 :NAME IS NULL:2009/06/19(金) 16:17:51 ID:???
『PostgreSQL 徹底入門 8対応』はどうなんだろうね。
Windows 対応もしているし。

612 :NAME IS NULL:2009/06/19(金) 20:26:46 ID:???
>>593
http://jbbs.livedoor.jp/bbs/read.cgi/game/15823/1234405784/63-


613 :NAME IS NULL:2009/06/20(土) 05:51:11 ID:GLSNLz3f
マルチで自己解決しました。

614 :593:2009/06/20(土) 19:42:42 ID:???
日本語のposygresqlを試しにダウンロードしてみたら、英語の場合と同じように、インストールの途中でエラーが起きました。

データベースへの接続に失敗しました。インストールされる手続き言語ファイルは、どのデータベースでも活動的にされません。と表示されます。

そして、えらー、template1データベースの接続に失敗しました。contribファイルは、いくつかのデータベースでインストールできますが、回復できません。と表示されます。

よくわかりませんが、色々と調べてみたいと思います。

たぶん、これが真の原因の気がします。近所の書店に行きましたが、シーラカンスの表示の本どころか、postgresqlに関する本がおいてありませんでした。


615 :NAME IS NULL:2009/06/20(土) 20:07:36 ID:???
マルチは相手にされないよ。

616 :NAME IS NULL:2009/06/20(土) 22:02:46 ID:???
さっぱり理解できていないのに「真の原因」とか言わないほうが良いよ。

手続き言語やcontribの登録の段階で失敗しているということは、
インストール中の initdb か、その直後のサーバの開始で失敗したと思われる。
実行ファイル自体はインストールできているようだから、
手で initdb したり pg_ctl start したりすれば切り分けできるかもしれない。
...エラーメッセージを読む程度の能力があれば、だが。

617 :NAME IS NULL:2009/06/21(日) 00:33:14 ID:???
文系だから分かりませんってのは、得てして文系を免罪符にして
理解する努力をしていないカスだ、などと文系の俺が釣られてみる

618 :NAME IS NULL:2009/06/21(日) 03:19:09 ID:???
むしろ文系なら正しく日本語で説明しろと言いたい

619 :NAME IS NULL:2009/06/21(日) 03:45:50 ID:???
文系と正しい日本語はあまり関係が無かったりする

620 :NAME IS NULL:2009/06/21(日) 07:16:11 ID:???
"エベレストポーカー"で検索したんだけど、オンラインカジノのソフトウエアなのね。

まぁ、それは置いておき、ポスグレが本当にVistaに入らないか試してみた。
日本PostgreSQLユーザ会から 8.3.7 をダウンロードして、インストール時に聞かれるモジュールは標準のままの指定。
きっちりインストールできるし、スタックビルダも立ち上がるしダウンロードからインストールまでできた。
pgAdminIIIで接続できるのも確認。
データベースクラスタの初期化画面で Localeを English,Ireland、Encodingを WIN1252 にしても一緒。
インストール時の言語をEnglishにしても同じ。


Vistaは日本語版?
たしか >>600 にはデフォルトでもダメだったと書かれているけど、デフォルトでインストールしたら
言語はJapaneseだし、LocaleはCだし、Encodingは Server:UTF-8,Client:SJIS になってるけど。

また、593の言う「initialize database clusterという画面では、encodingでは、WIN1252を選べと書いてありました。 」を
確認してみたけど、件の取り説ページには明示的にエンコーディングを WIN1252 にしなさいとは書かれてない。



なので、>>641で書いてる「インストールの途中でエラーが起きました」も実はPostgreSQLのインストールとは違う部分での話しな気がする。
593は意図的に隠しているのか、天然で抜けてるのか、特殊環境を使ってるのか、よく解らない。


621 :NAME IS NULL:2009/06/21(日) 07:25:02 ID:???
って、ことで593はスルーで。

622 :NAME IS NULL:2009/06/21(日) 08:48:51 ID:???
俺も普通にインストールできたぞ。593よ、インストールできたら原因がなんだったか書き込んでくれ。気になる。まぁ頑張れ。

623 :NAME IS NULL:2009/06/21(日) 09:13:29 ID:???
initdbしてないだけだろ。>593

624 :NAME IS NULL:2009/06/21(日) 09:19:21 ID:???
>>600 はいかにもおっちょこちょいで思い込み激しい感じに対して
>>620 おまえ普通に賢くて問題解決能力あるよなぁ。

この差はどうしようもないんだろうなと思う。

625 :NAME IS NULL:2009/06/21(日) 10:34:03 ID:???
畑違いとはいえこの体たらく
これで法律をあつかうのか。。。

626 :NAME IS NULL:2009/06/21(日) 12:20:13 ID:???
>>593は、そのインストールスクリプトを走らせるだけでインストールできると思ったものの、できなくてレスのリンクにあるPTの掲示板と2chにマルチで丸投げしている奴だよな。
こんな問題も分析、解決できない奴が何できるの?

627 :NAME IS NULL:2009/06/21(日) 15:57:00 ID:???
>>626
法律については何でも解答できるらしい・・・

>>606参照

628 :NAME IS NULL:2009/06/21(日) 18:36:21 ID:???
つーかそのリンク先にくわしいやり方も載ってるじゃない
選択肢がいっぱい出てきてたって、その説明に載ってないなら
そのまま次に進めばいいだけなのに、何を迷ってんだか。

インストールしたら初期DBを作成してそこから始めるのに
作成する前にいきなり使おうとしたエラーだな。
作ってないのに接続しようとしたら「データベースへの接続に失敗しました」と出るのは当たり前。

629 :NAME IS NULL:2009/06/21(日) 21:18:42 ID:???
いやー、伸びてるなぁ、と思ったら釣りでしたか

630 :NAME IS NULL:2009/06/22(月) 19:19:47 ID:???
バイナリデータを保存すべく、base64_encodeしてphpPgAdminからINSERTしようと下記のエラーになってしまいます。
textは無制限だと思ったのですが、どこか設定する必要があるのでしょうか?

■phpPgAdmin
4.2.2

■PostgreSQL
7.4.5

■SQL
INSERT INTO "public"."image" ("id", "base64") VALUES (nextval('public.image_id_seq'::text), '10544バイトの文字列')

■エラー
ERROR: index row requires 10560 bytes, maximum size is 8191

■テーブル
CREATE TABLE image (
id SERIAL PRIMARY KEY,
base64 text NOT NULL
);

631 :NAME IS NULL:2009/06/22(月) 20:30:09 ID:???
base64カラムにインデックス設定してない?
インデックスは8kB以内という制限に引っかかってるように見える。

632 :NAME IS NULL:2009/06/23(火) 02:34:25 ID:???
素直にbyteaで入れればいいじゃん

633 :630:2009/06/23(火) 09:52:53 ID:???
ありがとうございます。
見たらINDEX作ってました。削除したら問題なくINSERTできました。

byteaではなくtextなのは、dumpしやすいなどの記事を見たからって程度で特に理由はないです。


634 :NAME IS NULL:2009/06/23(火) 11:22:56 ID:???
インデックスで検索したいならば、データ全部じゃなくて
ハッシュ値とかにしたほうが良いかもね。

635 :NAME IS NULL:2009/06/23(火) 23:33:50 ID:l3lcnlya
>>2 の 関連過去スレ「PostgreSQLについて語ろう where OID=2::oid (雑談part2)」で、
percentile(百分位数)や quartile(四分位数)を求める集約関数を作ろうとして、
C言語によるユーザ定義関数でのヒープについて質問した者です。
その後、結局は挫折してしばらくほっといたんですが、食わず嫌いで何となく避けてた
PL/pgSQL をこのほど使ってみたら、いとも簡単に解決しました。
で、お尋ねしたいのですが、この PL/pgSQL みたいな手続き型言語って、postgreSQL に
特有のものですか、それとも他のDBサーバ(Oracle や MySQL など)でも普通に用意
されていて、普通に使うものなんでしょうか? 言語仕様も含めて同様なものを備えて
いるのかな? pgsql に特有なものにあんまり入れ込んでもちょっとアレだしなぁ、
と思ってお尋ねします。

636 :NAME IS NULL:2009/06/23(火) 23:45:54 ID:???
そもそもPL/pgSQL自体、OracleのPL/SQLを参考に作られてる物だから
そこら辺は気にしすぎない方が良いと思う
MSSQLServerでもTransact-SQLとかあるし
言語仕様はそりゃDB特有の部分はあるだろうけど

637 :NAME IS NULL:2009/06/23(火) 23:48:49 ID:???
PL/pgSQL 自体は PostgreSQL に特有なものです。
Oracle には PL/SQL という似ているものがありますが、いろいろ違います。
が、こういうのを ストアドプロシージャ (stored procedure) と総称します。
んで、ストアドプロシージャは、DBMS によってあったりなかったりします。
# PL/SQL を PL/pgSQL に移植するオシゴトがあるとかないとか。

PostgreSQL では他にも、PL/perl やら PL/python やら PL/ruby なんてものがあったりもします。

638 :635:2009/06/23(火) 23:54:41 ID:???
>>636 そうですか。
ヘンタイ とか キティガイ とか後ろ指さされずに使えるってことですね。 安心しました。
ありがとうございました。

639 :NAME IS NULL:2009/06/24(水) 07:55:04 ID:???
>>635 次期バージョン8.4ならWindow関数が使えるかも。> percentile, quartile


640 :NAME IS NULL:2009/06/24(水) 23:03:20 ID:f8jm41Kv
すみません、質問します。

solaris10にバンドルされているpostgresql8.3を起動させたく、
#svcadm enable postgresql_83:default_32bit
とコマンドを打ってみたのですが、
svcs -a
で確認してみるとpostgresql_83:default_32bitがmaintenance状態になっています。
svcs -x postgresql_83:default_32bit
で確認してみると、
原因:再起動が速すぎます
と出ます。
svcadm clear postgresql_83:default_32bit
としてみたのですが変わらずmaintenance状態です。

solarisはVMware上で動かしています。
solarisの設定はインストール時から特に変えていません。

なぜ動かないのかが分らず頭を抱えています。
どこか設定など足りない箇所があるのでしょうか。
どなたか詳しい方居りましたら教えて頂けないでしょうか

641 :NAME IS NULL:2009/06/26(金) 15:29:02 ID:???
solarisユーザー少ないからなあ
unix板のSolaris for x86スレで聞いてみたら?

642 :NAME IS NULL:2009/06/26(金) 17:05:16 ID:???
/var/adm/messagesとか

643 :593:2009/06/26(金) 19:56:03 ID:???
ようやくインストールできたので書き込んでみます。

あれから、いろいろ調べ、ポスグレの本とか買ったりして試してみたものの、やはりインストールが正常にすることができませんでした。

もちろん皆さんが指摘してくれたことも、本とか参考にしながらやってみたもののできませんでした。

そのうち、windowsインストーラの調子が悪くなり何もインストールができなくなりました。

仕方ないのでパソコンをリカバリして再びダウンロードしてみたら、普通にダウンロードできました。

なので、理由は不明です。きっと気づかぬうちに変な設定をしていたのでしょうか。

協力していただいたみなさんありがとうございました。特に>>620さんは、わざわざポスグレをアンインストールして、インストールしてくださったんだと思います。

本当にありがとうございました。


644 :NAME IS NULL:2009/06/27(土) 18:32:06 ID:baFtvEKM
>>643
今度から質問する前にリカバリすれ。

645 :NAME IS NULL:2009/06/27(土) 21:12:52 ID:???
>>643
たぶんウィルスに多数感染してたんだとオモワレ

アーメン

646 :NAME IS NULL:2009/06/28(日) 09:11:45 ID:???
8.4.0 Release date 2009-07-01

647 :NAME IS NULL:2009/06/30(火) 16:19:49 ID:cTyHSoG+
Mac OS Xで表計算ソフトのような形で
ビューしているデータを紙にプリントしたいのだが
何を使えばいいのかな?

648 :NAME IS NULL:2009/06/30(火) 16:31:25 ID:???
Access

649 :NAME IS NULL:2009/06/30(火) 20:55:48 ID:???
PHP+TCPDF

650 :NAME IS NULL:2009/07/02(木) 02:01:22 ID:???
8.4.0が出たのになにこの盛り下がり

651 :NAME IS NULL:2009/07/02(木) 02:55:02 ID:???
以前は再帰SQLなWITH RECURSIVEの実装を心待ちにしていたが、
今、WITH RECURSIVEを使いたくなるような案件がさっぱり無いや。

652 :NAME IS NULL:2009/07/02(木) 09:52:53 ID:???
>>490
忙しいのかな…。

653 :NAME IS NULL:2009/07/02(木) 09:54:22 ID:???
Windows 版 PHP 5.3.0 の php_pgsql.dll が壊れていて
PostgreSQL が使えないのだけど、どうしてる?

654 :NAME IS NULL:2009/07/02(木) 22:15:32 ID:???
>>653
使わない。以上。

655 :NAME IS NULL:2009/07/03(金) 06:28:57 ID:???
こんなところに書き込んでないで、メンテナに報告してきたら?

656 :NAME IS NULL:2009/07/04(土) 09:17:14 ID:eygNMagZ
>>653
なに?
じゃあPHPのバージョン下げるばいいじゃないかって?

お、ま、まさか、、、今頃

657 :NAME IS NULL:2009/07/05(日) 21:07:49 ID:???
会社でpostgreSQLでDB運用されてるんで勉強しようと思ったけど
windowsでインスコする場合に
ver8.1〜ver8.4で何が違うのか教えていただきたい

658 :NAME IS NULL:2009/07/05(日) 22:40:25 ID:???
>>657

日本PostgreSQLユーザ会のリリースニュースから辿って調べてみては?
http://www.postgresql.jp/news


8.1
見つかんない

8..2
http://www.postgresql.org/about/press/presskit82.html.ja

8.3
http://www.postgresql.org/about/press/presskit83
http://www.postgresql.org/about/press/features83

8.4
http://www.postgresql.org/about/press/presskit84.html.ja



ソース取得して ChangeLog 読めば事細か書いてあるんじゃないかと思う。


659 :NAME IS NULL:2009/07/06(月) 00:02:21 ID:???
>>658
ちょっくら読んで調べてみます
こんな初心者丸出しの質問に答えてもらってありがとうございます

660 :NAME IS NULL:2009/07/06(月) 02:10:24 ID:???
MERGE文使えるようにならんかなあ・・・

661 :NAME IS NULL:2009/07/06(月) 02:51:26 ID:???
>>660
使えるようにしちゃいなよ!
オープンソースの醍醐味だよ!!

662 :NAME IS NULL:2009/07/06(月) 10:19:10 ID:???
contribに入るようになればいいね

663 :NAME IS NULL:2009/07/07(火) 00:36:32 ID:vLTSOaRu
お教えください。
WinXP+PostgreSQL8.3+IIS5.0+ASP(VBScript)でwebアプリを作っています。
webサーバ内にDBMSを同居させて、OLEDBで接続しています。
つまづいているのはレコードセットでの更新です。

こんな感じのコードを書いているのですが(VBScript)↓

Set objCon= Server.CreateObject("ADODB.Connection")
Set objRS = Server.CreateObject("ADODB.Recordset")
objCon.ConnectionString = Application("ConStr")
objCon.Open

strSQL = "SELECT * FROM M_HOGE"
strSQL = strSQL & " WHERE HOGE_CODE1 = '" & i_hoge_code2 & "'"
strSQL = strSQL & " AND HOGE_CODE2 = '" & i_hoge_code2 & "'"
objRS.Open strSQL, objCon, 3
if objRS.EOF = false then
objRS.edit
objRS.Fields("HOHO").Value = "12345"
objRS.update
end if
objRS.close

このコードを実行しても、「HOHO」フィールドに「12345」が入らないのです。
なお接続文字列は以下の通りです。

Provider=PostgreSQL OLE DB Provider;Password=XXX;User ID=XXX;Data Source=localhost;Location=TESTDB;

なおレコードセットを使用せずにUPDATE文で記述すると正常に更新されます。
が、バイナリファイルをbyteaフィールドにstreamで格納する要件があるため、レコードセットは
避けて通れないのです。。

詳しい方いらっしゃいましたらアドバイスお願いいたします。


664 :NAME IS NULL:2009/07/07(火) 01:45:06 ID:???
どう考えてもASPの質問じゃないのかそれ

665 :NAME IS NULL:2009/07/07(火) 02:42:23 ID:???
>>663

入らないってのはエラーも出てないのに入らないって事ですか?

エラーが出てるならそのエラーメッセージが無いと解らないと思いますよ。
もし、

 ADODB.Field: 現在の Recordset は更新をサポートしていません。プロバイダか、選択されたロックタイプの限界の可能性があります。

なんてエラーメッセージならあなたの執った方法では無理、って事です。


666 :NAME IS NULL:2009/07/07(火) 12:37:21 ID:R630TAvO
.CursorLocation = adUseClien 追加でどう?
#SQL鯖だと鯖カーソル無いから、つければとおりそうだけど
#pgsqlは不明

667 :NAME IS NULL:2009/07/07(火) 18:12:06 ID:i53/51Ym
>>663
>objRS.Open strSQL, objCon, 3

objRS.Open strSQL, objCon, 2, 3
(objRS.Open strSQL, objCon, adOpenDynamic, adLockOptimistic)
にしてみたら?

あと、なるべく”2”とか”3”とかの「単なる数字」じゃなくて定数を使った方がいいと思う。

668 :NAME IS NULL:2009/07/07(火) 22:44:40 ID:vLTSOaRu
663です。みなさまありがとうございました。
エラー取得してみたら、まさに「現在の Recordset は更新をサポートしていません。」が出力されていました。
そこでCursorType、LockType、、をご教授のように変更してみましたがなぜか反映されず。
(下のような感じ)
objRS.CursorType=2
objRS.LockType=3
objRS.CursorLocation=3

四苦八苦の結果、OLDDB接続をODBC接続に変更したら書き込まれるようになりました。
OLEDBドライバにはバグがあるのでしょうか。。?

ともあれ。本当にありがとうございました。

669 :NAME IS NULL:2009/07/07(火) 23:06:19 ID:vLTSOaRu
引続き663です。いつもお世話になります。
先の投稿で少し触れていましたが、byteaフィールドに画像データを書き込む要件があります。
で試してみたのですが、やはり上手くいきませんでした。
こんな感じです。

<テーブル>
create table m_hoge {
my_id character(5) NOT NULL,
my_image bytea
constraint m_hoge_pkey primary key(id)
}
<ソース(抜粋)>
・・・
Set objStream = Server.CreateObject("ADODB.Stream")
objStream.open
objStream.Position = 0
objStream.Type = 1 'adTypeBinary
objStream.LoadFromFile "<file path>"
objRS.Fields("my_image").Value = objStream.Read
<ここでエラー発生>

エラー内容は「複数ステップの操作でエラーが発生しました」です。
格納する画像ファイルは3Kバイト程度ですが、DefinedSizeでmy_imageフィールドのサイズを
チェックしたところ255(byte?)と出力されていました。格納領域が足りないからエラーと
なっている感じなんですが、解決方法が判りません。。

重ね重ね恐縮ですが、何卒お知恵をお願いいたします。




670 :NAME IS NULL:2009/07/07(火) 23:11:53 ID:???
>>669
だからスレ違いだと

671 :NAME IS NULL:2009/07/08(水) 20:04:39 ID:???
timstamp 型で now で INSERT すると
2009-07-08 20:00:00.035189 のように .035189 というのが付きます。
これを付かないようにするにはどうしたらいいでしょうか?

672 :NAME IS NULL:2009/07/08(水) 21:14:13 ID:???
>>671
自分はnowじゃなく CURRENT_TIMESTAMP(0) でやってる。
トランザクションの開始時刻なので、それで問題なければ。

673 :NAME IS NULL:2009/07/08(水) 21:18:24 ID:???
>>671

www=#
www=# select date_trunc('second', localtimestamp);
date_trunc
---------------------
2009-07-08 21:15:56
(1 row)

www=# select date_trunc('second', now());
date_trunc
------------------------
2009-07-08 21:15:57+09
(1 row)

www=#

localtimestamp にTZが付かないのでそっちを使ってみた。


674 :NAME IS NULL:2009/07/09(木) 01:02:42 ID:???
>>671
値を保存する側の列を timestamp(0) で定義すべきじゃないの?

675 :671:2009/07/09(木) 10:02:24 ID:???
>>672-674
ありがとうございます。
特に考えはなく、何かの本に書いてあったのでそのまま now してました。
応用きかなくて申し訳ないのですが、

created_at timestamp default now(),

の場合はどうでしょうか。

676 :671:2009/07/09(木) 10:23:13 ID:???
created_at timestamp(0) default now() でうまくいきました。
これでいいのでしょうか?

677 :NAME IS NULL:2009/07/10(金) 14:38:17 ID:AjxJ6BfF
うまくいったんならいいんでないの?
それ以上何か求めてるらしいが。

678 :671:2009/07/10(金) 14:55:44 ID:???
うまくいった方法が正しかったり定石じゃないことがあるので確認してみました

679 :NAME IS NULL:2009/07/10(金) 17:18:01 ID:???
定石などない

680 :NAME IS NULL:2009/07/11(土) 00:42:25 ID:???
な事はないと思うが、別に反論するネタもないという
事でわ?

681 :NAME IS NULL:2009/07/11(土) 13:50:32 ID:???
秒未満の情報を捨てるのはもったいない気がしないではない。
ミリ秒まで保存しておいて、表示のときに timestamp(0) にキャストしても良いかも。

682 :NAME IS NULL:2009/07/13(月) 18:30:25 ID:???
DBからはミリ秒付でとってきて表示するView(フォームのテキストボックスとかjspとかphpとか)で
見た目を決めるのが定石なんじゃない?
同じデータでも管理画面では詳細まで、メンバー画面では日付までしか表示しないとか
簡単に切り分けられるように。

そもそもDBにミリ秒が要らないならまあそれでもいいけど

683 :671:2009/07/13(月) 18:44:25 ID:???
なるほど。
View にしても、日付のチェックにしても、
毎回ミリ秒を捨てていたので、
最初からミリ秒なしにできないかな、という考えでした。

684 :NAME IS NULL:2009/07/13(月) 23:53:04 ID:???
貧乏性なおれは要らなくてもとっといてしまう。

685 :NAME IS NULL:2009/07/14(火) 14:41:17 ID:???
で、低速マシンとの相乗効果で速度ガタ落ち

686 :NAME IS NULL:2009/07/14(火) 16:15:05 ID:???
何言ってんの

687 :NAME IS NULL:2009/07/16(木) 00:29:58 ID:???
dateといえば
to_date関数の仕様が変わっててびっくり。
ある仕事でなぜか年月日がばらばらに保存してある
テーブルに出会ったので日付でbetweenするために
使ってみたんだけど、確かバージョン7.4。8.3にしたらエラーだわ。
将来メンテする人には気の毒なことしてしまった。

688 :NAME IS NULL:2009/07/16(木) 01:29:39 ID:???
>>685
dateに限って言えば内部は1970/1/1からのミリ秒をlongで保存してるだろうから
切り落としした方が遅くなるんじゃないかと思ったり思わなかったり

689 :NAME IS NULL:2009/07/16(木) 13:55:53 ID:qWUWM5Do
mysqlがオラクルに飲み込まれ、
ライセンスの関係で、
PostgreSQLキターーーーーーーーーーーーーーーーーーーってなる日も近い?

とりあえず、
WEB系でシェアの高い、Wordpres,Xoopsあたりが、postgresに対応して欲しい

690 :NAME IS NULL:2009/07/16(木) 15:08:44 ID:???
おらくるはMySQLが自分の顧客喰うのを阻止したかっただけでそ。
近い将来では、PostgreDQL北ーーーーとならないんでね?


691 :NAME IS NULL:2009/07/18(土) 10:54:37 ID:???
PostgreDQN北ーーーー

692 :NAME IS NULL:2009/07/26(日) 09:33:21 ID:???
postgresql odbc でググると未だに Interwiz のページがトップとか・・・
消えるなりリンクを張るなりしてもらえんかなーと思う今日この頃

693 :NAME IS NULL:2009/07/26(日) 22:48:53 ID:???
今の Google は検索順位変えられるから問題なし

694 :NAME IS NULL:2009/07/27(月) 14:51:16 ID:???
いや自分以外の人にでしょ

695 :NAME IS NULL:2009/07/27(月) 14:59:20 ID:???
>>693
撃沈w

696 :NAME IS NULL:2009/07/27(月) 15:17:16 ID:???
693と695はゆとり

697 :NAME IS NULL:2009/07/27(月) 15:20:50 ID:???
>>696->>696はネカフェ難民


698 :NAME IS NULL:2009/07/27(月) 15:39:49 ID:???
やっぱり PostgreSQL 使えてもネカフェ難民っているの?

699 :NAME IS NULL:2009/07/28(火) 01:18:13 ID:???
使うだけなら難民でもできる

700 :NAME IS NULL:2009/08/02(日) 16:10:46 ID:SACbLVCH
PostgreSQL7.4 の EUC_JP の DB を pg_dump したファイルを PostgreSQL8.1 に pg_restore しようとしているのですが、
どうやらバックアップ時の DB に EUC として不正な文字を含むレコードがあったらしく、
 invalid byte sequence for encoding "EUC_JP": XXXX
とエラーが出てリストアできません。
エラーを無視して強行する方法はあるでしょうか。
不正な文字部分は適当な文字(? とか)に置き換えてリストアされて構いません。


701 :NAME IS NULL:2009/08/02(日) 16:39:22 ID:???
前スレだったか、ソース書き換えてリストア時だけ?で通してしまう
というのをやってた人がいたな。俺も参考にしたっけ。

702 :NAME IS NULL:2009/08/03(月) 00:07:18 ID:???
tr やら perl やら何やらでバックアップファイル自体を書き換えるというのは無し?
それともXXXXには、いろんな数字の組み合わせが入るのかしら。
XXXXが取りうる値の範囲は? いわゆる外字領域? それとも本当に単に不正なバイト列?

703 :NAME IS NULL:2009/08/03(月) 02:23:51 ID:???
バックアップ書き換えとかネタだろ

704 :700:2009/08/03(月) 05:43:09 ID:???
バックアップファイルが -Ft で作ってあったので、tar で展開して不正な文字を置換してしまえば OK っぽいですね。
不正な文字置換スクリプトを書かなくちゃいけないので、まだ試してはいないのですが・・・

ちなみに不正な文字って、どうやら生JISコードっぽいです。
数百万行のうちの数行を除いてきちんと EUC なんですが、PHPアプリのバグかなにかで文字コード変換に失敗したまま DB に書いちゃったんでしょうね。


705 :NAME IS NULL:2009/08/03(月) 10:12:07 ID:???
うちも初期のプログラムのミスでいくつか紛れ込んじゃって
8.Xにするとき苦労したわ。バックアップデータも数十GBだから
間に挟むのも時間かかって無理そうだったんで>>701でやった

706 :NAME IS NULL:2009/08/04(火) 09:22:28 ID:h6XVbOdQ
マイエスキューエルに勝てそう?

707 :NAME IS NULL:2009/08/04(火) 10:31:38 ID:???
すでに勝っている

708 :NAME IS NULL:2009/08/04(火) 10:34:26 ID:???
負けたことは無い。

709 :NAME IS NULL:2009/08/04(火) 10:52:21 ID:HcV1M4ZQ
勝ち負けを書くことに意味は無いと思うのだがw

710 :NAME IS NULL:2009/08/04(火) 11:50:10 ID:???
どっちでもいいって事でしょ。
どっちも使えるが最高。

711 :NAME IS NULL:2009/08/04(火) 12:37:05 ID:???
いつも思うのだけど PostgreSQL ユーザって質高いね。
ほかの言語や何かだと荒れるのにこの流れ。ステキ。

712 :NAME IS NULL:2009/08/04(火) 13:18:04 ID:???
金持ち喧嘩せずの友愛主義だからな
最初にやってたSRAの人達が初心者ウエルカムだったのもあるかもしれん
出だしがJavaHouseみたいなコミュニティだったら
もっと殺伐としてたと思う

713 :NAME IS NULL:2009/08/04(火) 15:57:49 ID:???
>>707-708
それを聞いて安心しますた^^

714 :NAME IS NULL:2009/08/04(火) 22:04:16 ID:???
ずっとそう思っていたけど、MySQL Clusterには負けた気がした。

715 :NAME IS NULL:2009/08/04(火) 22:32:04 ID:???
どっちも良い。

716 :NAME IS NULL:2009/08/04(火) 22:53:21 ID:???
MySQLは日本語環境がどうもなぁって気がする。
Query Browserも未だに日本語書けないし、5.0は日本語マニュアルもないし。
PostgeSQLはそこがちゃんとしてるから好き。
でも仕事で使わされるのはMySQLなんだよなぁ・・・。

717 :NAME IS NULL:2009/08/04(火) 23:00:05 ID:???
標準でswedishになるのは勘弁して欲しい
レンタル鯖だと泣ける

718 :NAME IS NULL:2009/08/05(水) 08:13:53 ID:???
何が勝ってるのはほっといてもいいので、
何が劣ってるか 否 何が不足してるかを
周知させるだけでいいでしょう。
解決されるまで待つか 自らそれに参加するか。

といいつつMySQLは知らないです。
アプリで使っただけです。
Oracleと似てるのかな?わはは

719 :NAME IS NULL:2009/08/05(水) 09:33:06 ID:WmA10RkO
>>718
にてねーよw
昔XOOPS使う為に触ったのが最初かな
psqlは強力すぎるからなぁ

720 :NAME IS NULL:2009/08/05(水) 09:45:46 ID:???
レンタルサーバでMySQLは無料でpostgresは有料
なんだか勝った気がした

721 :NAME IS NULL:2009/08/05(水) 12:25:30 ID:???
それわ微妙だなw
誰がもうかっとんねんって感じ。

722 :NAME IS NULL:2009/08/05(水) 15:07:12 ID:???
MySQLは仕事で使う時のライセンスがあやふやだった時期があったのがな。
こないだもライセンスがどうのとか言ってたけど、結局どうなったんだろ。

8.4.0をテストサーバに入れてautovacumeを有効にして最低限の設定だけして使ってみたが
8.2でautovacumeを無効にしている環境より1.3倍ぐらい速い・・・。
内部の仕組みが変わったのもあるだろうけど、なにより
これまでの設定がイマイチだったということだろうか。

723 :NAME IS NULL:2009/08/05(水) 16:14:59 ID:???
激速になったのって8.3からでしたっけ?
もうわすれてまった。

724 :NAME IS NULL:2009/08/05(水) 23:19:58 ID:???
>>652
あ、ごめん、忘れてた。
pgsql-jpのメール(それ以外も含めて)はローカルで全文検索できるようにしているんで忘れてた。

明日8/6に確実にJPUGの人に言うだけは言っておく、忘れてなければ。
ただ、サーバ担当の人じゃないんですぐに対応できるかは怪しい。

いっそ、中の人になっちゃうのが早いかも。


725 :NAME IS NULL:2009/08/06(木) 02:28:58 ID:???
MLにぽんとなげるんじゃダメなんだな

726 :652:2009/08/06(木) 09:54:01 ID:???
>>724
伝言、よろしくお願いします。ありがとうございます。

ttp://old.postgresql.jp/PostgreSQL/pgsql-jp.html

の一番上にある「メーリングリストの移行に関するお知らせ」は
2002 年の話なので一番下でいいだろうとか、
ML アーカイブは一番下ではなく、もう少し上がいいだろう、
とかいろいろありますが、実際のスキルはお恥ずかしい限りなので。

727 :NAME IS NULL:2009/08/07(金) 11:13:16 ID:???
↓のようなtestというテーブルがあって、
  num  |   str
---------+-----------------
{3,4}  | {{a,b},{c,d}}

select str[1] from test;
を実行しても{a,b}が返ってこないのはなぜですか??

728 :NAME IS NULL:2009/08/07(金) 21:34:42 ID:???
>>727
配列の扱いは、ほかのプログラム言語と比べると貧弱だと思う。
標準SQLの規定なのか、Postgresの制限なのかはわからないけど。
str[Lo:Hi] を使うと、{ } が1段深いものの、↓まではできた。

select str[1:1] from tbl;
str
---------
{{a,b}}

729 :NAME IS NULL:2009/08/07(金) 23:04:27 ID:???
プログラム言語は別にして、他に配列扱えるデータベースってどれだっけ
使ってて、ポスグレみたいにvarchar配列にaggregateできれば、とか思うことは結構あるんだが

730 :NAME IS NULL:2009/08/08(土) 04:38:46 ID:???
=> select '{{a,b},{c,d,e}}'::text[];
ERROR:  multidimensional arrays must have array expressions with matching dimensions
ホント貧弱だし、なんかstrict気味だよね。もっと柔軟性あってもいいと思う。
でも便利に使ってます。
あとは、行型⇔配列が透過的に扱えるとウレシイんだけど。

731 :NAME IS NULL:2009/08/08(土) 07:26:37 ID:???
>>730
っ array_agg(), unnest() @8.4

732 :730:2009/08/09(日) 00:14:24 ID:???
こんなのができたんだ。
ありがとー。

というか、古めのバージョンでも generate_series を組み合わせると
比較的簡単に記述できてたのね...。ちょっと目から鱗。
ttp://www.postgresonline.com/journal/index.php?/archives/125-PostgreSQL-8.4-unnest-and-generate_series.html

733 :NAME IS NULL:2009/08/09(日) 22:19:12 ID:???
windows vista でpostgreSQL8.4のβ版を入れ、
正式版が出たので入れ替えようとしました。

プログラムの削除からはProgram Files (x86)\PostgreSQLフォルダが削除されないので、
手動でやろうと思ったのですが、おまえには資格がないと怒られます。
Administratorユーザーで強制削除したいのですが可能でしょうか。
attrib -r -s -h とか、プロパティから所有者を変えようとかやってみたんですがダメでした。

734 :NAME IS NULL:2009/08/10(月) 01:02:05 ID:???
>>733
Vistaあんまり詳しくないけど、管理者としてコマンドプロンプト開いて
・explorer.exeを実行して、目的のフォルダを削除
・目的のフォルダをdel
でいけるんでないの?

735 :727:2009/08/10(月) 09:54:01 ID:???
>>728
なるほど、ありがとうございます。
表記は同じでもスライスとは違う挙動をしますね・・・

str[1:1]がstr[1]と違う結果なのはなぜなんでしょう??
str[2:2]で{{c,d}}が取り出せるのはなんとなく納得できるのですが。

736 :NAME IS NULL:2009/08/10(月) 13:36:25 ID:???
>>734
ありがとうございます。

アクセス権ががっちり設定されていてできませんでした。
8.3のフォルダは削除できたんですが。
8.4のフォルダをリネームして(リネームはできた)、新しくインストールしました。
いつかは消したいんですが、しばらくこのままで行こうと思います。

737 :NAME IS NULL:2009/08/10(月) 14:32:33 ID:???
がんば!
進展あったられぽよろ。

738 :NAME IS NULL:2009/08/10(月) 17:03:24 ID:???
>>736
管理者でログインして、管理者権限で開くにしててもダメって事?
シールドアイコンついてる?

739 :NAME IS NULL:2009/08/12(水) 02:19:47 ID:???
>>733
OS再起動後、フォルダのプロパティをみて、フォルダの所有者が誰になっているか見てみる。
所有者がカラの事があるので、自分のアカウントを所有者として設定し、それから消してみる。

アンインストールが半端に終わると起こる事がよくある。


740 :NAME IS NULL:2009/08/12(水) 16:09:05 ID:???
postgresql 8.4を使ってます。
pg_dumpallでバックアップを取ろうとしたところ
pg_dump: schema with OID 18841 does not exist
と言われてダンプできず困ってます。



741 :740:2009/08/12(水) 19:56:27 ID:???
MLに投げてみますorz

742 :NAME IS NULL:2009/08/13(木) 10:29:10 ID:???
pg_dumpでテーブルごととか
--schema-onlyとか--data-onlyとかいろいろわけてやってみるのがいいかと

743 :NAME IS NULL:2009/08/14(金) 22:41:29 ID:???
>>726
言ってみたけど、他にもサーバ関連の作業があって復旧の見込みは当面なさそう
なので Namazu よりも Google を使ったほうがよさそう

検索したいキーワードに加えて site で pgsql-jp の保存書庫を指定すれば OK
(わざわざ説明することでもないかもしれないけど)

 site:ml.postgresql.jp/pipermail/pgsql-jp/

と思ったが、JPUG のサイトには 2008 年 12 月までしかないね

MLog ってサイトが ML のアーカイブを公開しているので
そっちを指定したほうがよさそう

 site:mlog.euqset.org/archives/pgsql-jp.ml.postgresql.jp/


744 :NAME IS NULL:2009/08/15(土) 01:07:08 ID:???
協賛企業から金もらってるんだから、人手は金で買えばいいのに。

745 :726:2009/08/15(土) 09:42:31 ID:???
>>743
ありがとうございます。

site:mlog.euqset.org/archives/pgsql-jp.ml.postgresql.jp/

こんなのあったんですね。
ここを Google カスタム検索で置いておけば、
HTML だけの変更でいいかも。

746 :NAME IS NULL:2009/08/15(土) 11:45:09 ID:???
これからの全文検索はログを公開してgoogle任せでおkってことですねw

747 :NAME IS NULL:2009/08/15(土) 12:55:43 ID:???
namazu はもう終わったと思う。
Google なら、質問に対して、返答がくっついたような検索結果になるし。

748 :NAME IS NULL:2009/08/15(土) 16:27:53 ID:2vvkaVqG
initdbをしようとすると、以下のエラーが出ます。
google で検索しても解決法がいまいちでてきません。
どのようにしたらよろしいでしょうか?
お教えください。

The database cluster will be initialized with locale ja_JP.EUC-JP.
initdb: encoding mismatch
The encoding you selected (UTF8) and the encoding that the
selected locale uses (EUC_JP) do not match. This would lead to
misbehavior in various character string processing functions.
Rerun initdb and either do not specify an encoding explicitly,
or choose a matching combination.

749 :NAME IS NULL:2009/08/15(土) 17:04:58 ID:???
rpmからいんすとしなおして強制解決しました。

750 :NAME IS NULL:2009/08/15(土) 17:20:05 ID:???
こうやって英語が読めない人が多いようだと、
v8.4で日本語のメッセージカタログが入ったのは良かったかもしらんね。

751 :NAME IS NULL:2009/08/15(土) 23:31:36 ID:???
そういうところが PostgreSQL が好きなところ
日本語メッセージカタログ、お疲れ様です

752 :NAME IS NULL:2009/08/16(日) 00:11:07 ID:???
748の場合、--no-locale付ければおk?

753 :NAME IS NULL:2009/08/16(日) 08:44:00 ID:???
>>752
Cロケールでよいなら --no-locale または --locale=C。
日本語ロケールを使いたいなら、--locale=ja_JP.UTF-8。
お好みで。

754 :NAME IS NULL:2009/08/16(日) 12:20:07 ID:???
--no-locale (locale=C) でないとソートがデタラメになるというのは、もう昔の話し?

755 :NAME IS NULL:2009/08/16(日) 12:54:56 ID:???
> ソートがデタラメ
それはデマ。エンコーディングとロケールのミスマッチが原因。
最近は、正しい組み合わせかをチェックするようになったから(そのエラーメッセージが 748)、
ミス設定も減ったし、日本語ロケールを使いたければ使えばいい。
ただ、所詮、ひらかな カタカナ 漢字の読み なんかをうまく扱ってくれるわけではない
(まぁ当たり前だけど)から、C にして速度を稼ぐほうが良い気はする。

メッセージはいつでも変更できるから、英語が苦手ならば
--no-locale で初期化しておいて、lc_messages だけ ja にすればいい。

756 :NAME IS NULL:2009/08/18(火) 22:24:21 ID:S73O4dP3
nfsとか使えない環境で
COPYコマンドでローカルのCSVをリモートのDBへ登録する方法ないですかね?

757 :NAME IS NULL:2009/08/18(火) 22:26:34 ID:???
>>756
条件が漠然としすぎ
ローカルで psql が動くならそれで

758 :NAME IS NULL:2009/08/18(火) 22:56:37 ID:???
ローカルのCSVをInsert文に整形してリモートで実行

759 :NAME IS NULL:2009/08/18(火) 23:00:29 ID:???
COPY FROM STDIN とか psql の \copy ならリモートロードできることを知らない予感。

760 :NAME IS NULL:2009/08/18(火) 23:02:56 ID:???
>>757
申し訳ない。psqlで、COPY発行してもできなかったけど
やる方法あるのですか?

>>758
その方法しかないですかね・・・

761 :NAME IS NULL:2009/08/18(火) 23:06:21 ID:???
>>759
制限された環境だから
STDINだと、標準入力に渡すのに、だいぶ手間が必要なんで
STDINはあきらめました。

PSQLでCOPY発効してもだめだったけど
単にミスってただけですかね?
ちなみに、リモートのDBにCOPYするのに
PSQLでCOPYだと、ファイルのパスはローカルのパスでよいんですよね?

762 :NAME IS NULL:2009/08/18(火) 23:41:51 ID:???
>>761
STDINってのはローカル (psql) 側のことだぞ?
それに制限なんて、シェルへのリダイレクトを禁止されているのか?

あと、psql の COPY と \copy は全く別物。\copy ならローカルのパスでいける。

763 :NAME IS NULL:2009/08/18(火) 23:41:53 ID:???
psql の \copy と、フツーのCOPY文は挙動が違うってのは分かってる? >>761

764 :NAME IS NULL:2009/08/18(火) 23:44:38 ID:???
標準入力に渡す
・手打ち
・端末エミュレータにペースト
しかないと思っているとか

765 :NAME IS NULL:2009/08/18(火) 23:50:23 ID:???
>>761
お前がパイプを知らないことは理解できた。

766 :NAME IS NULL:2009/08/18(火) 23:51:18 ID:???
対象バージョンが不明だから、とりあえず 8.0.0 のだけど
http://www.postgresql.jp/document/pg800doc/html/app-psql.html
の \copy の説明を読めば分かるんじゃないかと。

767 :NAME IS NULL:2009/08/18(火) 23:52:34 ID:???
>>762
ローカルのシェルの利用がかなり制限されてるんですよね。
パーミッションとか、パスでのコマンドの制限とか不便極まりない。
psqlの\copyは、ローカルのパスで試して、
エラーの内容がCOPYコマンドと同等だった気がするけど
明日再度試してみます。

>>763
一応わかってたつもりだったんだけど
上に書いていた通り、同じエラーが出た気がして・・・
明日試してます。

>>764
その辺りは大丈夫。

>>765
一応知ってるつもりです。あくまで、一応ですが。

768 :NAME IS NULL:2009/08/18(火) 23:54:23 ID:???
>>766
ありがとう。
自分の勘違いな気がするから
明日また試してみます。

769 :NAME IS NULL:2009/08/19(水) 00:25:54 ID:???
お前俺が発注してる奴じゃないよな
chroot環境渡したらこれじゃ何もできないってジリジリ納期延ばしてきた奴

770 :NAME IS NULL:2009/08/19(水) 13:21:39 ID:???
ALTAR TABLE で文字化けした列をリネームか
削除することって出来ませんか?

日本語で列名を定義した時点で問題なのですが、
文字化けしてしまっていて、ALTAR TABLEどころか、
ACCESSやpgAdminでデータを開くことも出来ません・・・。

771 :NAME IS NULL:2009/08/19(水) 14:11:20 ID:???
問題は日本語で列名を指定した事じゃなくてサーバとクライアントの文字コードがあってないこと
GUIツールじゃなくてpsqlでやってみ

772 :NAME IS NULL:2009/08/19(水) 15:14:47 ID:???
psqlの時点で文字化けしてるんです・・・。

¥d テーブル名 で
テーブル定義表示させると、
カラム名が文字化けしているんです。

カラム1 | integer | default 0
カラム2 | integer | default 0
カラムもじばけ integer | default 0
カラム4 | integer | default 0

といった感じ

そのカラム名をコピペで
ALTER TABLE table_name RENAME カラムもじばけ to new_col_name;

すると、syntax errorです。

「 カラムもじばけ」って書いてあるところは、
実際にはわけわからん文字と記号ですw

773 :NAME IS NULL:2009/08/19(水) 15:44:01 ID:???
SHOW client_encoding と、実際のコンソールの文字コードどうなってる?

774 :NAME IS NULL:2009/08/19(水) 15:45:17 ID:???
あとその文字化けは | も含んじゃってるからそのまま入れても無理とか?

どうしても無理ならテキストでダンプして直接書き換えてりストアしてみては

775 :NAME IS NULL:2009/08/19(水) 15:48:42 ID:???
SHOW client_encoding がSQL_ASCII
コンソールは送受信ともEUC-JPです。


776 :770:2009/08/19(水) 15:53:46 ID:???
文字化けしたカラムを除いた別名の
新規テーブルつくって、
データコピーして、リネームすればいけると思うけど、
それ以外の解決方法があるかなぁと・・・。

777 :NAME IS NULL:2009/08/19(水) 15:53:53 ID:???
SET client_encoding TO EUC_JP;
やると何か変わる?

778 :770:2009/08/19(水) 16:12:49 ID:???
>>777
SET client_encoding TO EUC_JP; をおこなったら、
文字化けの部分がちょっと少なくなり、
パイプが含まれていたのが、
パイプ含まなくなりました。

今まで
カラムもじばけ integer | default 0

SET client_encoding TO EUC_JP; を行った後
カラムもじば | integer | default 0

ためしにコピペでALTER TABLE RENAME したけど、
やっぱり syntax errorです。


779 :NAME IS NULL:2009/08/19(水) 16:41:18 ID:???
pg_dump DBNAME > db.txt
してdb.txtの文字化け部分を書き換えて
createdb test
psql test < db.txt
とかで戻して試してみては

780 :NAME IS NULL:2009/08/19(水) 19:34:33 ID:???
UPDATE pg_attribute SET attname = 'ascii_name' WHERE ...;

781 :NAME IS NULL:2009/08/20(木) 11:41:30 ID:S8uMOV4c
postgres用のODBCドライバは何を使えば良いでしょうか?psqlODBCを使えば良いでしょうか?



782 :NAME IS NULL:2009/08/20(木) 12:00:26 ID:???
ttp://www.postgresql.org/ftp/odbc/versions/msi/
ここから新しいの選んで使えばいいと思うよ。

783 :NAME IS NULL:2009/08/24(月) 16:51:25 ID:???
WindowsServer2003へのインストールってありですかね・・・?

784 :NAME IS NULL:2009/08/24(月) 17:00:24 ID:???
べつにアリだと思うが、何が心配なんだ?

785 :NAME IS NULL:2009/08/24(月) 17:04:10 ID:???
>>784
変な話なんですがSQLサーバーとかOracleに比べて業務で使用するのは
あまり聞かないので・・・信頼性とか
まあお金や顧客管理はしないのでそれほど重要なデータを格納するわけでもないのですが・・・

786 :NAME IS NULL:2009/08/24(月) 17:14:58 ID:???
それじゃWindowsServer関係ないな。それともそれの組み合わせ限定での信頼性か?
どちらにしろ絶対数的にはMSやOracleに比べて少ないと思うけど、
信頼性に重大な問題があったら、それこそMSやOracle近辺から騒ぐかもだから、
便りがないのは無事な証拠かもね。

787 :NAME IS NULL:2009/08/24(月) 17:20:24 ID:???
Windows+PostgreSQLって組み合わせをあまり聞かないのは、確かにそうかも。
最近のバージョンなら良いけど、8.0〜8.1あたりはWindows版特有のバグも多かったし。
同じハードウェアならWindowsよりはUNIX系のほうが速いし、64bit対応もUNIXだけ。
OSの選択権があるなら、Windowsは使わないなぁ。

PostgreSQL自体は同じだから信頼性は変わらないとは思うが、ハードウェアはケチっちゃダメ。
Windowsだと比較的ハードウェアもショボいことが多くて、それがトラブルの原因になったりする。
ディスクが、ライトバックしているのにバッテリバックアップしてなかったりとか。

788 :NAME IS NULL:2009/08/24(月) 18:11:13 ID:???
>>786
>>787
WindowsServer2003は決まっています
ハードはショボいのです
予算が無いのでフリーのDBをと思ったわけです
MySQLもとは思いましたが、Postgresで行こうかな

789 :NAME IS NULL:2009/08/25(火) 14:27:25 ID:???
お金や顧客管理バリバリのシステムで使ってるぞ、、、まあWindowsサーバじゃないが

790 :NAME IS NULL:2009/08/25(火) 16:22:42 ID:???
なんでも行けますよ

791 :NAME IS NULL:2009/08/28(金) 08:39:44 ID:???
Postgres用にOracleのSQL*Plusみたいなソフトってないでしょうか?

792 :NAME IS NULL:2009/08/28(金) 14:08:04 ID:???
psqlってのが付いてるよ

793 :NAME IS NULL:2009/08/28(金) 14:22:36 ID:???
人によっては phpMyAdmin とか

794 :NAME IS NULL:2009/08/28(金) 14:23:40 ID:???
phpPgAdmin の間違い

795 :NAME IS NULL:2009/08/28(金) 19:43:47 ID:???
素直にpgadminでいいやん

796 :NAME IS NULL:2009/08/28(金) 20:10:06 ID:???
普通にpgAdminIIIだな
クラウド派の人ならphpPgAdminって人もいるだろうけど

797 :NAME IS NULL:2009/08/29(土) 05:05:49 ID:???
え、GUIツールの話だったのか

798 :NAME IS NULL:2009/08/29(土) 09:29:36 ID:???
SQL*Plusのどこが欲しいか言ってないからねぇ。
スクリプトを流し込みたいなら、やっぱりpsqlになるだろうし。

799 :NAME IS NULL:2009/08/29(土) 09:45:00 ID:???
俺は釣りだと思ってました。

800 :NAME IS NULL:2009/09/01(火) 18:25:09 ID:C/SXka7J
先生方に質問です
PostgreSQLで使用できる、レプリケーションソフトで信頼性が高くて使いやすいのってありますか?

801 :NAME IS NULL:2009/09/01(火) 18:51:11 ID:???
pgAdmin3も対応してるしSlony-Iが主流なんかなぁ。
使ったことないけど。

802 :NAME IS NULL:2009/09/01(火) 19:12:35 ID:???
信頼性が高いのはSlony-I
全然使いやすくないけど

803 :NAME IS NULL:2009/09/01(火) 19:31:57 ID:???
使いやすさというか、設定のしやすさの意味で書いていました、ごめんなさい。
信頼性を重視しないといけないシステムなのでSlony-Iを使ってみます。

まずはググって調べてみなきゃ・・・早速のレスありがとうございました。

804 :NAME IS NULL:2009/09/01(火) 19:43:04 ID:???
信頼性だけならウォームスタンバイとかDRBDのほうが高くない?
スケールアウトとは無縁だが。

805 :NAME IS NULL:2009/09/02(水) 00:56:40 ID:???
Slony-Iは非常に設定はしづらい
テーブル構造が複雑になれば複雑になるほど

806 :NAME IS NULL:2009/09/02(水) 09:17:18 ID:???
設定が楽なのはpgpoolかなぁ。

807 :NAME IS NULL:2009/09/02(水) 09:32:28 ID:???
Slonyは気軽にテーブルとかシーケンス増やせないな
非同期だからメリットは多いけど

808 :NAME IS NULL:2009/09/04(金) 20:48:10 ID:PnKfXmZQ
1つのDBに2つのTableがあり、どちらもユニークID(serial)、
タイトル(text)とインサートされた時間(timestamp)のカラムがありますが
それぞれでカラム名が統一されていません。
ex:TableAはタイトルのカラム名がtitleA、TableBがtitleB

この2つのテーブルからインサートされた時間が早い順に5件取得、とか可能でしょうか?
とりあえずviewをつくってみようかと思って
SELECT id from TableA,TableB order by 登録時間A DESC、登録時間B DESC LIMIT 5;
こんな感じでやってみましたがsyntax errorが止まりません…。

CentOS
PostgreSQL 7.4.13

809 :NAME IS NULL:2009/09/04(金) 21:20:53 ID:???
それポスグレ関係ないから。まずはSQLの本を読みなさい・・・

810 :NAME IS NULL:2009/09/04(金) 21:37:33 ID:???
実はなにげにPostgreSQLの弱点を突く質問なんだがね。
 SELECT * FROM TableA UNION ALL TableB ORDER BY time LIMIT 5
とやりたいところだが、UNION ALL - ORDER BY - LIMIT はオプティマイザが弱いので
 (TableA LIMIT 5) UNION ALL (TableB LIMIT 5) LIMIT 5
みたいにしないと遅いハズ。

811 :NAME IS NULL:2009/09/04(金) 21:51:50 ID:PnKfXmZQ
>>809-810
即レスありがとうございます
>>810
試してみたけどやはりsyntax error;;

IDとタイムスタンプをそれぞれのTableから取ってきて、
タイムスタンプをUnixTimestmapに変換してPHPで並べ替える、とかかなぁ

812 :NAME IS NULL:2009/09/05(土) 00:08:15 ID:???
SELECT * FROM (
SELECT ID,タイトル,時間 FROM TABLE1
UNION ALL
SELECT ID,タイトル,時間 FROM TABLE2
) AS T1
ORDER BY 時間 ASC
LIMIT 5

携帯からだから実際試してないけど。
テーブル1とテーブル2の構造がちがうんじゃね?
そういう場合はUNIONするテーブル同士のカラムを揃えてやらんとだめ。

あとエラーメッセージはちゃんと読んで理解しろ。
じゃないと一生原因追求できんぞ。

>>810はかなり知ったか入ってるから参考にすんな。
>>810みたいになりたくなければエラーメッセージは読むことだ。



813 :NAME IS NULL:2009/09/05(土) 00:37:37 ID:???
>>810
>>812

SELECT
*
FROM
(SELECT ID,タイトル,時間 FROM TABLE1 ORDER BY 時間 ASC LIMIT 5
UNION ALL
SELECT ID,タイトル,時間 FROM TABLE2 ORDER BY 時間 ASC LIMIT 5
) AS T1
ORDER BY 時間 ASC
LIMIT 5

つまりはこういうことね。

件数が多い場合は、テーブル全件UNIONするより、それぞれ5件に絞ってからUNIONした方が性能が出るということ。

>>808
エラーメッセージをきちんと読むことも重要。
マニュアル読めば、構文はきちんと書いてある。



814 :NAME IS NULL:2009/09/05(土) 01:02:08 ID:???
オプティマイザって言いたかったんだろ

815 :NAME IS NULL:2009/09/05(土) 03:49:41 ID:???
>>812
どの辺が知ったかなんですか?
教えてもらえるとありがたいです。

816 :NAME IS NULL:2009/09/05(土) 04:40:58 ID:???
バージョンやデータ件数確認しないでパフォーマンスのことだけ言う奴は、
だいたいニワカなのは違いない

817 :NAME IS NULL:2009/09/05(土) 05:08:21 ID:???
いずれかのバージョンでその事象が改善されているものであれば、
バージョン確認せずに云々は同意。

データ件数がある程度多い(またはその逆)場合にのみ有効なチューニングが
あるかどうか分からないので、データ件数を確認することがどれほど有意義なのかが分からない

今回の場合だと、なによりもシンタックスエラーの詳細を知りたかったけどね。

818 :NAME IS NULL:2009/09/05(土) 05:54:04 ID:???
>>810 は、バージョンやデータ件数に関係なく、ほぼ確実に有効だろう?
むしろ詳しすぎて説明を端折っているから、それこそ「ニワカ」では説明を理解しきれなかったように見えるが。

819 :NAME IS NULL:2009/09/05(土) 09:24:36 ID:???
中途半端でまったく伝わらない文章書いちゃって、言い訳したい気持ちはわかるが、
言われた当事者以外が弁解するわけないんだし、なにやったって自演にしか見えんのだからやめとけ。
ってか、数万件程度じゃ遅くないと思うぞ別に。

820 :NAME IS NULL:2009/09/05(土) 16:06:30 ID:???
>>819
何が言いたいんだろうか。

821 :NAME IS NULL:2009/09/05(土) 16:33:52 ID:???
「データ件数確認しないで」と書いた割には、「数万件程度じゃ」って勝手に規模を仮定していますね。

822 :NAME IS NULL:2009/09/05(土) 17:25:36 ID:???
おまえら…

823 :NAME IS NULL:2009/09/05(土) 19:34:20 ID:???
まぁ、無事解決ってことでw

824 :NAME IS NULL:2009/09/05(土) 19:35:46 ID:???
もう自分を攻撃している敵が一人に見えてるみたいだな

825 :NAME IS NULL:2009/09/05(土) 22:42:21 ID:???
>>823
うん。>>816のいう「ニワカ」のおかげで解決できたねw

826 :NAME IS NULL:2009/09/06(日) 02:42:44 ID:???
なんかすげー粘着力だな

827 :NAME IS NULL:2009/09/06(日) 03:59:33 ID:???
実はニカワだったと。

828 :NAME IS NULL:2009/09/06(日) 05:34:05 ID:???
技術者って他人に間違いを指摘されるとめちゃめちゃ期限損ねる奴多いよな

829 :NAME IS NULL:2009/09/06(日) 10:09:34 ID:???
昔、ニカウさんっていたなぁ。いい人柄だった。

830 :NAME IS NULL:2009/09/06(日) 10:32:15 ID:???
>>828
それすごいわかる
とんでもない理屈つけて反論するやつとか

831 :NAME IS NULL:2009/09/06(日) 13:48:54 ID:???
>>828
間違いではないが、自分の回答が最良と思いこんでしまう>>812のようなタイプも多いよw

832 :NAME IS NULL:2009/09/06(日) 15:22:15 ID:sqLNCpnT
件数とかパフォーマンス関係ないだろw
カラム名を別名つけてあわせないとエラーは取れない


833 :NAME IS NULL:2009/09/06(日) 15:43:57 ID:XJT8VUB5
>>832
IDがsqLおめw

834 :NAME IS NULL:2009/09/06(日) 16:37:03 ID:???
どうぞw

IDにSQLが出るまでがんばるスレ
http://pc11.2ch.net/test/read.cgi/db/1242753301/

835 :ココ電球 _/::o^ν ◆tIS/.aX84. :2009/09/06(日) 20:29:30 ID:quiJ7AY/
ウニオン

836 :NAME IS NULL:2009/09/06(日) 20:58:05 ID:???
基本的なSQLの質問してるのに、それをぶっ飛ばしてオプティマイザがとか
かなり恥ずかしいな。
こんな先輩だったら絶対新人育たないわ。

837 :NAME IS NULL:2009/09/08(火) 21:38:12 ID:???
PostgreSQL 8.2.9 Windows版(日本語版)インストーラ
がない

838 :NAME IS NULL:2009/09/08(火) 21:55:22 ID:???
8.2.11〜13 なら本家にあるっぽい。8.2.9 はもう賞味期限切れだな。
サイトの中の人がリンクを張り替えるのを忘れてるんでしょ。

839 :NAME IS NULL:2009/09/09(水) 20:08:57 ID:khRK1LjC
v8.4.1 / v8.3.8 / v8.2.14 / v8.1.18 / v8.0.22 / v7.4.26

840 :NAME IS NULL:2009/09/11(金) 18:36:53 ID:fYa9VkEC
C言語における列挙型のような
登録時は'a1'とかでして
内部では最適化して単純なデータで管理してくれるData Typeって何ですか?

841 :NAME IS NULL:2009/09/11(金) 18:39:09 ID:???
そういうマスターを作るのが一般的だと思うけど、そういう型あんのかな

842 :NAME IS NULL:2009/09/11(金) 18:40:52 ID:???
無いんですね
有り難う御座いました

843 :NAME IS NULL:2009/09/11(金) 20:12:36 ID:???
そのまんま、ENUM型があるが。

844 :841:2009/09/11(金) 21:54:57 ID:???
ほんとだ、8.3からかな?
適当な事を言ってすまんかった

845 :NAME IS NULL:2009/09/13(日) 16:23:04 ID:???
>>843-844
ありがとうございました^^

846 :NAME IS NULL:2009/09/15(火) 07:45:44 ID:???
A-0000〜9999
B-0000〜9999
のようにプレフィクスを付けた4桁のシーケンスを生成する
ことってできますか? A-0010とB-0010は別物にしたいです。

847 :NAME IS NULL:2009/09/15(火) 08:30:50 ID:???
SELECT 'A-' || to_char(nextval('seq'), 'FM0000'); みたいな感じ?

848 :NAME IS NULL:2009/09/15(火) 13:05:17 ID:???
>>847
これだとA-0010とB-0010は別物にならなくないですか?
というか、seqには '10' しか入らないですよね。

849 :NAME IS NULL:2009/09/15(火) 14:26:50 ID:???
>>848
別物ってどういう意味?
A-〜とB-〜を独立したシーケンスにするってこと?
なら二つ使えばよろし

850 :NAME IS NULL:2009/09/15(火) 19:57:18 ID:???
>>848
ゼロパディングされないと怒っているように見えるけど、なんで?

851 :NAME IS NULL:2009/09/15(火) 21:12:53 ID:???
ゼロパディングは 'FM0000' で救えていると思うんだけど。

852 :NAME IS NULL:2009/09/16(水) 14:00:00 ID:???
ver 8.4.1
os XP SP3

AccessからADO接続でレコードセット追加しようとしているんだけど、Openができません。
cn.ExecuteでCREATE TABLEはできているので、接続自体は確立しているようです。
接続はOELプロバイダーでしています。
テーブル名に日本語がまずいのかと思って、アルファベットにしてみましたが駄目でした。

rs.Open "T日本語名", cn, adOpenKeyset, adLockOptimistic

ERROR; syntax error at or near "文字化け"
LINE 1: 文字化け

文字化けしているところはテーブル名のようです。



853 :852:2009/09/16(水) 14:14:30 ID:???
googleでエラーコード、postgresql ado などで調べました。
対処法等をご存知でしたら、ご教示のほどよろしくお願いします。

854 :NAME IS NULL:2009/09/16(水) 16:39:47 ID:???
>>852
ここで取り扱うのが適切かは別として
> テーブル名に日本語がまずいのかと思って、アルファベットにしてみましたが駄目でした。
なら、アルファベットの時のエラーを出すべきだと思う。
アルファベットでもエラーメッセージが化けてるわけないよね?

855 :NAME IS NULL:2009/09/16(水) 17:18:21 ID:???
MS系のことはよく知らないんだけど、直接クエリなげられんの?
投げられるならSELECT COUNT(*)とか適当に実行してみなよ

856 :NAME IS NULL:2009/09/16(水) 18:03:31 ID:???
>>854
申し訳ありませんでした。アルファベットのときは文字化けしませんでしたが
エラーは同じものでした。

>>855
cn.Execute "DELETE FROM 日本語テーブル名;"で
レコードは削除されました。

Accessスレのほうがよろしいでしょうか?

857 :NAME IS NULL:2009/09/16(水) 18:41:31 ID:???
>>856

Accessで似たような事やって悩んでた人はテーブル名を [ ] で括ってた。
まぁ、その人はクエリを書いててはまってたんで同じ話かわかりませんが。

自分では検証してないけど、その人が調べたところ Oracleで言う "テーブル名" な記述に相当するのが [テーブル名] とか言ってたな。
ハズレだったらゴメン。


858 :852:2009/09/16(水) 19:15:50 ID:???
>>857
回答、ありがとうございます。教えていただいた方法を試してみましたが駄目なようです。
自分なりに試した結果、SQLを発行すれば開くことができるようです。
一歩進んだのですが、AddNewでこけました。ネット上でもうまくいっていないようです。
ODBCによるやり方はたくさん見つかるのですが。といっても、私は接続ができなかったです。
まぁ、SQLで何とかなりそうなので、まずはそちらで勉強を進めてみます。

みなさま、ありがとうございました。

859 :NAME IS NULL:2009/09/16(水) 19:30:35 ID:???
>>852
> googleでエラーコード、postgresql ado などで調べました。
おつかれさま。

けどシンタックスエラーだと言われているのだからシンタックスをただしてみたらどうなの?
まずはアルファベットで。

860 :NAME IS NULL:2009/09/16(水) 19:59:21 ID:???
>>859

rs.Open "SELECT * FROM T日本語名;", cn, adOpenKeyset, adLockOptimistic

でエラーは一応消えました。AccessのテーブルをどうやってPostgresのテーブルにINSERTさせるか調べていたところ、
ほかの方もSELECT * FROMで接続しているようです。
リンクテーブルにすれば早いのだろうけど。
どうしても解決できないときは、またよろしくお願いします。

861 :NAME IS NULL:2009/09/16(水) 20:21:53 ID:???
ドライバが8.4に対応してないんじゃね

862 :NAME IS NULL:2009/09/16(水) 21:34:31 ID:???
>>860
皮肉を言われてるのに前向きだね

863 :NAME IS NULL:2009/09/17(木) 00:12:46 ID:???
皮肉だろうが、アドバイス求めてるのに人の話聞いてないんじゃなぁ、って感じ。


864 :NAME IS NULL:2009/09/17(木) 06:52:37 ID:???
翻訳してあげよう

MS系のことはよく知らないんだけど→このエラーに言語は関係ないってのカス
シンタックスをただしてみたらどうなの→SQLエラーなんだからSQL見直せカス

865 :NAME IS NULL:2009/09/18(金) 18:15:56 ID:???
頻繁に日付の完全一致検索を行うのですが、
その場合、データ型は date, text, int のどれが速いとかありますか?

text/int なら 20090918 と登録して検索する、ということです。

866 :NAME IS NULL:2009/09/19(土) 00:58:57 ID:???
>>865
素直にdateで良いと思う。データサイズはintと同じ4byteだし、日付関数も使える。
intのほうが日付のパースをスキップできる関係で、入出力は若干速いとは思うけど、
そこにこだわるくらいなら、チューニングすべきものは他にあると思う。
んで、たぶんtextは一番効率が悪い。

867 :NAME IS NULL:2009/09/19(土) 08:23:46 ID:???
>>866
なるほど!すごく勉強になりました。
そうか、サイズもあるのですね。
ありがとうございました。

868 :NAME IS NULL:2009/09/19(土) 17:17:45 ID:???
数値型で最高速はinteger
文字列型で最高速はtext
そのうえでinteger>textなのは確かなんだが
dateはどうなんだろうね

869 :NAME IS NULL:2009/09/20(日) 12:16:29 ID:???
たぶん integer > date > text。date は内部的には integer と同じなので、比較や計算の速度は
整数と同じと考えていい。文字列から/への変換は整数よりは複雑だろうから、そこは遅いのでは。

870 :NAME IS NULL:2009/09/20(日) 12:21:23 ID:???
100万件くらいで計測してみた、とかあったらブクマする

871 :NAME IS NULL:2009/09/23(水) 20:57:09 ID:iXDfBimr
UBUTU 9.0.4のサーバ版で
PACKEGEからPOSGREインストールしたのですが
文字コードをUTF-8からEUC_JPに変えれません。
いろいろネットで調べて実行してますが反映されないで困ってます。
何か言い情報ありませんか。

872 :NAME IS NULL:2009/09/23(水) 21:13:29 ID:???
ttp://www.postgresql.jp/document/current/html/multibyte.html
こういうことじゃなくて?作成済みのDBの文字コード変更がしたいの?
てかなんでそんなに誤字多いんだw

873 :NAME IS NULL:2009/09/24(木) 10:44:01 ID:???
文字コードを変えるには、データベースごとなら createdb、クラスタ一括なら initdb やり直し。
と思ったが、Ubuntu だとコマンド名が違うんだっけ。pg_wrapper createdb と pg_createcluster だっけか。

874 :NAME IS NULL:2009/09/25(金) 03:04:03 ID:7fninZcE
SQLだけで大きなテーブルを作りたかったので、以下のようにしました。
create table t (c int);
insert into t values (1);
insert into t select * from t;
...(3,4回くらい繰り返す)
insert into t.* from t,t t2;

これだとテーブルの中身が全部1になるのですが、全部違う値にする方法はないでしょうか?
ランダムでも、1,2,3,4というようなシーケンシャルでもいいです。
どうかよろしくお願いします。


875 :NAME IS NULL:2009/09/25(金) 03:53:57 ID:???
INSERT INTO t SELECT i FROM generate_series(1, 10000) s(i);
お好みで SELECT i ところで random() とかも使える。

876 :NAME IS NULL:2009/09/25(金) 09:59:53 ID:???
>>874
全部1で作ったら後は UPDATE で random な値で更新かけてしまうってのはどうでしょう。

update target set targetcolum=random()*100

これなら 0〜99 の範囲でランダムに全行の 項目 target.targetcolum を更新してくれます。


877 :NAME IS NULL:2009/09/26(土) 13:02:56 ID:???
winxpにてpg_dumpallのパスワード入力を回避しようとpgpass.confを作成し、
Application Data配下のpostgresqに配置しようとしたのですがpostgresqlフォルダが存在しませんでした。
ポスグレのバージョンにより作成場所が変わったりするのでしょうか?
ちなみにver 8.2.xです。



878 :NAME IS NULL:2009/09/26(土) 13:26:36 ID:???
すいません、質問します。

PC再起動後すぐにタスクマネージャーでプロセスをみたら postgres.exe が6個起動してるんですけど正常でしょうか。
何度か再インストールしてるのでそれが原因かもとおもってるのですが。
もし、異常な状態だとしたらどこをいじればなおりますでしょうか。 

879 :877:2009/09/26(土) 13:27:31 ID:???
すいません。
ちなみにpostgreSQL 8.4 windows上で使用してます。

880 :NAME IS NULL:2009/09/27(日) 00:10:38 ID:???
8.2と8.4をインストールしてるけど、
postgres.exe が10個起動しています。

881 :NAME IS NULL:2009/09/27(日) 00:14:44 ID:???
pgpass.conf の設置位置。
たぶん、以下のような感じかな。

(例)
C:\Documents and Settings\■ログインユーザ名■\Application Data\postgresql\pgpass.conf

882 :NAME IS NULL:2009/09/27(日) 11:24:33 ID:???
>>881
postgresqlのフォルダは自分で作成するんじゃなく普通はインストール時に
作成されるのですよね?

883 :NAME IS NULL:2009/09/27(日) 12:23:28 ID:???
pgpassってdataディレクトリじゃなくてホームディレクトリに置くんじゃないの?
UNIX系の場合はそうだよ

884 :NAME IS NULL:2009/09/27(日) 20:34:02 ID:???
postgres.exe がたくさんあるのは特に異常ではない。
マルチプロセスで動作するので、exeはたくさん立ち上がる。

885 :NAME IS NULL:2009/09/27(日) 21:30:33 ID:???
>>883
君の意見は貴重だが Windows と Unix では意味を成さない。

「ウチのカレーにはチーズを入れる」程度の話だ。

886 :NAME IS NULL:2009/09/27(日) 23:29:45 ID:???
そもそも、誰もdataディレクトリにあるって聞いてもいないし、言ってもいないんじゃ?
>>881の示すディレクトリも所謂homeディレクトリ下だし。

887 :NAME IS NULL:2009/09/27(日) 23:50:52 ID:???
882です。
いろいろご意見ありがとうございます。
とりあえず火曜日にpostgresqlディレクトリ作って試してみます。

888 :NAME IS NULL:2009/09/28(月) 02:17:58 ID:???
名前はなんでもいいです

889 :NAME IS NULL:2009/09/28(月) 03:20:48 ID:???
>>886
Application Dataじゃなくてホーム直下じゃね?
って事だろ

890 :NAME IS NULL:2009/10/03(土) 20:28:52 ID:???
>>878
> すいません、質問します。
>
> PC再起動後すぐにタスクマネージャーでプロセスをみたら postgres.exe が6個起動してるんですけど正常でしょうか。
postmasterじゃないですか?

891 :NAME IS NULL:2009/10/03(土) 20:45:24 ID:???
>>890
最近のバージョンだと postmaster はいないよ。ぜんぶ postgres.exe。
もちろん、その中のひとつは "postmaster" の仕事をしてるけど。

892 :NAME IS NULL:2009/10/03(土) 22:38:44 ID:???
postgresでpostmasterのシンボリックリンク作っててワロタ

893 :NAME IS NULL:2009/10/04(日) 16:51:49 ID:???
質問です。Postgresql 8.1

CLUSTER コマンドは、内部的には ORDER BY しつつテーブルのコピーを
作成して入れ替えるようなもののようですが、

そうすると CLUSTER を実行した直後のテーブルに VACUUM FULL や REINDEX は
不要というかむしろ時間の無駄なのでしょうか?

894 :NAME IS NULL:2009/10/04(日) 18:16:23 ID:???
>>893
そのとおり、時間の無駄。CLUSTER 中にはテーブルもインデックスも
両方とも作り直されるので、終わった後に追加で必要なのは ANALYZE だけ。

VACUUM FULL は逆で、テーブルのレコードだけを寄せ集めるだけなので
インデックスはむしろ汚れる。こっちは追加で REINDEX (+ANALYZE) が要る。

895 :NAME IS NULL:2009/10/04(日) 22:42:57 ID:???
やはりそうですか
ありがとうございます。

しかし、全部のテーブルをクラスタ化するわけではないので
たまには全体に VACUUM FULL + REINDEX しないといけないですよね

ううむ、どのようにスケジュールを組むか悩ましい。。。

896 :NAME IS NULL:2009/10/06(火) 18:40:50 ID:VxXgwHkh
postgresqlに対応したER図作成ソフトってある?

できればWindowsで。
外部キーとか、リレーションまで書いてくれるのがいい。
印刷したい。

DBDesignerForkでODBC経由してやってみたけど、
外部キースルーされたので。


897 :NAME IS NULL:2009/10/06(火) 19:10:40 ID:???
>>896
A5:SQLは?

898 :NAME IS NULL:2009/10/06(火) 20:27:23 ID:VxXgwHkh
>897
なんか質問されてるのかと思ったけど、それがソフト名なんすね。
よさげなんで使ってみます。情報感謝。

899 :896:2009/10/06(火) 20:42:25 ID:VxXgwHkh
A5:SQL試してみましたが、リレーションは自動では書いてくれない・・・
もしかして使い方が悪い?

900 :NAME IS NULL:2009/10/06(火) 21:05:13 ID:???
>>899
>なんか質問されてるのかと思った
www

ようするに、テーブル間に線引ければいいんだよね?
今試してみたけどできましたよ。

ひょっとしてバージョンの問題かも。
自分がためしたのは
 PostgreSQL8.4(Windows)
 A5:SQL 2.3.3
です。


A5の掲示板で質問すると作者さんが丁寧に答えてくれますよ。

901 :900:2009/10/06(火) 21:07:29 ID:???
>>900

>ようするに、テーブル間に線引ければいいんだよね?
ようするに、リバース時に自動的にテーブル間に線引ければいいんだよね?

です。
失礼。

902 :NAME IS NULL:2009/10/06(火) 21:13:19 ID:???
>>899
外部キー設定しててもだめってこと?

903 :NAME IS NULL:2009/10/07(水) 01:22:21 ID:???
SI使いたいんだけど高いんだよな
せめて3万なら買うのに

904 :NAME IS NULL:2009/10/07(水) 09:53:50 ID:AX7F8ONs
レス感謝。

>900-901
できましたか。んーもうちょい見てみます。

>902
そうです。定義だけでデータ空なのが駄目なのか、外部キーの設定が
悪いのかかな・・・サーバに直接つなげないので、定義だけ抜き出して
ローカルで再構築したのでなんか悪いのかもしれないす。


905 :NAME IS NULL:2009/10/07(水) 13:55:11 ID:vK4mhVfs
>>897
今DLして、SQL鯖とつないでみたけど、CSEの代わりにいいかもと思った>thks
#他のDBは家でためしてみよう・・・・

906 :NAME IS NULL:2009/10/07(水) 21:52:29 ID:???
CSEの代わりならPgAdmin使えよ

907 :NAME IS NULL:2009/10/08(木) 01:09:56 ID:???
>>906
A5では何がダメなの

908 :NAME IS NULL:2009/10/08(木) 02:32:26 ID:???
ODBC経由じゃんあれ

909 :NAME IS NULL:2009/10/08(木) 02:38:30 ID:???
ああそうか、CSEはlibpqつかうんだっけか

910 :NAME IS NULL:2009/10/08(木) 22:45:10 ID:???
ODBCじゃ何がだめなの?

911 :NAME IS NULL:2009/10/09(金) 02:02:19 ID:???
なんとなくダメだろ

912 :NAME IS NULL:2009/10/09(金) 04:46:17 ID:???
データ型変わるだろODBCのに

913 :NAME IS NULL:2009/10/09(金) 05:08:29 ID:???
DbWrenchがいいよ
http://www.dbwrench.com/

914 :NAME IS NULL:2009/10/09(金) 09:05:14 ID:???
上に出てきた A5:SQL 試してみたけど
テーブルは綺麗に出てきたけど外部キーの線が完全に出てこなかった
というか半分くらいしか再現されなかったわ

915 :NAME IS NULL:2009/10/11(日) 00:08:39 ID:???
ODBCでもデータ型は正しくとる方法有るんじゃない?
A5:SQLってデータ型正しく出てるくるよ

916 :NAME IS NULL:2009/10/11(日) 01:04:39 ID:???
まぁintegerとかvarcharとかしか使わないならODBCでいいんじゃね

917 :NAME IS NULL:2009/10/13(火) 12:48:31 ID:???
システムカタログから引っ張って来てんじゃないの?

918 :NAME IS NULL:2009/10/13(火) 13:24:13 ID:???
ODBCだとBLOBとか駄目だよ

919 :NAME IS NULL:2009/10/13(火) 22:44:19 ID:???
テーブルの継承に詳しい方教えてください postgresql 8.1

パーティショニングではなく、ただの継承の話です。

CREATE TABLE parent ( 〜 );
CREATE TABLE child ( 〜 ) INHERITS (parent);

の構成で、

INSERT INTO child SELECT * FROM 〜;

などで子テーブルに長時間 INSERT している間、親テーブル に対する INSERT が
ずっと waiting で固まってしまいます。

親テーブルへの INSERT が子テーブルに対してもロックを獲得しにいっているのではないか
と予想しています。

トリガやルールで parent への insert を child に振り分ける、なんてことはしてないので
子テーブルにまでロックが及ぶのは非常に迷惑なのですが、
これってどうしようもないのでしょうか。

920 :NAME IS NULL:2009/10/13(火) 23:00:14 ID:???
途中から親子が逆転してんのかな

921 :NAME IS NULL:2009/10/13(火) 23:13:31 ID:???
INSERTであればテーブルロックは決してぶつからない。
何か勘違いをしているか、INSERT以外のことをやっていないか?
外部キーやユニークキーはどうなってる?

922 :NAME IS NULL:2009/10/14(水) 10:59:06 ID:???
ALTER TABLEのNO INHERITで切ったらどうなる?

923 :NAME IS NULL:2009/10/14(水) 10:59:57 ID:???
あとCHECK制約は入ってない?

924 :NAME IS NULL:2009/10/15(木) 08:35:35 ID:3rUfd4Hh
DBを仕事で使うことになったですけど
PostgreSQLってタダで手に入って
このDBを含んだソフトを売ってもいいのですか?
ライセンス?っていうのでしょうか?

925 :NAME IS NULL:2009/10/15(木) 10:35:28 ID:???
>>924
BSDライセンスのスタイルの使用許諾に外れない限り、
無料利用可能で、開発したソフトの販売も可能。
以下の著作権表示をしておけば、ほぼ大丈夫でしょう。
--------------------------------------------------------
部分的著作権 (c) 1996-2009, PostgreSQL国際開発グループ
部分的著作権 (c) 1994-1996 カリフォルニア大学本校
--------------------------------------------------------

価格(Price)
PostgreSQLの利用は、商用でもオープンソースでもすべて無料です。
上記に示してあるBSDスタイルの使用許諾に外れない限り、
PostgreSQLのコードを制限無く商品に取り込むことができます。

http://wiki.postgresql.org/wiki/FAQ/ja#.E4.BE.A1.E6.A0.BC.28Price.29

著作権(BSDライセンス)について(和訳は参考。英語原文も確認すること)
http://wiki.postgresql.org/wiki/FAQ/ja#1.3.29_PostgreSQL_.E3.81.AE.E8.91.97.E4.BD.9C.E6.A8.A9.E3.81.AF.E3.81.A9.E3.81.86.E3.81.AA.E3.81.A3.E3.81.A6.E3.81.BE.E3.81.99.E3.81.8B.EF.BC.9F

POSTGRESQL データベース管理システム
部分的著作権 (c) 1996-2009, PostgreSQL国際開発グループ
部分的著作権 (c) 1994-1996 カリフォルニア大学本校

本ソフトウェアおよびその文書一式は上記の著作権表示と、この文章
およびこれに続く二つの段落が全ての複製に添付されている限りにおい
て、使用、複製、修正および配付の許可を、いかなる目的であっても、
無償でかつ同意書無しに行なえることをここに認めます。

カリフォルニア大学は、いかなる当事者にたいしても、利益の壊失を
含む、直接的、間接的、特別、偶然あるいは必然的にかかわらず生じた
損害について、たとえカリフォルニア大学がこれらの損害について訴追
を受けていたとしても、一切の責任を負いません。

カリフォルニア大学は、商用目的における暗黙の保証と、特定目的で
の適合性に関してはもとより、これらに限らず、いかなる保証も放棄す
ることを明言します。以下に用意されたソフトウェアは「そのまま」を
基本原理とし、カリフォルニア大学はそれを維持、支援、更新、改良あ
るいは修正する義務を負いません。


926 :NAME IS NULL:2009/10/15(木) 11:30:18 ID:3rUfd4Hh
>>925
情報ありがとうございます
安心して組み込めます

927 :NAME IS NULL:2009/10/18(日) 16:01:57 ID:???
ポスグレの本でおすすめのものはありますか?

928 :NAME IS NULL:2009/10/18(日) 22:55:18 ID:???
amazonで最新でソート表示して一番上のを買う。
後はマニュアルがなんつっても一番でしょ。

929 :NAME IS NULL:2009/10/19(月) 00:09:52 ID:SE04vEP7
MySQLがオラクルに買収されたから、これからWebのDBでオープンソースといえばPostgreSQLかな・・・。
それとも、MySQL?(バックがオラクルだからなおさらって意味で・・・)

どうなんだろう。

930 :NAME IS NULL:2009/10/19(月) 00:18:04 ID:???
オープンソースDBもかなりの性能になってきたから
オラクルとかの高いDBって売れなくなるってことはないの?

931 :NAME IS NULL:2009/10/19(月) 00:27:05 ID:???
WebでのMySQLはまだ強いね。
でもPostgreSQLも少しずつ伸ばしていくんじゃないかな。

オラクルのシェアは落ちていくだろうけど、
まだそれなりに売れるとは思うよ。

営業も無料のものを勧めるより、有料のものを売って売上、利益を取れるほうがいいからね。

932 :NAME IS NULL:2009/10/19(月) 11:36:39 ID:k3GhPa+n
ArcServ使ってオンラインバックアップが取れるか とか
Oracle/SQL鯖とプロダクトレベルのDBリンク張れるか とか
そこそこの規模だとそのあたりが解決されないと というのがある気がする
システム1式として構築する場合、運用面で色々あるから
マニュアル・関連書籍も弱いかな?
大規模な案件だと、総額に占めるOracleの価格は、たいしたことはないから
#たぶんね

933 :NAME IS NULL:2009/10/19(月) 17:19:55 ID:G7uEdkp8
>>932
他に気になるのは人材かな。オラクルはこんな問題だれが直せるんだよって時でも
金さえ積めば解決できる人間を用意してくれるけど
PostgreSQLで同様の問題にぶちあたった場合、同じように
金を積んでも解決出来る人材って見つかるのかなって疑問がある。
SRAかNTTのOSSの人しかパッと思いつかないけど
宣伝してないだけで、もっといろんな会社が扱ってるのかな。

934 :NAME IS NULL:2009/10/19(月) 17:21:28 ID:???
俺に金詰めばいいのに

935 :NAME IS NULL:2009/10/19(月) 17:27:10 ID:???
俺でも良いよ。

936 :NAME IS NULL:2009/10/19(月) 17:42:36 ID:???
SRA とか PostgreSQL に金積めば
解決してくれるサービスあったよね。

937 :NAME IS NULL:2009/10/19(月) 20:11:31 ID:???
いやいや俺に任せろ


Oracleに換装するけどな

938 :NAME IS NULL:2009/10/19(月) 20:46:07 ID:???
MySQLって自分で適当に対処して使っているユーザが多い気がするけど、
PostgreSQLユーザってやけにサポートをほしがる気がする。客層の差?

939 :NAME IS NULL:2009/10/19(月) 21:19:59 ID:???
気のせい?

940 :NAME IS NULL:2009/10/19(月) 23:14:13 ID:???
どこでそう思ったのか知らないが、普通に考えて、サポート欲しがってる人が
postgresなんか使うわけないじゃん。

941 :NAME IS NULL:2009/10/20(火) 00:14:10 ID:???
ポスグレで全文検索システム作ろうと思うんですがLUDIA(Senna)ってどうですか?

942 :NAME IS NULL:2009/10/20(火) 07:14:11 ID:???
PostgreSQLのDBA経験あるだけですぐ採用される
相当需要あるんだと思う

943 :NAME IS NULL:2009/10/20(火) 08:01:11 ID:???
きちんと使える人であれば
商用を買ってサポートサービス受けるより
安上がりだしね。

944 :NAME IS NULL:2009/10/20(火) 13:57:39 ID:pYoEoiic
>>きちんと使える人
goldレベルの人がそういるとは思えないんだよね
ちゃんとしたっていうと Linux Expoert クラスになるんだろうな・・・
#詳しい人たちが、使ってるってレベルなんだろうなと(そこそこの規模の案件で)
それはMySQLも同じだと思うんだけどね

小規模で、関係者で詳しい人がいなくて、ごめんなさいで済むなら
サポートはいらんわな
#逆に言うと、そのレベルでの採用が多いんだろうかなと
#雑誌で紹介される案件等はもちろん違うんだろうけどね
そういうレベルの話をしているつもりは無いし

945 :NAME IS NULL:2009/10/20(火) 21:27:18 ID:???
Postgresって資格あったよね?確か。
OracleみたいにSilverとGoldがあるのか。
誰か持ってる人いる?


946 :NAME IS NULL:2009/10/20(火) 21:41:36 ID:???
日本語

947 :NAME IS NULL:2009/10/20(火) 22:37:49 ID:???
>>945
Goldもってるよ。
自分以外に持ってる人見かけたことないが。

948 :NAME IS NULL:2009/10/21(水) 06:48:29 ID:???
Goldを持っているひとは何人かいる。
ただ、マニュアル丸暗記で取れるから大したことはないって聞いてるけど。

949 :NAME IS NULL:2009/10/21(水) 07:36:20 ID:???
俺シルバだ。凄いだろう。

950 :NAME IS NULL:2009/10/21(水) 19:14:22 ID:???
無免許だからシルバーでも受けてくるかな
とりあえず勉強しないで行ってみるけど
8年くらい使ってるから落ちたら恥ずかしい

951 :NAME IS NULL:2009/10/21(水) 23:38:24 ID:???
まだブロン〇だ(´・ω・`)

952 :NAME IS NULL:2009/10/22(木) 00:01:39 ID:???
ブロン液

953 :NAME IS NULL:2009/10/22(木) 10:06:47 ID:???
よーしパパ、プラチナ狙っちゃうぞ

954 :NAME IS NULL:2009/10/22(木) 11:16:05 ID:???
Win版Slony-I が参考になるわかりやすい情報ないですかね。

以下みたけど、うまくできなかった。
d.hatena.ne.jp/uriyuri/20090128/1233117758

table add key ( node id = 1, fully qualified name = 'public.history' );

でエラーになる。

955 :NAME IS NULL:2009/10/22(木) 12:06:37 ID:???
何がどうエラーになるんだよ

956 :NAME IS NULL:2009/10/22(木) 13:00:33 ID:???
>>955
どうも。

table add key ( node id = 1, fully qualified name = 'public.history' );
の箇所で、

9: ERROR: syntax error at or near table

となります。

参考:setup_cluster.txt
http://d.hatena.ne.jp/uriyuri/20090128/1233117758

957 :NAME IS NULL:2009/10/22(木) 13:07:06 ID:???
その前の行がおかしいんでないの

958 :NAME IS NULL:2009/10/22(木) 13:38:16 ID:???
とりあえずPostgreSQLとSlonyのバージョン晒せ
8.4.xと2.0.3RC2の組み合わせで動かないのは俺が検証済み
Linuxでだけど

959 :NAME IS NULL:2009/10/22(木) 14:04:18 ID:5FtxiwBd
>>947
Oracleのつもりで書いてたので、Postgresの方はレベルは不明なんだ>すまん
Linuxでも「ホントは役に立つOracleコマンド管理術」位は押さえてるとかさ
#Oracleは趣味だから、ちゃんと見てないけどw

960 :NAME IS NULL:2009/10/22(木) 14:51:05 ID:???
>>957
>>958
ありがとうございます。

PosgreSQL 8.4.0 Win
Slony-I は、スタックビルダからインストール、
slon.exe の日付が 2009/08/07 7:09 で、ファイルバージョン2.0.2.9218

#この処理でこのレプケーションシステム特有のスキーマ_$CLUSTERNAME(_slony_test1)を作成
という意味が理解できていません。

参考:setup_cluster.txt
http://d.hatena.ne.jp/uriyuri/20090128/1233117758

961 :NAME IS NULL:2009/10/22(木) 15:45:13 ID:???
postgresで、データベースAをアップデートして、データベースBをアップデートして、
両方成功したらコミットという2相コミットをやりたいんですけど、
具体的にどう書いたらいいかわかりません。

pg_query(A, "BEGIN");
pg_query(B, "BEGIN");
pg_query(A, "UPDATE テーブル名");
pg_query(B, "UPDATEテーブル名");

ちょっとphpも入ってますが教えていただけないでしょうか。

962 :NAME IS NULL:2009/10/22(木) 15:54:20 ID:???
>>961
1つのトランザクション、コミットができるなら、
あとは条件文次第で、2相だろうが、3相だろうが、可能でしょ。

963 :NAME IS NULL:2009/10/22(木) 16:05:25 ID:???
>>961
各トランザクションをプログラムで管理して
それぞれコミットやらロールバックしていけということ?

964 :961:2009/10/22(木) 16:06:43 ID:???
>>963 は >>962 宛てです

965 :NAME IS NULL:2009/10/22(木) 16:20:55 ID:???
>>963
結果条件によって、
それぞれ、データベースAとデータベースBの
コミット、ロールバックするということじゃないの。

966 :961:2009/10/22(木) 16:32:36 ID:???
>>965
まあそれでもうまくいくみたい?なんですけど、
複雑になってくるとあれなんで
2相コミット機能でのやり方を知りたいのです。

967 :NAME IS NULL:2009/10/22(木) 16:40:56 ID:???
実際、2相コミットは、やったことないので、わからないけど、
以下を参考にしてみたら。

http://itpro.nikkeibp.co.jp/members/ITPro/oss/20050616/162881/

968 :961:2009/10/22(木) 21:12:00 ID:???
>>967
ここは既に見ました。
でも、いまいちちゃんと書いてないから
実際の書き方がよくわからないんだよね。

なんでこんなに情報少ないんだろ



969 :NAME IS NULL:2009/10/22(木) 21:31:51 ID:???
COMMIT の代わりに PREPARE TRANSACTION + COMMIT PREPARED するだけだろ?
ほかに情報が必要か?

970 :NAME IS NULL:2009/10/22(木) 22:38:30 ID:???
>>960
Linuxの話だけど8.4系は1.2系の最新RCじゃないと動かない
まず本体を8.3系にして試してみ
それで通るならスタックビルダでバンドルされる版が8.4に対応してないものだと思う

971 :NAME IS NULL:2009/10/22(木) 22:50:27 ID:???
>>968
2phaseコミットの説明なら、Javaの情報を当たった方がいいんでは?
XAとかのキーワードでどうぞ。

どの実装であれ、トランザクションを用意して
各データソース/セッションごとの操作は、全体で協調取れるまでは
ローカルのコミットという状態で、全てをコミットできる準備が出来たら
全体に対しコミットの号令を掛けてグローバルなコミットとする
という感じの流れでは?
実際には、>>969 だけじゃないの?

972 :NAME IS NULL:2009/10/22(木) 22:56:52 ID:???
>>971
2つのDBの整合性が取れてるかどうか判断する前にローカルをコミット扱いにするのは不味くない?

973 :NAME IS NULL:2009/10/22(木) 23:08:28 ID:???
>>971
XAだとPostgresとはコマンドの対応が違うから、むしろ混乱するかも。

2PCはフレームワークに任せられるなら任せたほうが楽。
Javaなら結構あるけど、PHPだと少ないのかな?

>>972
「ローカルのコミット」は「準備済み」の意味っぽい。自分も始めて聞く用語だが。


974 :NAME IS NULL:2009/10/23(金) 00:15:41 ID:???
>>970
今度8.3で試してみます。

975 :961:2009/10/23(金) 08:48:25 ID:???
>>969
ロールバックの判定の仕方が不明


976 :NAME IS NULL:2009/10/23(金) 10:46:18 ID:???
>>961の頭をロールバックした方が良い件について

977 :NAME IS NULL:2009/10/23(金) 11:55:37 ID:???
ロールバック機能付きの人生がほしい

978 :NAME IS NULL:2009/10/23(金) 11:56:34 ID:???
>>977
親がロールバックしてお前が消えるぞ

979 :anonymous:2009/10/23(金) 12:06:07 ID:???
>>976 の頭は、オールバック

980 :NAME IS NULL:2009/10/23(金) 12:10:25 ID:???
 お茶とロールケーキ
  いりませんか〜♪
`∧_∧
(・∀・ )  旦~@
0┬0)囗-| ̄ ̄ ̄|
◎┴し-◎  ̄◎ ̄ 〜

981 :NAME IS NULL:2009/10/23(金) 12:14:32 ID:???

 テーブルの更新に失敗したので
    ロールケーキしました。



982 :NAME IS NULL:2009/10/23(金) 12:31:13 ID:???
>>976 の頭をロールバックして髪フサフサにしてやれよ

983 :NAME IS NULL:2009/10/23(金) 16:22:22 ID:???
お前ら多少はマジメに答えてやれよw

>>975
PREPARE TRANSACTION <gxid> が成功する前ならば、普通に ROLLBACK。
エラーが起こったときも、通常通りロールバックされる。

PREPARE TRANSACTION <gxid> が成功した後ならば、ROLLBACK PREPARED <gxid>。

COMMIT PREPARED が成功した後は取り消せないので、万が一 COMMIT PREPARED が
失敗したノードは切り離して縮退運転するしかない。まず、ありえないはずだが。

984 :NAME IS NULL:2009/10/23(金) 19:30:46 ID:???
2相の使い方よくわからないけど、
http://itpro.nikkeibp.co.jp/members/ITPro/oss/20050616/162881/?ST=oss&P=2

をSQLコマンドでの確認はできた。

結局、個々のSQL結果を判断して、
commit,rollbackをするか、
COMMIT PREPARED,ROLLBACK PREPARED をするってことじゃないの?
個々で判断制御となると2相のメリットというか使い方がよくわからないけど。

SELECT * FROM pg_prepared_xacts;

の抽出結果を見て制御するってことなのかな?

985 :NAME IS NULL:2009/10/23(金) 19:33:11 ID:???
ところで、
>>961 さんは、どんな環境、どこまで、確認できてるの?

986 :NAME IS NULL:2009/10/23(金) 20:16:12 ID:???
ぱっと見じゃ、
普通のトランザクションの
--db1--
begin;
〜(insert分など)
commit;(または rollback;)

--db2--
begin;
〜(insert分など)
commit;(または rollback;)


2相の
--db1--
begin;
〜(insert分など)
PREPARE TRANSACTION 'test1';
COMMIT PREPARED 'test1';(または ROLLBACK PREPARED 'test1';)

--db2--
begin;
〜(insert分など)
PREPARE TRANSACTION 'test2';
COMMIT PREPARED 'test2';(または ROLLBACK PREPARED 'test2';)

は、結果は変わらないように思えるけど。
片方(test1)のDB1のCOMMIT PREPAREDが成功したあと、
もう片方(test2)のDB2のCOMMIT PREPAREDなどが失敗しても、
test1側は、もう元に戻せないみたいだし、
何が2相のメリットになるんだろう。

他のDBなどからでも
SELECT * FROM pg_prepared_xacts;
で2相実行中の抽出結果を見れるということくらい?

987 :NAME IS NULL:2009/10/23(金) 20:38:38 ID:???
>>984
実際のcommitに先立ってcommitに成功するかどうか判断するのがprepare transaction。
これに成功すればcommit preparedは無条件で成功する。

つか、2相commitが必要な理由がわからないんだったらわざわざ使う必要はないと思うが。

988 :NAME IS NULL:2009/10/23(金) 21:26:44 ID:???
新スレ。
PostgreSQL Part.7
http://pc11.2ch.net/test/read.cgi/db/1256300618/

989 :NAME IS NULL:2009/10/24(土) 03:05:24 ID:???
>>987
>つか、2相commitが必要な理由がわからないんだったらわざわざ使う必要はないと思うが。

何がメリットになるんですか?

990 :NAME IS NULL:2009/10/24(土) 04:13:22 ID:Ft8Sh8L4
>>986
以下の順番で実行すれば2相コミットの目的である
複数データベース間の一貫性保証ができます。

// db1操作
begin;
〜(insert分など)
PREPARE TRANSACTION 'test1';
if (失敗)
  return 操作失敗  // db1、db2とも変更なし

// db2操作
begin;
〜(insert分など)
PREPARE TRANSACTION 'test2';
if (失敗)
  ROLLBACK PREPARED 'test1';  // db1の操作取り消し
  return 操作失敗  // db1、db2とも変更なし

// コミット
COMMIT PREPARED 'test1';
COMMIT PREPARED 'test2';
return 操作成功  // db1、db2とも変更あり

991 :NAME IS NULL:2009/10/24(土) 13:24:53 ID:???
>>990
ありがとうございます。

以下とあまり変わらないとも言えるのかな。

--db1--
begin;
〜(insert分など)
if (失敗)
  ROLLBACK;  // db1の操作取り消し
  return 操作失敗  // db1、db2とも変更なし

--db2--
begin;
〜(insert分など)
if (失敗)
  ROLLBACK;  // db2の操作取り消し
  return 操作失敗  // db1、db2とも変更なし

commit;(db1)
commit;(db2)

992 :NAME IS NULL:2009/10/24(土) 13:44:06 ID:???
それだとdb1のコミット後db2のコミットに失敗したらdb1は元に戻らない。

993 :NAME IS NULL:2009/10/24(土) 15:04:52 ID:???
COMMIT PREPARED 'test1'; --(db1に対して)
の成功後、
COMMIT PREPARED 'test2'; --(db2に対して)
に失敗したら、db1は元に戻らないようだけど、
普通のCOMMITと2相のCOMMIT PREPAREDの差は、リスクの差?

994 :NAME IS NULL:2009/10/24(土) 15:31:33 ID:???
なるほど、サーバーが途中でこけても、
2相のcommit prepared;は、保存されているから、再起動のあとでも、
commit prepared;を実行すれば、対応可能、トランザクションの結果が保証されるということか。

初期処理で、
SELECT * FROM pg_prepared_xacts; を見て、
commit prepared;を実行しておかないといけないってことね。

どうも、みなさん、勉強になりました。
私は、>>961 じゃないので、念のため。


995 :NAME IS NULL:2009/10/24(土) 15:42:19 ID:???
>>990 を改変すれば、以下ということかな。

//初期処理(何らかの原因で、2相トランザクションが残っている場合)
SELECT * FROM pg_prepared_xacts;
if (gid='test1') //db1のトランザクションが残っている場合
COMMIT PREPARED 'test1';

if (gid='test2') //db2のトランザクションが残っている場合
COMMIT PREPARED 'test2';

// db1操作
begin;
〜(insert分など)
PREPARE TRANSACTION 'test1';
if (失敗)
  return 操作失敗  // db1、db2とも変更なし

// db2操作
begin;
〜(insert分など)
PREPARE TRANSACTION 'test2';
if (失敗)
  ROLLBACK PREPARED 'test1';  // db1の操作取り消し
  return 操作失敗  // db1、db2とも変更なし

// コミット
COMMIT PREPARED 'test1';
COMMIT PREPARED 'test2';
return 操作成功  // db1、db2とも変更あり

996 :NAME IS NULL:2009/10/24(土) 16:27:41 ID:???
サーバが途中でこけたとかでなくても、
普通のコミットだと制約違反とかでCOMMIT時に失敗することは普通に起こる。
2PCならPREPARE TRANSACTIONが成功した時点でそこはクリアしてることが保証される。

997 :NAME IS NULL:2009/10/24(土) 16:38:45 ID:???
>>996
普通のCOMMITがエラーになることがあるのは、わかりますよ。
2相のCOMMIT PREPAREDがエラーになることがあるのかどうか、知らないものでして。

それで、テスト的に途中でサーバーを再起動してみて、2相トランザクションがどうなるか確認してみたら、
SELECT * FROM pg_prepared_xacts;
に残っていることを確認できたので、2相のトランザクションのメリットを理論だけでなく実際の動作として確認できました。
SQLコマンドレベルですが。

998 :NAME IS NULL:2009/10/24(土) 17:00:21 ID:???
>>997
ディスク故障とかを除けば、COMMIT PREPAREDがエラーになることは、まず無い。

999 :NAME IS NULL:2009/10/24(土) 17:05:49 ID:???
COMMIT PREPAREDは障害でもない限り常に成功する。
障害の場合は回復時に再実行すればいい。

1000 :NAME IS NULL:2009/10/24(土) 17:15:56 ID:???
1000なら、次スレへ、
そうでなければ、1へロールバック

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

253 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)