そういえば本家MLで、PostgreSQLが普及しない要因として PostgreSQLという名称(読みにくいだったか、呼びにくいだったか忘れた)を理由に挙げていて、 変更しないか? って話しが出てたよねぇ。 日本ではソコソコ普及しているので名称を理由にするのはおかしいと 石井氏らは名称変更に反対していたようだけど、その後どうなったんだろう。
なんかだっせぇ名前になるんじゃねぇの? BestSQLとかFastSQLみたいなw 調べてみたらSuperSQLは実在するのな…
MySQLに対抗してYourSQLとかな
PoSQLも実在するのか 難しいな
10年前とは違って、今ならSQLってつける必要ないんじゃね。 エスキューエルにしろシークェルにしろ、全体的に長ったらしくなる。 どうせならPogitとかPgrexみたいなのをきぼん。
むしろSQLってついてるのSQL ServerとMySQくらいじゃね? Oracle,DB2,infomix,Sybase,HiRDB,Firebird だぜ他は
>>9 OracleとかDB2ってSQLより歴史あるじゃん。って、DB2がSQLの始まりか。
で、10年ぐらい前なら「問い合わせ言語にSQLを採用」って文句があったりして
でも今なら、わざわざことわりを入れなくてもって意味。
ダイソー風 ザ・データベース ソースネクスト風 驚速データベース 小林製薬風 データベース置くだけ
むかしSQLを勉強しようと思って PostgreSQLて名前が怪しそうに思えて MySQLで勉強始めた俺が居ます
>>11 データベース置くだけに一票。
でもカスタマイズ出来無そうw
なんだか、名前の話ばかりで、機能や設定・保守にかかる手間の 話がないようですが、ここにいらっしゃる方たちが経験的に思った 「他と比べてPostgreSQLはこうだと思った」という意見を 聞きたいです。良いところ、悪いところ含めてお願い致します。
前スレまでいっぱいあったじゃない Oracleと較べてだけど、Linuxで使うには手軽、学習コスト少ない、 webの情報が多いのはいい。でもエンタープライズ系は情報少ないし、 使ってる人も少ないんだろうなって思う。そもそもキャッシュ2GB以上 設定しても性能が上がらないとかちょっと・・・って感じ。 突然死してデータ壊れたときにチェックポイントとアーカイブログから データ復活させる方法とかOracleならサポートに聞けば一発だけど Postgresだと「できるの?できないの?自分で調べろって?復旧予定時刻が 予測できません。」ってなる。だから定期バックアップとってれば なんとかなるようなシステムでしか使わない。 データ復活の話はあくまで例で実際には壊れたことないんだけどね。
エンタープライズってな話が出てきたので便乗質問。 前スレで質問してた人も居た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でも突っ込んだ内容が見つからない。 もう少し「出来る」「出来ない」を突っ込んで書いて貰えたほうがいいと思うんだけどな。
仕事の質問2chでするなよ MLで聞けば即答だろそんなもの
MLは気軽に質問しづらいんだな
MS SQL Server と比較してはどうかな。こんなもんかな? ・GUIツールが無い分、コマンドを覚えないといけない。 SQLを書くようにした方が、コマンドの履歴が残るので良いという意見もあるが。 ・準備や学習としては低価格。 ・稼動実績的には負ける。 ・VBやAccessなどMSの製品との組み合わせではパフォーマンス的にやや劣る。
全部間違いだと流石に釣りに見える
MSSQLと比べて、 ・GUIツールの機能が貧弱 ・無料 ・対応OSが豊富 印象としてはたくさん使われてそう パフォーマンスはよく知りませんが、 Windows+MSSQL(未調整) >>>>>> Windows+Oracle(社員チューニング) というケースもあるので、調整次第、環境次第。
こんなスレで言うのもナンだが、MSSQLは割と良い 元々Microsoftが作ったわけじゃないけど今はMicrosoftが売ってるソフトは出来が良い法則だな まぁ、シーケンス周りとか、ストアドファンクション、テーブルの継承とかそこらへんの便利さでポスグレの方を好んで使ってるけどさ
MSが手に入れてすぐのバージョンがひどかったらしいという話は聞いたことあるなあ。 PostgreSQLはバキュームしなくてよくなったというのがすごく大きいと思う。
>>21 全部間違いって何処が間違い?
PostgreSQLを主語にして読むんだろ?
俺もどれも微妙に間違ってるように見えるがw
・GUIツールが無い分、コマンドを覚えないといけない。 →GUIツールある ・準備や学習としては低価格。 →低価格じゃなく無料 準備や学習に限らず実運用でも無料 ・稼動実績的には負ける。 →SQL Serverのシェアが高いのはエンタプライズ分野に限った話 中小サーバやレンタルサーバなども含めると 稼働台数としてはオープンソース系DBの方が数が勝る ・VBやAccessなどMSの製品との組み合わせではパフォーマンス的にやや劣る。 →場合による
バキュームしなくて良くなったって autoでしてるだけじゃね?
日時バッチで大量にレコード削除とかすると勝手にvacuumが 走ってしまってバッチ処理完了が遅くなる。そういう場合は autoをきってバッチ完了後に手動でやるようにセットしておいた方が効率的。 postgresqをちゃんと運用する上でvacuumがどういう処理をしていて どういう風に使うと効率的なのかはきちんと把握していないと駄目だと思う。 max_fsm_pageの設定とかもあるし。 データサイズが1GB未満のシステムなら誤差の範囲でおさまるかもしれんが。
そこでSSDですよ 爆速Random I/OでVACUUMも軽々 いやまだ試してませんが
うちはRAMディスクに入れて驚速postgresqlにしてるよ。
>>33 HDD等への待避とかどうしてる?
電断に備えてどういうことして居るのか詳しく教えて貰えると嬉しい。
>>34 CRONで普通に12時間毎のバックアップと、電源断信号でのバックアップ。
>>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ドライバを紹介していただけ無いでしょうか よろしくお願いいたします
それこそMLに投げればすぐ答えが出る質問をなぜまた過疎板に投げるか ライセンス気にしてるんだから義務だろ? ここでもし問題ないよって言われて実は問題あったらどうすんの? 上司に2chでそう言われたとでも言い訳するのか?
まぁML登録すんのもめんどーだし、 カルーイ気持ちで質問したんじゃないのかな 気に食わないんだったらスルーでいんじゃーの
軽〜い気持ちで会社倒産とかな スルーでいいよw
他のDBとの比較の話が出てきていたので、質問です。 開発用のツールについてはどうでしょうか? SQLの実行効率の確認のやりやすさとか、試験用、本番用の 相互移行がやりやすいとかいろいろあるかと思いますが。 あまりいろいろなDBを触ったことが無い私としては、GUIに力を 入れているMS製品がツール方面では強いのかなと思えるのですが。
DBに依存しない強力な開発ツールがあればいいんだけどねえ。 俺が今まで使った中ではSI Object Browerが一番使いやすかったんだけど、 あれはOracleにしか対応してない。ストアドのステップ実行とかもできて 便利。Oracle標準のツールでもできるんだけど重いし画面も わかりづらいんだよね
Object BrowerがOracleにしか対応してないとか何億年前の話だよ
あごめんERの方と勘違いしてたわ ってか普通にPgAdmin使えばOB以上のことできるけどね
Wndows版とかインストールするとついてくるやつ? ダンプとかは楽だと思ったけど、複数接続の管理とか SDI なウィンドウとか、いまいち使い勝手が微妙なんだよね。 Object Browserに慣れちゃってるせいもあるけど。 Postgresの時はさくさく動くCSEを未だに使ってます。 Vistaにしたら右上のフォルダツリーがうまく動かないけど
複数接続の管理とかCSEの100倍楽に思うけど
業務上複数のDBにぽこぽこ繋ぐので、SDIだとどのウィンドウが どこの接続かわかりづらいんだよね。 いやよく出来てると思うけど。 Eclipseで開発してるからプラグインであると便利なんだけど、 DBViewerプラグインてインデックスとかシーケンスとか 見れないんだよなあ
不便だと思うなら自分で作れば良いだけ。 それがオープンソースの思想。
50 :
NAME IS NULL :2008/10/26(日) 20:37:51 ID:TPXcwIfN
phpとポスグレがつながらなくて困っているのですが、 どなたか、3歳の子供でもわかるくらい、丁寧に説明してくれている サイト、知りませんか? まじで、困ってます。どうぞ宜しくです。
どうつながらないのか 構成とか
ガムテープなら結構粘着力あるから繋がるんじゃないかな? 重ね貼りするなら布テープの方がいいかも
他のに比べると、PostgreSQLはオープンソース思想が強いから そういうところを障害だという状況の場合は、避けたほうが 良いのかもね。 逆に、製品思想が強い傾向にあるのが、MSとOracleかな。 MySQLはPostreSQLよりかな?
製品の差を感じる以前の問題じゃないのか?
製品思想ってそもそもなんだ
>>53 オープンソースに向かってオープンソース思想が強い
製品に向かって製品思想が強いってさぁ・・・
1行目を読んだ時は「他のオープンソースに較べて」ってことかなあと
思ったけど、商用製品に向かって製品思想がつおいっていうのを見て
レスする気が失せた
でも
>>53 の人気に嫉妬して書いてしまった
>>50 そのクソったれなレス具合を見ると多分PHPのPostgreSQL用のモジュールもしくは
がPDOが使えてないだけだな!
PostgreSQL×PHPで作るなんとかって本買ってやれよ 古いけど
PHPでひっかかってるのか、PostgreSQLでひっかかってるのか ネットワークやセキュリティ関連でひっかかってるのかわからんとなあ
日本語力でだろどう考えても
じゃあftp2かSRAから落とせば?
65 :
NAME IS NULL :2008/10/28(火) 13:27:47 ID:qPqD78hF
plpgsqlの関数に、行型を渡す事は出来たのですが、 そこからさらに同じ行型の引数を取る関数に、その引数を又渡しして 呼ぶ事ができません。文法的な事だと思うのですが、 どうやるか、どなたか知りませんか?
>>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
なんで最初からソース貼らなかったんだ
>>67 バージョンいくつ?
うちで8.1.4と8.3.1で、それそのままやってもエラーでないけど。
バージョンはPostgres95という奴です 数字の部分が一番大きいのが最新版と聞いたのでこれにしました
71 :
NAME IS NULL :2008/10/29(水) 15:43:55 ID:zttMKq35
70は偽。俺が65です。 バージョンは7.4.6、Linuxです。
>>71 最新版は8.3.4だよ
>>69 はエラーでないって言ってくれてるから8.3.4入れなおしてみたら?
適当に入れ直せる環境ならいいんだけどね
逆にこっちで7.xで試そうと思ってもちょっとめんどうだな
せめて7.4.22にしろよ .6とか検証しようないわ
そろそろ7.4って公式サポート切れ(5年)なんだが、 今から7.4で開発ってまずくないか?
77 :
65 :2008/10/30(木) 10:54:46 ID:???
既存システムの改修なのでバージョンupは難しいです。 8の環境が手元に無いのですが、7と8では結構文法が違うみたいですね。 ほんとしょーもない文法的な事だと思うんですけど、 諦めつつあります…
しょうもないと思うならなんで本家にコミットしなかったのか
そうじゃなくて差の話でしょ? たぶん代替手段はあるとは思うけど・・・
80 :
65 :2008/10/30(木) 13:05:49 ID:???
>>78 よくやる様な事なんで誰か知っているかなーと思い、
気軽な2chにポストしました。
>>79 ストアドを使わないという事ですか?
その方向で考えてます。今回はバージョンが低かったと。
原理的には出来る事のはずなので、8で出来るなら
7にも方法があるとは思うのですが、資料が無くてお手上げです。
もしやそれって7のマニュアルすら探し出せないと言うこと?
82 :
65 :2008/10/30(木) 17:10:34 ID:???
>>81 7のマニュアルは見ていますが(もちろん8も)、
plpgsqlの解説は元々少ない上に、ほとんどプリミティブ型を使って
説明しているので、テーブル型につてはよく分からんのです。
>>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
代入の構文自体が間違っているのでしょうか?
プリミティブではこれでよいはずなのですが、行型はどうにも…。
いや、それをやるなら 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 に変わっただけのエラーが出ます。
そう?
うちで7.4.xで試したけど、明らかに
>>67 とは違うエラーになったよ。
88 :
65 :2008/10/31(金) 14:51:53 ID:???
当方では ERROR: column "in_t" does not exist と出ます。 どちらも「識別子が見つかりません」的な意味じゃないでしょうか。
全然違うだろ、それをヒントに対応できるべ
90 :
65 :2008/10/31(金) 15:07:37 ID:???
>>89 同じにしか思えませんw
識別子が見つからない場合で、$付きならparameter、
.付きならrelation、そうでなければcolumnにしているだけでは?
自分も7.4で試してみたが、確かに65の言うとおりになるわ。 7.4だと未対応なんだと思う。おとなしくプリミティブに分解するしかないかも。
初めまして。 8.3.4を学習用にインストールしてみました。OSはWindows2000SP4です。 pgAdminVから'任意のSQLクエリーを実行'画面でSQLを打ち込んでみると 日本語のところが'□□□'のように表示されます。また、メッセージタブも□□・・・ と出力されます。インストール時のEncoding(UTF8)、Client(S-JIS)でした。 またpgAdminVの[ファイル]-[オプション]-[全体]-[ユーザ言語]は(ja_JP)日本にしております。 文字化けの解決方法はありますでしょうか。
何もしなくても文字化けしたことないからわからん 逆に何か余計なことしたんじゃないのか
フォント変えたらいいんじゃない?
>>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 が真のリリース理由かも。
8.3.4はやけに短命だったな。
98 :
65 :2008/11/04(火) 11:31:10 ID:???
>>91 試していただきありがとうございます。どうもそうみたいですね。
全くの推測ですが、8から引数にOUT指定が出来るようになった事と
関係があるのではないでしょうか。OUT指定とは即ち参照渡しであり、
また行型はサイズが大きいので参照渡ししか許されない、とすると、
言語的に値渡ししかできない7では、行型の又渡しが出来ないのも
納得できる気がします。
まあ9割方外してるでしょうけど。
しまった。 毎日300クライアントのアクセス(Delete, Insert)でVACUUMせずに放置してたら いつの間にかDiskFullに。 やっちまった。orz
バキュったところで時間の問題だろそんなの
102 :
99 :2008/11/06(木) 21:42:56 ID:???
データ的には1クライアント/8KBにも満たないテキストだったのと、
テスト運用環境だったので2ヶ月近く放置してましたがな。
>>100 まぁDiskも8GBのうち空きが33%とかいうテスト環境なんで。
時間の問題ですね。
>>101 さっき登録しました。
連休明けたら、アーッ! みたいなね。orz
本運用じゃなくて良かった。
とりあえずレポート取って容量の見積もり算出するかな…。
見積もりで思い出したけどOracleみたいな見積もり出せって言われることあるんだけど あんまり意味ないよね実際
ソフトにかかる分ハードウェアに乗っけれるから、そーいう風でいいんじゃね? とか言ってみるテスト。
見積もりって容量見積もりのことでしょ? PostgreSQLは物理ディスク空いてりゃそれでいいから、 必死に工数掛けて見積もりする意味はあんまないね。 昔のOracleだと領域作ってアタッチしなきゃならんかったから必須だったけど。
すみませんが質問です。 pgAdminIIIなんですが、GUI上で、一旦定義したテーブルの列を修正・追加 したり、順番を入れ替えることは可能なのでしょうか。 右クリックから定義を保存してエディタでCREATE文を書き換え、テーブルを 削除してから定義を実行すればテーブルを作り直せるというのはわかりました。 なんというか、MS-ACCESSみたいに簡便になるとよいのですが。
ALTER TABLE ADD COLUMN と書くだけなんだが、 それでもマウスで操作できないと嫌かい?
順番入れかわらんだろそれじゃ 実は管理テーブル加工すれば順序変更できるけどお勧めできない
列の順番を気にするのは人間だけだしDBMSとしては別にどうでもいいよという流れだからなあ。 MS製品は順番変えられるので人間に優しいね。 postgresだとテーブルダンプして、順番変えて、食わせてる。 つまり、同じくDROP→CREATEやってる。
フレームワークの開発ツールだとあるんだけどね S2JDBC-Genとか コマンドライン操作でJava知らないと使えないけど
フレームワークの開発ツールって壮大だなあ。 それはさておき、結局DROP CREATEをやってるようにしか見えたんだけど何が違うの?
列を入れ替えたVIEWを噛ませば良いだけの話。
>>111 まぁバックアップ→DROP→CREATE→リストアを自動でやるだけなんだけどね
目的が達成できるなら中身はどうでもいい気がするけど
>>100 の「バキュった」って何か良いね。
バキュる
バキュり
バキュった
バキュられた
バキューン
今度仕事で使わせてもらう。
まぁ、使ってるのは原則8.3系だから意図的にバキュる事はあんまり
ないんだけど
バキュられたって言われたら鉄壁ガードされてるみたい
バキュラかw
胸がバキュバキュしちゃう☆
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
>>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とかはじめて知りました…
118はgenerate_seriesが7.2には無いことをまだ知らない…。
122 :
119 :2008/11/10(月) 23:45:15 ID:???
>>121 あー、そだっけw。
標準ではインストールされないけど、
connectbyの様に用意されてなかったかな。
質問です。 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では使えないようです。
使えないかどうか調べてみて、進展があったら結果を書き込みますね。
ご教示ありがとうございました。
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で確認済み。 細かい引数チェックとかしてないからね。
>>123 select * from a_tbl join b_tbl on (条件1 AND 条件2);
こうしてるけど、それが効率的なのかどうかは知らない。
ここでそれの解をえられると何かとありがたいかも。
>>123 バージョンによって違うと思うが、プランナやオプチマイザが賢いので
効率は同じだろう。
っていうか、EXPLAIN で調べりゃわかると思うが。
>>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関連のコンパイルでヘッダー参照出来ず返ってこなくなる
スキーマに対するGRANTについて教えてください。 あるスキーマに属する全てのテーブルに対して、SELECTのみ許可したいです。 将来そのスキーマにテーブルが追加されても自動的にその許可属性(SELECTのみ)を 持たせたいです。 調べたところ、スキーマに対するGRANTはCREATEとUSAGEしか付与できる権限が ないようなので、SELECTのみ許可させるにはテーブル単位でGRANTするしか なさそうで、困っています。 なにか良い方法はありますでしょうか?
SELECT権限しかないユーザ作りゃええやん
やりたいことはわからんではないが、自動的な権限の譲渡は危険すぎるな。 「テーブル一覧を取得してGRANTのSQLを作成し、文字列として返す」 みたいなSQLを書けば一括で処理できるかなぁ。
>>136 ,137
教えていただき、ありがとうございました。
pgAdminIII (Ver1.8.4)について教えてください。 pgAdminIIIでは、データベース or スキーマ or テーブル に、ログインロールの権限を 追加することはできないのでしょうか? pgAdminIIIにて、データベース or スキーマ or テーブルのプロパティから「権限」タブを 選択し権限を設定しようとすると、権限ロールの欄は「public」しか選択 できません。 SQL文でやらなきゃダメなんでしょうか?
ちょっとやってみたけど、 そこの権限はグループロールに対してだけできるみたいね。
>>139 ウチがVer1.8.2なので、表記が違うかもしれないけど、以下をオンにすればできるはず。
ファイル→ オプション→設定項目ページの権限のためのユーザー表示
>>141 できました!
ありがとうございました!
これで丸2日、悩んでました。
pgpoolIIについて教えてください。 pgpoolIIをLinuxで動作させ、PostgreSQL本体は LAN接続された2台のWindowsマシン上で動作させる ことは可能でしょうか?
データベース名を変更するにはどうすれば良いでしょうか?
すんません。 ALTER DATABASE name RENAME TO newname で出来るんですね。
すみません。 とあるテーブルで主キーをintegerにして、その値を自動的に振ってほしいと考えてます できれば連番になっているとうれしいです PostgreSQL(SQL)にはsequenceという文があるとのことですが、これをpgAdminIII上で設定することは可能でしょうか? よろしくお願いいたします
PostgreSQLの場合、serial型を指定すればsequenceの作成とデフォルト値の設定を自動でやってくれる。 pgAdmin3でもserial型を指定すれば桶。
ありがとうございます serial型指定してみます
アプリケーションが取得したコネクションを一定期間後に無効にする設定は可能でしょうか? たとえば、webアプリケーションがPostgreSQLへのコネクションをプールしていたとき、一定期間(1日とか)プールされているコネクションが利用されない場合は切断するなどの処理です よろしくお願いいたします
>>155 そのものズバリな機能は無い。そういう機能を持つコネクションプールを使うか、
pg_stat_activity.query_start を見て、1日以上昔の時刻になっている
バックエンドの pid へ kill -TERM するよう cron でも仕掛ける必要がある。
webアプリケーションがコネクション切断するもんだろ普通 無効は使おうと思って繋いでるのにDB側の判断で勝手に切ったら その後の最初のアクセスはエラーになるぞ
>>155 pgpoolでどうでしょう?
切ったら終了じゃなくて、コネクションの再起動になるけど。
レスありがとうございます こんな質問した理由ですが、とある仕事でデータベースをMySQLからPostgreSQLにする必要が発生しました 先輩からMySQLは半日くらいで無駄なコネクション切断する機能があるから、Webアプリケーションのコネクションプーリングに細工して、コネクションが勝手に切断されていないかチェックする仕組みを入れていると言われました そのため、PostgreSQLでも同じ仕組みを入れたかったのですが、よく考えたら、勝手に切断されないなら、コネクション監視をwebアプリでやるのはムダですが、別に動作はしますよね ありがとうございました
>MySQLは半日くらいで無駄なコネクション切断する機能があるから なんだこの嘘情報は
ひょっとしてコネクション閉じないでガンガン接続して thread_cache_size越えちゃって破棄されてるだけじゃねーの? 確かデフォが1024だからそのシステムはだいたい半日で1024回使われてるってことで
MySQLは8時間使用していないコネクション切るとかなかったけ? 別のDBだったかな? なんかで、聞いた気がする
>>160 8時間がデフォだから半日は嘘ってこと?
わかりにくいよ!
MySQLはwait_timeoutというパラメータでアイドル切断される。 デフォルトは28,800秒=8時間。
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です。 よろしくお願いします。
直接pg_escape_bytea()とかして入れたのは読み書きできるの?
>>166 あ、そうですね!
PDO経由じゃなくって直接関数を呼んで切り分けしないと、ですね。
会社でないと試せないので、月曜にやります。
結果は来週報告します。
(超早いレスなのに、申し訳ないです)
>>164 MySQLはそんな仕組みがあるのか。
PostgreSQLとか他のDBもそういう仕組み準備してるのかな?
なにこのマニュアルの下にアフィリ入れて公開する悪質さは
>>170 気持ち悪いけどライセンス守ってるんなら別に良いんじゃないの?
2chの規約に違反してるな
2chの規約って?
広告目的の書き込み禁止
この程度で広告目的とするのは酷だと思うが 閾値を設定するのが難しいからとりあえず全部違反って言うのが無難なのだろうな 明らかに住人じゃない人たちによるまとめサイト潰しが流行ってるのもそういう背景があるんだな
>>170 別にアフィには見えないんだけどね。
どうしても気になるならこのサイト使わなきゃいいだけじゃん。
アフィってなーに? わからないのは無視していんでしょ。
>>176 アフィの善し悪しはともかくとしてアフィがあるのは誰でも見えると思うんだが…
アフィには見えないな。 ただのリンクが付いてるだけにしか見えない。 何の意味があるのかワカランが、SEOなのか?
広告じゃなくSEOだな 無料でサーバー貸す代わりにリンクを貼らせるタイプの
181 :
NAME IS NULL :2008/12/08(月) 21:51:50 ID:70eIdlVB
列が文字列で出来ていて、この文字列の右側とかにある空白を削除して 列全体を更新したいのですが、以下の文は成功したように見えて、実際には 動きません。 テンポラリに一旦書き込んで、その結果を戻すしかないのでしょうか? UPDATE table1 SET namae = rtrim(namae); UPDATE xxx と、成功したかのようなメッセージが出るのですが、select してみると、空白が右側にきっちり詰まってます。
>>181 それでいけるはずだが。
デフォでは半角空白だけみたいなので、
[TAB]とか全角空白には効かないよ。
列がvarcharじゃなくてcharとか
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:???
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); 同じフィールドなのに読み書きでパラメタが違う・・・ なんかバグっぽいですね(^^;
>>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が効かないかが分からないのです。
>>189 rtrimが利いた上で、その後でまた空白が追加されているんだよ。
char と varchar の使い分けくらいは考えようぜ。
191 :
NAME IS NULL :2008/12/09(火) 07:43:01 ID:XC+middI
>>190 うわー、マジすか。
rtrimの後から空白を追加しているとは。目から鱗でした。
もっとも、今はvarcharで組み直してあるので、問題はないのですが。
ありがとうございます。
キャストでもいい
>>188 PDO::PARAM_LOBを指定すると、正しいデータを取得できないんですよ。
で、PDO::PARAM_STR ならOKでした。
ヘンでしょ?
だからバグっぽい・・・
>>9 sqlite のこともたまには思い出してあげてください。
>>196 それ、SQLって入ってないから。。。
挙げられてないってだけなら桐とかFileMakerとか
>>194 200KBくらいのバイナリデータでテストしたが、insertは正しくできるのだが、
selectではサイズが14バイトしか取得できなかったです。
\0で途切れているとかいうオチでは。
自分の頭がバグっぽいだけだな
shared_bufferを3Gくらい割り当ててやろうと思ったら、2700MBあたりより上を 指定すると、shmatがCannot allocate memoryとか言ってきて起動できません。 shmmaxは充分とってあるし(これが原因だと別のエラー出るよね)、shmallもipcsでみると8Gある。 postgres8.2で、OSはRHELの3だったはず。総メモリは4G。 なんかあやしい設定箇所とかあったら教えてください。
203 :
201 :2008/12/11(木) 00:31:24 ID:???
うお、レス早、thx 32ビットです。
ほかのプロセスがすでに残りを予約してたりしない?
Linux 32bitの仮想メモリ空間ってユーザ3GB、カーネル1GBだから そのぐらいで限界だよ。 あんまりぎりぎりを狙うと運用中に落ちちゃうぞ
206 :
201 :2008/12/11(木) 01:03:14 ID:???
うーんと、ipcs -mででてくるのを全部足しても約2750M。
shmmaxは3705032704だから…約3500M。
と、
>>205 ありがとう! 不勉強ですまん…。
OS制限じゃしょうがないので少し下げて遊び持たせます。
やっぱ64bitかー。
1つのプロセスに2GBメモリ使わせたい場合は、64bit必須と考えといたほうがいい。
PAEには対応してないしな。
RHEL3のころのカーネルってPAE対応してなかったの?
PAEカーネルなんて遅くて使えるかよ DB鯖なんて特に致命的だよあんなの CPUを予定の倍くらい早いのに替える覚悟じゃないと無理
やっぱsparc
2.6になるまでSMPカーネルですら微妙だしなLinuxは
早い遅いじゃなくて、対応してるかどうかなんだけど
214 :
NAME IS NULL :2008/12/11(木) 16:18:06 ID:q9vn8l9s
\timingをONにしたときに表示される時間と、EXPLAIN ANALYZEで表示される 時間の値の違いについて、分かる方いらっしゃいますか?
日毎にレコードがどんどん増えていくようなデータをPostgreSQLで管理しています。 古いデータは見たいけど、運用中のDBに昔のデータも残しておくとパフォーマンス的にもったいない気がしました。 そこで、古いデータは古いデータとして別のDBに移そうと思っています。 しかし、PostgreSQLでは別のDB(同じサーバー内の別DB)にデータを移動する方法がわかりません。 # MySQLでは (データベース名).(テーブル名)で参照できる INSERT INTO tmp_terminals SELECT * FROM (別のデータベース名).terminals WHERE 〜〜〜 みたいなことをしたい場合はどうしたらいいでしょうか?
>>215 よほど変なことをしていない限り、DBサイズが大きくなっても
処理時間はリニアに増えていくわけじゃないぞ。
>>215 自分は使ったことないけど、dblink は?
>>215 普通では出来ないけど、なんかを使えば出来るみたいなのがあった気が...。
で、同じ鯖ないならDB別けせずにスキーマだけ別けておいた方がいいんじゃね。
それこそ、
INSERT INTO (バックアップ用スキーマ).tmp_terminals SELECT * FROM (本番スキーマ/public).terminals WHERE 〜〜〜
みたいなのが出来るはず。
nice!
単に dump & reload すればいいんじゃないの?
よdblink
222 :
215 :2008/12/12(金) 10:36:37 ID:???
ありがとうございます。アドバイスを元に調べてみます。
日本PostgreSQLユーザ会の鯖落ちてる?
そうみたいだ
あーあポスグレ採用し等と思ったけど緊急だからMySQLにするかな 公式落ちてるんじゃ駄目だよね こういう所がポスグレってだめだよなあ
226は自分は優秀な釣り師と思っている
>>223 継承のパーティショニング的な使い方だな。
VACUUM の必要性を気にしないんだったら良い選択だと思う。
釣られるなってw
だが、きちんとしておいたほうが良い。 「本体の品質」にはまるで影響はないが、 「日本ユーザ会」は屑であることは間違いない。
233 :
NAME IS NULL :2008/12/15(月) 15:57:56 ID:WEqZVJO5
シーケンスの用途としては、だいたいprimary keyのあるカラムでユニークな値を生成するために使うと思うのですが ユニークでさえよければ良いのだから複数のテーブルのprimaryなカラムで共同で1つのシーケンスを 共用しても良さそうなものですが運用上マズーなことってありますか?
別にいいと思うよ。 そっちの方が手間がかかるけどオブジェクトは減るね。
最近postgres触るようになってユーザ会の今までを知らないんだけど なにが悪いの?客観的にはクズ呼ばわりするなら自分でやればって 感じなんだけど。日本語の情報があるだけでもずいぶんありがたいじゃん
236 :
NAME IS NULL :2008/12/15(月) 22:47:11 ID:wDeakmV2
やっと直ったみたい
7.4の頃からちょいちょい見てるけど、何がクズなのか俺もわからん。
ハード障害だって
タダ、そしてボランティア活動家がいる。ありがたや…
あるコミュニティをクソだというのはたぶんタチの悪い他のコミュニティの人なんだろう。 情報を提供されるだけのユーザがそんなこと考えるなんてあり得ない。 どこのコミュニティの方が優れているのかを提示してもらえると参考になるんだけど。
日本ユーザ会って本家にもかなりコミットしてるからねぇ アメリカ主流のOSS界にあって日本人が活躍してる数少ないプロダクトなのに
ドキュメントが見られるようになっただけでもありがたや・・・
lets.postgresql.jpってどうなったんでしょう…
postgresqlに対応したクールなER図作成ソフトってある?
環境は? ODBC汎用でもいい?
>>243 今はサーバ仮復旧だから、そっちまで手が回らないのかも。
ODBC対応の場合、何か問題点ってあるの? パフォーマンス?
>>249 Sugeee!! このためだけに久々に Vim 立ち上げたよ!
Emacs はないのかな。調べても見つからん。
バイナリデータをバカスカ格納したいんですけど、 LargeObject型 Text型 Bytea型 のどれがいいのでしょうか? (信頼性、メンテナンス性、速度の面で) サイズは1データ最大300MB程度です。
ってかbytea型しか無いんじゃないの? それ以前に1つ300MもあるデータをDBに格納してる人はあんまりいないと思われる あってもせいぜい数メガの画像程度でしょ
やるんであればoid型じゃね? DB自体にデータは格納されないでそのデータがあると言うことだけDBに保存されるんだけど
300MBとかbyteaやエンコードしてtext型とか絶対無理 メモリ何ギガも必要になる ラージオブジェクト(oid)じゃないと無理 ただしラージオブジェクトの場合、DB鯖が分離してると使えない バッチか何かでDB鯖にファイルコピーする必要がある
そのサイズだとファイルとして保存して、 DBにはパスだけ入れておくのが一般的。
> そのサイズだとファイルとして保存して、
> DBにはパスだけ入れておくのが一般的。
それ素人が良くやる最悪の設計のひとつ
こういう設計を一般的とか言っている時点で
>>255 は素人か
周りに迷惑かけまくってる事に自分で気がつかないバカのどちらか
なにが悪いって、こんな事をすれば検索もバックアップもろくに出来なくなるわけよ
で、それが満足に出来ないならわざわざDB使う必要ないじゃん?って話になる
初めっからファイルで格納してfindなりGoogle Desktopなり好きな物使って探せよ
DBは使うな、使おうとすら思うな
そんな設計のDBを保守してゆく事がどれほど大変なことか……
つか、そんな事も分からない
>>255 はレスすんなって
キミはどうやってんの? 300MBをBYTEAで入れてるのかw
いやだからoidだろJK
うちもファイル名のみ格納してるシステムあるなあ。 検索できない:そのデータの中身で検索しないのは前提条件だろう。 バックアップできない:これは確かに。
検索って何? ファイルの内容文を検索する事? バイナリのファイルの場合はどうするの?
だからoid(要するにラージオブジェクト)で格納すればいいだろうに
>>260 いや、だから、検索する必要がないという前提がおけるなら、
ファイル保存でもいいよねっていうことだろ
>>259 が言いたいのは。
読解力ないのか
ラージオブジェクトでFA? スピードはどよ
>>256 少しは考えろ。
300MBのファイルの検索って、どうやってやるつもりだい?
byteaとしてもラージオブジェクトとしてもインデックスを張りようが無い。
検索するならば特徴量なり概要のみ抜き出してテーブルに格納すれば良い。
「バックアップできない」ってのも意味が分からん。
普通にファイルシステム層でバックアップをとればいい。
300MB規模のデータが複数入る可能性のあるDBを、論理バックアップでまかなうつもりかい?
もし難点を指摘するならば、トランザクションやリカバリ管理が
自前になるのが面倒なことだろう。まったく本質を外した反論だ。
>>262 >>256 が「検索も――碌に出来なく」云々書いてるから、
検索って何?ってレスしてんですよ。
そもそもDBに巨大ファイルの検索なんて責任範囲外だろ。
そんなの横断的な全文検索エンジンとかの機能じゃねーの?
わざと追い込むけど、
>>262 >読解力ないのか
>>266 >だがちょっと離れすぎだろアンカーかけよ
>普通直前へのレスだと思うだろ
こんな感じでリアルに豹変されたら信頼なんて出来ないよ。
うざ・・
「世間は厳しい」って言葉の意味の一つとして、 「誰も指摘してくれない」って意味合いがあるんだよね。 わざわざ一言断って指摘してくれてるのに駄目な人ですね。
この流れでそれを読み間違う人に読解力がないとか言われたくないな確かに
273 :
251 :2008/12/25(木) 05:44:49 ID:???
皆様ありがとうございました。 264の発言が正論と思いました。 264の文中で難点と言われたトランザクションやリカバリ管理は 確かに問題になりますね。 トランザクションは一旦開発してしまえば後々問題になることは なさそうですが、バックアップ、リカバリ管理、メンテ面はよく考慮 しておかないと後々問題になりそうですね。 数MB程度のデータなら、ファイル保存ではなくbytea型がお手軽で 良いんでしょうね。
VACUUM ANALYZE = VACUUM + ANALYZE。 処理(負荷)そのものはまったく同じ。 統計情報の更新の仕方がちょっとだけ違って、 連続して実行するよりは若干精度が高まる。
>>275 274じゃないけど。
analyze はanalyzeだけ。
vacuum --analyze はvacuum後analyze。
の違いだけかと思ってたけど、
> 統計情報の更新の仕方がちょっとだけ違って、
> 連続して実行するよりは若干精度が高まる。
analyzeそのもののがちょっと違うってこと?
>>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で入力フォームを自動生成 できるのではないか、と思ったわけです。
>>279 具体的なやり方まで調べてないけど、ヒントを2点ほど。
1) テーブルとかビューなどの定義内容はシステムカタログ(pg_*)のテーブルに登録されてる。
2) psql を -E オプションで起動して \d viewname と打てば、ビュー(viewname)の定義内容を
問い合わせするSQLが表示される。
\d以外にもpsqlで使えるコマンドがどのようなSQLで問い合わせているのかわかるので、いろいろ参考になるよ。
ちょっとやってみた。 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 とりあえず*でやってみたが、列の選択は任せる。
>>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' ); では無理でした
日本語の意味が解らん つまるところ日付と整数どっちなんたよ
select now() + cast((1 || ' year') as interval) intervalに明示的に型変換するのがポイント。
intervalにcastっていうのは思いつきませんでした ありがとうございました
select now() + interval '1 year' * intcolumn; でも良いかも。
教えてください。 SJISエンコードのデータベースを作成したいのですが lc_ctypeがjapanese_japan.928ですとエラーになってしまいます。 ロケーションをOSの環境変数で変えれば良いとまで調べたのですが 具体的に環境変数に何と書けば良いでしょうか? OSはWindoowsXPです。
japanese_japan.928ってそもそも何なんだよ
すみません、間違いました。 lc_ctypeがjapanese_japan.932(=Shift_JIS)の間違えでした。 localeがSJISなのに何故SJISエンコードのDBが作成できないのでしょうか? エラーが起こりました:ERROR:SJIS is not a valid encoding name と表示されてSJISエンコードのDBが作成できないのです。
データベース作成しようとSQL実行したら CREATE DATABASE test WITH ENCODING 'SJIS'; ERROR: SJIS is not a valid encoding name SQLステート:42704 になりました。 エラーコード調べたら下記のようになってましたが、どうすれば SHIFT_JISエンコードのDBって作成できるのでしょうか。 42704 未定義オブジェクト undefined_object
OSはどうでもいいからPostgreSQLのバージョン教えろ まさか7とかじゃないよな?
>>292 ひょっとして、データベース本体もSJIS対応になってたりするの?
>>291 俺の記憶では、SJISが指定できるのはクライアントのみで、データベース本体は無理。
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桁の値が混ざっていたりして
これをどうすればいいのか迷っています。何か良きアドバイスありましたらお願いします。
>>294 update oid_associations set secret=E'\\152\\031\\310';
> byteaは 3 桁の 8 進番号が入るとPostgresqlマニュアルにありましたが「\31」なる2桁の値が混ざっていたりして
スレチネタ。2桁の物を3桁にするだけだと思うけど、
そもそもなんで2桁の物が出てくるのかな? エスケープに使用する関数を間違ってるとか。
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
PostgreSQLにVB2005からアクセスする場合 ODBCとNpgsqlではどちらが一般的でしょうか? またはそれ以外に何かメジャーなものはありますか?
.NET系はNpgsqlでいいと思うよ。 昔はlibpq.dllを直接呼ぶこともやったかな。
MySQL の found_rows() と同等機能を御存じの方おられませんか? >SELECT SQL_CALC_FOUND_ROWS * FROM xxxx limit 10; >SELECT found_rows(); やりたいことは、limit による制限のかかった結果の行数ではなく、limit がかかっていない場合の全体の行数を取得です マニュアル見ても、ぐぐってみても「そんな機能はない」で結論ついてる感じなのですが・・・
>>302 postgresは同じ条件でcount(*)するしかないっぽいな
>>302 どうしてもスキャン1回で済ませたいなら、
カーソルでLIMIT件だけ先に取得して、あとは末尾までシークって感じかなぁ。
305 :
302 :2009/01/22(木) 13:05:36 ID:???
ここの住人でもわかりませんか・・・ ないんでしょうねぇ・・・ 2回投げるか、全部とってlimit分だけ返すか二択ですね レスありがとうございました
MySQLだって便宜上関数つくってるだけで 内部では2回呼んでるのも同じだろうし
>>305 >全部とってlimit分だけ返すか
この選択肢はなしだと思います
一覧のページャとかでそういうのよく必要になるが、いつも検討の結果2回投げることにしてる countするだけなら結合しなくていいテーブルとか出てくるだろうし、速度もいつも問題にならないくらいに収まる
initdbで新しいデータベースクラスタを作って そっちをデフォルトにするにはどうすればいいですか?
よく意味が解らんが-dで新しくできたディレクトリの方指定するとかそんな答えでいいタイプの質問?
windows版postgreでも文字コードはEUC-JPにするのが普通ですか? UTF-8のほうがいいですか?
普通なんてない 自分が必要な文字コードにするまで
気分悪いだろうがSJISが一番無難らしい 文字コードに詳しい知人が言ってた。 ベストではなく無難ね。 反論よろ。 ってFAQかなw
SJISはサーバの文字コードには使えないよ。 EUC-JPだと外字の変換に微妙なクセがあるので、UTF-8がお勧め。
個人的には、全部UTF-8に統一できないのなら、 DB内部文字コードをEUC-JPにして、 クライアントとのやりとりをSJISにするのがおすすめ。 内部をUTF-8にすると、SJISからUTF-8への変換時に 機種依存文字とかでエラーが出たりする。
EUC-JPにします!
EUC-JP には難しい 斉藤 の字が入らないらしい。 そかSJISを選べなかったとわ。 まだまだ未熟者だ... いちおー自宅鯖のpgqlはUTF8にしてる。
EUCは「〜」がないよね
DBをSQLASCIIにしてSJIS突っ込んでる。 携帯が絡んでくる事が多いのでSJIS必須。
>>319 他にも色々入らないよ。はしごだか、とか。
>>320 〜の問題は厄介だね。なんであんなことに、と思う。
UTF-8にします!
少なくともJava、Perl、PHP、BASHなんかではMS932とUTF8の変換には困らんぞ MS932じゃなくてSJISから変換しようとして 機種依存文字で落ちてるんじゃないの? 気を付けるのは機種依存文字じゃなくて〜とかの マッピング違う文字だけだよ
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 を
扱えるようになれば解決しそうだけどねー。
SJISとMS932って違うのか 勉強せねばw
出来れば全てUTF-8が望ましいね〜
クライアントをSJISにってなんかやな予感しかしないんだけど、最近は 2バイト目に0x5cがあるような文字もさらりとやってくれるようになってるの? あと、MS932て記述珍しいかも。エディタでの指定にcp932でphp内での指定にsjis-win使ってる。 MS932でも通るのかな?
>>329 PHPでSJISとBOMありUTF-8は未だにウンチだよ
SJISのfgetcsvとかは0x5c問題が未だに解決されてないはず。
Eclipseで開発しようとするとUTF-8はBOMありだからhedaderでリダイレクトするとエラーがでるし・・・
クライアントはUTF-8にしといて内部処理もUTF-8でやって テンプレート出力時に好きな文字コードで出力するのが最近の王道だと思うの
>>329 MS932ってJava用語っぽいね。
一般的にはMS932=cp932っぽい。
俺もsambaでは unix charset = UTF-8 dos charset = CP932 display charset = UTF-8 ってしてる。
遙か昔は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
pl/pgsqlで複数行・複数列を返すってのに3日ハマってましたよ。orz
そろそろポスグレにJSONデータ型っていうのが出来ても良い頃合いだと思うんだ
すいません。おしえてください。エロイ人>< 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)
>>338 ↑ wakachi ← mecab
version 8.3.3です。よろしくお願いします。
↑ ludia は、いまだ確認できませんが、別の手段で時間短縮できたので、クローズします。 ludia は、引き続きググってみます。
>>340 使ったことがないから手伝えないけどあんまり夜遅くまで無理しちゃダメだよ?
明日(今日?)やれるんならもう休んだほうが良いよ。
寝て起きたら直ぐに原因が分かった!って事が結構あるんだから。
>338 PostgreSQL8.3以降は、tsearch2が標準になって@@演算子を使うようになったので Ludiaインデックスを使用する演算子は%%に変更されています。 8.3系でLudiaを使うには、Vacuum後にreindexする必要があったりするので要注意。 いつもならスルーするんだが、340みてたら書く気になってもうた。
>>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のデータソースの設定の中で、リードオンリィにチェックを つけてみたのですが、元データを自由に改ざんできてしまいます。 何か設定にミスがありますでしょうか? どなたかアドバイスをお願いします。 また、データベースに直接リードオンリー属性をつけても同じ状況です。 こちらもアドバイスをお願いしたく思います。
通常はGRANT使うけど・・・ 現状の運用に合わせるとなると、今どうやってるのかわからないと。
パラメータ default_transaction_read_only があったような。
PostgreSQL8.1を使ってますが、 -- Delete from TableA where id=xxxxxxx; vacuum TableA; -- ってPHPで都度都度テーブルバキュームするのって なんか問題ありますか?
場合によるけどそもそもなんで都度バキュームする必要あるの?
そもそもトランザクション内でvacuumできなかったような気がするが。。。
そこまでやるなら普通に8.3使ってオートvacuumでええやんけ
vacuum中にvacuumしたらどうなるんだろ
>>353 同一テーブルではシリアル実行のみ。後続が待たされる。
別テーブルならパラレルに走る。
>>349 更新が激しいなら1分間隔くらいで vacuum をスケジュールするのは
アリだと思うが、アプリよりはデーモンから発行したほうが良いと思う。
>>353 まさかRDBMSにはロックという仕組みがあることを知らないとかないよな
ROCK!!
おれクラシック
358 :
NAME IS NULL :2009/03/01(日) 17:51:57 ID:R7fc700l
マイSQLとなにがちがうのですか?
製造元が違う
バカだな 名前が違うだろ
MySQL=私の PostgreSQL=ポストグレ氏の
なるほど〜
舞ちゃんの、です
_____ / \ / /・\ /・\ \ |  ̄ ̄  ̄ ̄ | | (_人_) | 里田最高〜 | \ | | \ \_| /
365 :
349 :2009/03/02(月) 22:58:51 ID:???
>>349 >更新が激しいなら1分間隔くらいで vacuum をスケジュールするのは
>アリだと思うが、アプリよりはデーモンから発行したほうが良いと思う。
レス、ありがとうございます。
ちょっとサービスやcronの利用は最小にしたい希望があります。
とりあえず開発環境で試してますが、リレーション貼るテーブル
ではないので問題なさそう且つ機能しているみたいなんですけど。。。
ググってもこんな使い方している事例が出てこないので
ちょっと心配ですね。
以前8.2は互換性に問題があってやめましたが、
まだ8.3は8.1との互換性は検証してないんです。
本番環境はリレーション貼る必要ないだろ 特に高負荷なシステムなら更新性能落とすだけで意味ない
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;として削除しても何も動いてくれません。 だんまりです。コンソールも戻ってこない。なんででしょうか?
httpdあたりrestartしてみると動いたりしないかな?
369 :
NAME IS NULL :2009/03/17(火) 18:46:09 ID:24PL+uN8
お騒がせいたしました。削除できました。 postgresqlを再起動したら削除できたようです。
しばらく情報追っかけてなくて浦島状態なのですが レプリケーションするときの最近の主流は何ですか?
>>370 以前と同様、主流といえるものはまだ存在しない。
組み込まれるまでこのままだろうなあ Slony-IIはどうなったんだ
って中断したままか。 Postgres-Rが有望なのかな?
という事はほとんだやってないって事か?
pgpoolはちゃんとメンテナンスされてるしどうだろう?
ピジプーはもう、本体に入れちまえばいいのに。 そう思わん?
みなさんの知恵をお貸しください 内部コード:UTF8 client_encoding:euc-jp 上記の設定のDBにsjisのデータをINSERTしたところ、 2バイト文字・機種依存文字など全て文字化けすることなく登録できました。 connection後、「SET client_encoding TO 'sjis'」等は行っていません。 これはINSERT時にPostgreSQL側で型を自動判別して変換しているということでしょうか? 文字化け対策に特定の文字をhtml内に出力しておくことでブラウザに文字コードを判断させてる ということを聞きますが、PostgreSQL型で判別を間違う事はないのでしょうか?
1) どういう手段でINSERTした? 2) INSERTできていることをどうやって確認した? (PHP等の)スクリプトが噛んでるんだったら そこで変換が掛かってる可能性が、とか。 よく判らんけど。
すみませんが、質問です。
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があったらいちばん良かったのですが。 ここから先は、どうしたらよいでしょうか?
>>380 なぜ今どきPostgreSQL 7.4を使うの?
PostgreSQL 8.x使えないの?
383 :
380 :2009/03/20(金) 03:09:26 ID:???
>>382 私もそう思うのですが、これは古いシステムの部分修正で、DBのバージョンを
上げることができないのです。
その割にpgpool-IIを導入したりするのは、矛盾している気もしますが、いずれ
にせよ、決定権は私にはありません。
>>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の質問になってしまいました。スレ違いかも知れ
ません。ごめんなさい。
皆さん、どうもありがとうございました。
>>378 >>379 レスありがとうございます。
PostgreSQLは8.3.6 windows版
ODBCドライバ 08_03_0400です。
環境変数は設定していませんでした。
INSERTは4thDimensionという言語から
ODBC接続経由でINSERTしました。
4thDimensionの内部コードはShiftJISです。
確認はpgAdminから半角カナ、「(株)」等の機種依存文字を確認しました。
ここまで書いてて思ったんですが、ODBCドライバのところで
変換されてる可能性もあるんでしょうか?
>>386 ODBCドライバのログを取ってみれば分かると思うよ。
388 :
NAME IS NULL :2009/03/22(日) 10:01:46 ID:s8j4mKbf
>>386 ODBCのプロパティでエンコード指定するとこ、なかったっけ?
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
UPDATE t_test SET id=SELECT t2.id FROM t_test t2 WHERE parent_id=t2.id UPDATE対象のテーブルにはrename使えないだろ
こうじゃないのか?
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 になっていそう。
PostgreSQLはテーブル名の方はas省略できないだろ カラム名の方はできるけど
>>393 テーブル、カラムどちらとも必ずASと書いているので、気づいてないだけかもしれんが、
少なくとも手元の8.3.5では省略できる。以前も出来てた希ガス。
出来ないのはテーブルを返すサブクエリには、必ず別名をつけなきゃならないことじゃ?
>395 UPDATEでテーブル名省略したときには優先的にUPDATE対象のテーブルになる。 UPDATE対象にASは使えないのだから391で正しいはず
PostgreSQL の次のログにある[47-1]というのは何を表わしているのでしょうか? Mar 30 14:15:40 localhost postgres[2748]: [47-1] FATAL: connection limit ...
oracleでいう select * from v$session; ってpostgreだとなんでしょう?
>>397 syslog?うちじゃ出ないからわからん。
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; で連番を振れないのはどうしてですか?
>>401 です。
SERIALで自己解決しました。
403 :
NAME IS NULL :2009/04/11(土) 19:37:37 ID:xGvi71qq
失礼します PL/pgSQLで作ったファンクションのSQLをローカルのテキストに保存してたのですが捨ててしまいました。 ファンクションのソースを参照するコマンドやSQLがわかりません。 どうすればいいでしょうか。
>>403 SELECT prosrc FROM pg_catalog.pg_proc WHERE proname = '関数名'
関数のインタフェースはまた別で取らないといけないけど。
CSEとかのGUIプログラムで大抵は分かるようになってるんじゃね?
405 :
NAME IS NULL :2009/04/11(土) 19:57:40 ID:xGvi71qq
406 :
NAME IS NULL :2009/04/16(木) 09:59:21 ID:BcIkA+SW
PostgreSQL 8.4 beta1
Windows2008にPostgreSQL8.2をインストールして運用されている方いますか? 今度新規で買うwin2008サーバーに入れる予定なんだけど、問題点があれば 事前に知っておきたいです。
別にServer2008に限った話じゃないが、遅いぞ
新規ならなぜ8.3にしないの?
わざわざWindowsで使う利点は無いんだが。
>>409 あとサーバーを新規に入れるだけで、DBMS は今使ってるバージョンを
そのまま使うとかじゃね。わざわざ?
>>410 Windows しか使ったことないとか、会社のポリシーとか色々理由はあ
るだろ。利点なんて人それぞれだということぐらい理解しなよ。
昔のpgsql-jpを思い出すな。 質問者の使っているバージョンが古いと、答えるより先に 「なんでそんな古いの使ってるの?」と逆質問するやつが 必ずいたもんなw
レンタルサーバなんて多くがまだMySQL4.1だったりするしな そういう制限に出会ったことがないくらいの経験ということだよ
極端すぎる そんなレンサバ選ぶって時点でもう…
レン鯖の話で言うならPostgreSQL対応の多くのレン鯖が7.4だったりするわけだが MySQLだと下手したら3.23なんて所もある
そんなカス業者使わないで素直に仮想化プラン使えるとこ選べよってオチ
Windows + 8.1 は直せないバグがあって既にサポート切れだけど、 8.2 ならまだメンテされてる。ただ、8.3 で Windows 上でメモリ消費が減る 改修が入っていたと思うから、やっぱり新しいほうが得ではあるね。
ふーん 型変換が厳密なったと言えば聞こえはいいけど 0.1 バージョンアップでSQLが非互換とか頭沸いてるな
「0.1 バージョンアップ」=「メジャーバージョンアップ」 だと理解した上で発言して欲しいものだ。 まぁ、この件はさすがにやりすぎだとは思うけど。 互換オプションくらい残せば良かったのにねぇ。
PGClusterってもう開発止まっちゃってるのかな?
話きかないね。 バージョン固定だし、コードひどいし、こっちがコード送っても 素直に組み込まずにこねくり回して自分のものにしてから組み込むし
423 :
421 :2009/04/21(火) 12:02:58 ID:???
>>422 ありがとうございます。
他のにした方がよさそうですね。
PITRでウォームスタンバイの環境を作ろうとしてるんだけど、 バックアップされたWALって無限に増殖するよね。 随時リストアするわけだし古いログ削除してもいいの? それとも古くなったログから削除してくれる機能ってあるのかな・・・
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をエラーにする方法はありますでしょうか。
明示的にテーブルロックすればいい
postgresqlってまだVACUUM文流す必要あるんですか?
すいません他すれで解決しました
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に任せていいんじゃない?
聞くだけ聞いて、御礼はなしか・・・。 自己解決だろうが、レスには、お礼をつけるようにな。
ただの御礼は不要というか邪魔。 解決したかどうかの報告なら欲しいけどね。
人間として、社会で生活する、最低限のマナー。
クライアント側は8.1.11(centosのpostgresql-libs-8.1.11のrpm)で サーバ側は8.3をコンパイルして利用したいと思っているのですが 互換性がないとか効率が悪くなるような問題ありますでしょうか?
>>441 クライアントで使うのが libpq だけなら大丈夫だと思うけど、
psql を使うとテーブル表示とかでエラーになるかも。
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の設定がおかしいのでしょうか。 それとも何か別の原因があるのでしょうか。
pg_hba.conf
変なところでEnter押しちゃった pg_hba.confに書いてある認証方法が正しいかと postmasterの起動オプションで外部接続おkにしてるか確認
unreachable host. が気になる。XPからLinuxへのODBCの設定はIPでしてるの? 打ち間違ってない?
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でやってしまおうかと考えてしまいますが、
そうするには時間が足りない所です。
IPアドレスじゃなくて認証方式確かめろって言ってんじゃないの?
>>448 telnet サーバ 5432
で入力待ち状態になる? いきなり切断される?
>>448 postgresql.confのlisten_addressesとportは?
iptablesとかは?
VineってデフォでプロキシONになるんだっけ? だとしたら多分プロキシだな
PGって、XP Home にインストールできたか? Pro以上じゃないと無理なのかな?
>>455 Homeでダイジョブ
逆なら99%SELinuxだろうけどな〜
Windows側のイベントログには何も残ってらんのかね?
>>452 postgresql.confがデフォだと外側からlistenしない罠
pgAdminでODBCと同じPCからつながるんなら、ポートとかは問題ないってことじゃない? でも、自作のWebツールとわざわざ言ってるのが気になるな。 Webのプログラムは同じサーバからつなぐだろうから確認にならんからな、、、、 まさかpgAdminもローカルで動かしてたりして・・・
いやだから認識方式
認証でなくて? 認証確認するにしても、ODBCでやるためにはどうすればいいのか というのもあるし、まずは順番に確認すればいいでしょ。 切り分けでtrustでつながるか試す手もあるけど。
そうそう認証 携帯の予測変換使ったら間違っちゃった
>>446 の言うのが気になるね。
そのアドレスのホストそのものが存在してないように見える。
pingが通っているらしいが、そのpingのアドレスそのままODBCに入れてるのかな?
>> 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は動かしてなかったので動かそうとしてみました。 が、なんだかうまくいかないので保留です。 認証方式について調べます。
telnetで繋ぐのはtelnetじゃなくて postgresのポートだぞ?
Windows版pgAdminIIIをインストールしてWindowsから使ってみてよ。
というか、
>>443 のエラーはWinsockの10065のエラーでホストに到達できないんだけど。
ping通ったってまさかtelnetとかでサーバのコンソールからping撃ったんじゃないだろうね?
Windowsのコマンドプロンプトから打った?もしそれで通ってるならODBCのサーバの欄に
それと同じ名前で入れてるのか確認してみてよ。
とりあえずやったことをどのマシンからどういうコマンドでどうなったかまで書いてくれ。 あと、アドレスを仮定してpg_hba.confの内容やhosts等設定した内容そのものを書いてみて。 たとえば、サーバが192.168.0.1でWindowsPCが192.168.0.2とか仮定してさ。
あーでもプライベートアドレス使ってるんなら直接そのアドレス書いてもらった方がいいかな。 同じネットワークアドレスじゃない感じがしないでもないので。
実はWindows機とLinux機が別のネットワークにあってファイアウォールで5432閉じられてるとか・・・ あるかな?あるかもな?
みなさん、想像力ゆたかですね
>>473 いいや、エラーメッセージの内容から
>>468 の通りWinsockのエラーなのは分かるんだから
認証方式がとか的外れなことを書いても仕方ない。
とにかく443はさっさと質問に答えるかアドバイスに従って追試しろよ。
443はあからさまに頭が悪いので、放置すべきだとは思うけどね。
そういや最初にFW切ってもダメと書いてあったが ここを疑うべきだったかもね ノートンとか効いてるとどうなるんだろ
477 :
443 :2009/05/14(木) 09:28:01 ID:???
いやまあ 反応は遅いですが サーバー上からPing打つとかありえない想像いうか仮定してるのは ちょっと的外れです PostgreSQLのスレでまさかPingの打ち方を問題視するレベルの人が口を出してくるとは思ってませんでした 見込み違いのようですので これにて失礼します
見込み違い、そのとおり。 そんなノイズを取り除けないようならここで聞くべきではない。
君のレベルがどの程度かわからないし、 それを指摘されてもしょうがない程度の情報しか 君が出してないと言うことになぜ気がつかない?
477は明らかに成りすましでそ。443が馬鹿なのは確かだけどさ。
サーバー上で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" とでてログインできません。 ポストグレスのユーザ名とログインユーザ名が異なっていても ポストグレスのデータベースにログインできるようにするには 何かほかに必要でしょうか? パスワードは現在は設定していません。
ロール設定しろ
pg_ident.conf でマッピングできなかったっけか。
pg_hba.confに local teachers_address teacher password と追記
サーバ側で小細工するより、素直にロールでの管理にした方がいいと思うけどね。
そうかもね >ポストグレスのユーザ名とログインユーザ名が異なっていても >ポストグレスのデータベースにログインできるようにするには これに答えることしか考えてなかった。 サーバーには他にもユーザーがいっぱいいてちゃんと管理する (postgresにアクセスできないユーザーも作るとか)ならロールの方がいい。 けどユーザー追加するたびに設定しないといけなくね? テストDBとかでアカウント追加したら全員teacherでアクセスできるようにするなら postgres.confなら一回変更しておけばOK。 予想だと校内LANの本番サーバーってとこかな。あるべき論ならロール設定だけど。
>> 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 にすべきでは、 プライベートなネットワークなら問題ないと思うけど。
492 :
NAME IS NULL :2009/05/20(水) 11:33:19 ID:IicKG2eN
PostgreSQL8.4-beta2
>>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 ALTER RENAMEってALTER TYPE RENAMEのこと?
ALTERは使う機会が少ないので、いまいち実感がわかないな
それよりもmax_fsm_{pages,relations}が消えたのがうれしいな
ウインドウ関数やWITH節が追加されたのはいいがSQLが書けねーwww
psqlコマンドの-cでSQLを実行させた時に-vでstatement_timeoutを設定しても 無視されるんだけど、何か使い方間違ってるかな? psql -h dbhost -d database -U postgres -t -v statement_timeout=10 -c クエリー psqlをインタラクティブで実行してsetで設定してからSQL流すのは動作するんだけど、 そういうものなのですか?
勘違いしてるみたいだ。スマンかった。
500 :
NAME IS NULL :2009/05/28(木) 20:48:46 ID:90SWG0se
なぜかMySQLに勝てないな 知名度 おれはこっちのほうが使用経験多いけどなー
性能で抜いたから問題ないよ あっちは所詮読み出し番長
MySQL作った人(名前忘れた)はSunやめて今新しいDBMSつくってるんでしょ? 多分MySQLはOracleの簡易版みたいな扱いになるんではないかと踏んでいる。
そうか。 はい、つぎのひと。
ぼぼぼぼくはおおおおおにぎりが食べたいんだな!
カレー食いたい
>>501 そんなのずいぶん昔の話じゃないの?
日本だけPostgreSQLが流行ってるのは早い頃から
ユーザーグループが日本語文章公開してたからだと思う。
今はどっちもそれなりじゃないかと思うんだけど。
FreeBSD vs Linuxみたいにならないといいなあ。
mysqlとpsqlのコマンドが似てて混乱したり
キャッシュの特性とか最適化の方法とかMySQLの分まで
覚えるのめんどい。
>>506 日本でPostgreSQLが流行ったのってPHP3が流行りだした時に、
PHP+PostgreSQLのいわゆるマンモス本でPHPとPostgreSQLを
覚えた人が多いからじゃないかと思っている。
でその前後で石井さんのPostgreSQL本を読んだ記憶がある。
MySQLも同時期に流行りだしてたけど、当時の日本語解説本がイマイチだったのと
商用使用の場合、ライセンスがどうなのかがあやふやで悩んだな。
今は日本語の情報や構築例がどっちも数多くあるから、
どっちを使うかは開発メンバーと案件次第だな。
そもそもPostgresが普及し始めたころ、MySQLはトランザクションもサブクエリも まともに使えないから見向きもされていないという感じだったからなぁ。 その後欧米じゃMySQLの方が普及していると聞いても、逆に信じられないという 雰囲気だったし。
COALESCE(null) や GREATEST(null) が text 型になるのが納得できない。
::型 でキャストすりゃいいじゃん 何かしらの型で返答しなきゃいけないんだから そりゃ一番汎用的な型で返してくると思うよ
>>508 日本で流行り始めた当時はまだPostgres95の時代だったと思うけど、
・MySQLに比べて明らかに遅い
・頻繁にVACUUMする(当時はVACUUM = FULL VACUUM)する必要があり、
継続したサービスを行えない
なんていうデメリットはかなり大きかった。
MySQLがDBとしての機能の面で用途を限られていたのに対し、Postgres95は
性能と運用の面で用途を限られていた。
95の時代流行ってたか? 6.5くらいからじゃね
そもそもPostgres95の頃MySQLあったっけ?msqlなんてのはあったけど。
>>510 なんで unkown 型のままじゃだめなん?と思っただけ。
型キャストしたけどさ。
>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分でリストア完了します。 この差には何か原因があるのですか?
>>516 なぜECCなんて関係ないものを引き合いに出す?
性能差じゃないの スペック晒してみなよ
・そもそもスペックが違う ・実は設定も違う ・オチ思いつかなかった
サーバはキャッシュ無しSCSIだったりするとディスクアクセス遅かったりするし 同じように見えても適当に処理してるPCの方が速度だけは速いこともある
RAIDカードが壊れてたりして
運用中でアクセスがあるサーバと自分専用のクライアントPCで比較してるんじゃないか
TABLEの構造によるかもしれないけど、300MBで60分って掛かりすぎじゃね? こないだサーバ連鎖死亡でリストアしまくったけど300MBぐらいだと大体2分以内だったよ。 ラージオブジェクトを多量に含んだ2Gのは、10分ぐらい掛かったけど。 スペックはXEON3300台でメモリ8G ECCとQ9550でメモリ8G nonECC。 しかし3年は持ったとはいえHPめ。一斉に死ぬとは。 コンパックの時と同じ事やりやがって、ゆるさん。
サーバがみんな最新のだと思うなよ 最新だとしても低電圧CelelonとかVIAとかかもしれん
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分程でリストア を完了します。 この差は、何故?という感じです。
>>526 リストア時は、fsyncはOFFに。多分それだけで解決するかと。
ただfsync onでも早いサーバは早いのは
なんでなんだろう。
そういや一昔前、遅ければDROP INDEXしてダンプしろって言われたな。
>>526 Aのメモリテストを行って正常なのを確認したうえで、ディスクをRAID5からシングルのディスクにして試してみる事はできる?
RAIDのディスクは書き込みが遅くなることが良くあるよ。それが機器構成のせいなのかコントローラのせいかは解らないけど。
運用中なのかそうじゃないのかだけでもはっきりしろ
最初に ECC がどうとか言ってたんだから、相手するだけ時間の無駄
532 :
NAME IS NULL :2009/06/02(火) 00:37:38 ID:BU3d+dIz
>>529 Aのテストは、既に本番稼動していますので、残念ながら無理です。
じゃあ遅い理由は本番稼動してて負荷掛かってるからだら
>>532 RAIDでないディスクがつながっているならそちらを使って試す、って事もありかと思うけど。
どういった意図で
>>516 のテストを行ったのかは不明だけど、お客の要望で調べているなら
同じマシンをしつらえて確かめるか、メンテでお休み日を狙って試すしかなさそう。
比較するなら比較したい所以外の要素をできる限り同じにしなきゃ。
例えば@が誰もアクセスしないスタンドアロンで、Aが運用中の負荷ありサーバ、これで比較したところで
せいぜい解るのが「負荷のかかるAが遅い」ってくらいの物。「そりゃそうだよねぇ」くらいしかいえない。
条件を同じにして比べたうえで「じゃあメモリ?」「じゃあディスク?」と切り分けしていかないと。
運用中なら単純にロック取るのに時間掛かってるってだけだろ… RAIDカードがショボいとかバッテリー無いか切れててキャッシュしてないとかでそもそも早く無い構成な気がする 遅延コミット周り調整したら多少は改善されないかな?
536 :
NAME IS NULL :2009/06/02(火) 15:24:22 ID:lKPgw7jB
>>534 Aでテストした時は、DBサーバ入れ替えの為に、新たに新品
を購入しまして、コピーダンプとインサートダンプの違いを
把握したかっただけです。復旧作業所要時間把握の為
ですから社内ローカルにある@BCと基本的に同一条件での
結果でした(つまりリストア処理のみ)。
コピーダンプで障害復旧時のリストアは1分程で終わるので
問題ないレベルかなと。。。。
Webを検索してもそのような事を語っているサイトを見つけられなかった
ので、原因・対処方法をご存知の方がいらっしゃるかと思い。
その処理に限り、何故単なるPCが数倍から数十倍早いのかなぞだった
ので、raid1は早くないのは知っていましたが、違い過ぎかなと。
PostgreSQLでデータベースクラスタを作るのには、 ・PostgresForest ・PGCluster のどちらがいいでしょうか? また、上記以外にお勧めの構成があれば教えてください。 よろしくお願いします。
pgpool-IIじゃダメなの?
そもそもI/Oメインのリストアで、メモリがどうとか I/Oのベンチも取ろうとせず、違いすぎかなとか、もうね。
>>536 新品でも古くてもリストアしなおしても、RAIDが遅い事があるよ、ってのは変わらないです。
RAIDよりノーマルのディスクの方が速かったなんて、ミドルレンジの安いハードでならよくある話。
#H社のサーバなんかじゃよくそんな現象にぶつかる。SEさんに言って解決したためしは今のところ無い
私的にはディスクアクセスにRAIDのコントローラが付いていけてないんだと思います。I/O負荷の高そうなことをやってるみたいだし。
単に何で遅いのか・対処法を知りたかったのならもう色々レスがあるから終了ですね。
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です
とりあえず第一段階はtypeとdescriptionで様子見 ただデータ内容にもよるから絶対に走らないとは言えない データ長いから部分インデックスにした方がいい あとインデックス気にするくらいパフォーマンスに気を遣ってるなら せめて*はやめよーぜ
そりゃtypeに張らにゃあ つーか「ソートが発生しないように」は無理じゃね?
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 だから、検索結果をフルスキャンしないと 順序は決められないわな・・・・ #と思うのだが
>>548 並び順と関係のないインデックスなんて聞いたことない。
>>538 pgpool-IIではクラスタも作れるようになっているんですね。
テストしてみます。
ありがとうございました。
552 :
NAME IS NULL :2009/06/03(水) 16:08:43 ID:WSowL2mJ
>>550 (HDD上の)物理的にどこにあるかを早く探す為にあるんでしょ?
selectした結果をソートするのに、物理的な場所なんか関係
無いと思うのだが
>>552 INDEXスキャンだと、探し出す時点でソート済みになる。
>>543 行の読み出し順と order by 句で指定した列に張られたインデクスの並び順が、少しで一致していない可能性があればソートされちゃうんじゃないかと。
(1)列type にはインデクスが張られてないから、where 句の指定によりテーブルのフルスキャンが行われる。
(2)読み出される行の順は列description に張られたインデクスの並びとは全く関係なく読み出しされる可能性がある。
(3)読み出した行のセットは order by 句の指定によりソートされる。
つまり無理なのではないかと。
試しに where 句を外したクエリを実行するとどうなるか調べてみては?
ソートが行われるかどうかのテストはできる。
>>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)
>>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万件くらいならサーバのメモリフルに使うように設定して テーブルの情報がメモリに載るようにすれば多少フルスキャン掛かっても問題ない
>>558 「ソートせずに」じゃなくて「ソートが発生しないように」でしょ。
その下に書いてることも間違いだらけ。
唯一合ってるのは「type列にインデックスを定義すべき」ってとこだけ。
561 :
NAME IS NULL :2009/06/05(金) 08:20:03 ID:IZGperrr
select した後、サーバーカーソルからの読み出しに有効だろう 普通> order by indexが効くのは データの5%くらいといわれているんだけどね>Oracleの場合ね
普通indexは行を絞れるところにしか張らない 558の考え方はソート中心であまりにも本末転倒 まあindexでソートを速くしたいってもともとの話が変なんだが・・・
質問があるのですが、 テーブル名をワイルドカード指定することは可能でしょうか? 例えば、A0,A1というテーブル名のテーブルがあった場合、 SELECT * FROM A*; のように、テーブル名をワイルドカード指定して、A0,A1の内容を参照したいのですが。
>> 563 エスパーぢゃねから良く分からないけど、 DBの設計自体がおかしくね? 分かんないヤツは黙っとけ! とか言うなよ?
>>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 本末転倒なことは分かっている
ただインデックススキャンが選ばれる理由を説明したかっただけ
意図的にソートさせるのかさせないのかって話じゃないんだから(できないし) ソートせずにじゃなくてソートが発生しないようにってことじゃないのか
>> 563 まず SELECT tablename FROM pg_tables WHERE tablename LIKE 'A%' でテーブル一覧だしてからちょこちょこいじればいいんでないかい
>>563 SQLで直接 FROM に書くテーブルにワイルドカードをするのは無理。
PL/pgSQL とかで動的SQLにするか、A0, A1 の共通の親テーブルを作って
継承 (INHERITS) する手はあるかも。
>>563 プログラムで対応するのが簡単かも
たとえば、SQLで
SELECT tablename FROM pg_tables WHERE tablename LIKE 'A%';
とかで返ってきた結果をひっぱればいいんでない?
>>569 元々SQLって非開発者の経理担当者とかでもさわれるように
開発されたモノだから、感覚としては本来の意義に近いのかもね・・・。
DBサーバーみたいに増設するのが大変なところにロジック入れるよりは
より単純な物入れにすべきだと思うけどね。APサーバー側をスケールアウト
できるように設計してで重い処理やったりキャッシュ処理やったり。
クライアントが数えるほどしかコネクション張らないならDBサーバーで
なんでもやった方が早いけどさ。
>>566 「ソートせずに」という表現は適切でなかったと反省している
言いたかったことは「ORDER BY 句による並び替えを行わずに」と言うことではなく、
あくまで「実行計画において Sort が選択されないように」ということでした
>>570 俺もプログラムで対応するに一票
そもそもワイルドカードでテーブル名を指定する必要があるという状況がアレだが、
無理して SQL のみ(もしくは PL/pgSQL)で対応しようとすると返って手間がかかる
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 が走ってたんですが それでこんなことになりますか? デーモン自体は再起動して何事もなかったかのように動いています。
DiskのIOエラって事はないですか。
ERROR では落ちる (=クラッシュ) することは無いんだが、単に言葉遣いが いい加減なだけかな? 8.2 より昔のバージョンだと、REINDEX とぶつかって そのエラーになることはあり得る。単にクエリをリトライするしかないと思う。
あぁ落ちるというのは当方の常駐プロセスがエラーを吐いてexit()するという意味で使いました。 REINDEX との衝突で起こるのですか。 トランザクションモードとかロックとかで回避できるものでもないんですかね。 瞬間的な事象なら素直にロールバックしてリトライしますが REINDEXしてる間ずっと起こる可能性があるのは困るですね。 ありがとうございました。
というかこのいかにもDB壊れましたみたいなメッセージを リトライ対象にするって怖いんですけど。。。
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 使用
知らんがな
582 :
NAME IS NULL :2009/06/13(土) 08:13:22 ID:Pbq7ki72
8.3.4から使えるwindow関数っていいね。rank()で順位簡単に出せるようになったり。
8.4からじゃね?>window関数
間違った。8.4.3か。
585 :
NAME IS NULL :2009/06/13(土) 20:36:23 ID:Pbq7ki72
まだβか。いつ頃正式リリースなんでしょね?
8.4.3から使えるのかw
587 :
sage :2009/06/13(土) 23:45:26 ID:???
FreeBSDのportsはまだ8.3.7だったからソースからインスコしたべ。
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で固めてバックアップしてバックアップ先で展開したら普通に動いたけどこんなもんなん?
pg_dump は ROLE をダンプしないので、先に作成しておかないとダメ。 pg_dumpall で ROLE もまとめてダンプするか、 pg_dumpall --roles-only + pg_dump なら期待の動作になるはず。 8.4.3 にはツッコまずにおく。
初物には手を出さずに2バージョンくらいは様子見るんですねわかります
スレチと思いますが、postgresqlのダウンロード方法について教えてください。 私はVISTAを使っています。ユーザーアカウント制御をして、いざダウンロードをしようとしたら、モジュールを加えるのを選べみたいな文字が出てきます。 ちなみに英語版のpostgresqlをインストールしようと思っています。 適当に選んでダウンロードしてもうまくダウンロードできません。 そもそも、モジュール (Module)とは、「工学などにおける設計上の概念で、システムを構成する要素となるもの」(WIKI)らしいです。 意味がわかりません。ダウンロードがうまくいかないのはたぶん、このモジュールの選択にある気がします。いろいろ調べてもこのモジュールの選択についてはどこにも記載がないです。 すみませんが、助けてください。お願いします。ちなみに難しいパソコン用語は全くわかりません。でも、がんばって調べます。 よろしくお願いします。
>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を選べと書いてありました。 これほどのものは、コンピューターのプロでない人にとっては、わかるはずもありません。というか、自分が何してるのかもわかりません。
クライアントにデータベースサービス要求するとかどんだけ鬼畜なゲームだよw てか、ダウンロードで困ってるのかインストールで困ってるのかはっきりすれ
インストールの意味でダウンロードという単語を使っているぽいな。 とりあえず、ぜんぶデフォルトのまま「次へ」で良いんじゃないの? ちゃんと理解したいなら、「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 デフォルトでもやりました。しかし、同じくエラーになりました。
夜までパソコン環境にありませんので、また夜にこのスレをのぞかせていただきます。
>>593 ゲーム諸共あきらめることをすすめる。
そもそもデータベースなんてのはパソコンのライトユーザが直接触って使うような種類のプログラムではない。
時間の無駄だよ。
具体的にゲームって何ていうゲーム?
ここの住人の反応を楽しむゲームです
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 さん、今は携帯しなく、そのサイトをみることができませんでしたが、夜にはみて頑張ってみます。ありがとうございます。
ライトユーザーどころか、インターネットユーザーレベルなのです。それなので、このような高レベルのスレに書き込むのは場違いすぎるのはわかっています。低レベルな話をしていて本当にすみません。
がんばれ
>ライトユーザーどころか、インターネットユーザーレベルなのです 新しいな。ワロタ。とにかく死ね
まぁまぁ。 PostgreSQL ユーザが一人増えたと歓迎しましょう。 とはいえ、インストールが終わっても pg_hba.conf あたりでハマりそうだから、 帰宅途中に本屋に行ってシーラカンスの絵の PostgreSQL の本 ( 今はもっといいのがあるかな? ) でも 立ち読みするといいよ。
このレベルでシーラカンス本が読めるかなあ
『PostgreSQL 徹底入門 8対応』はどうなんだろうね。 Windows 対応もしているし。
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に関する本がおいてありませんでした。
マルチは相手にされないよ。
さっぱり理解できていないのに「真の原因」とか言わないほうが良いよ。 手続き言語やcontribの登録の段階で失敗しているということは、 インストール中の initdb か、その直後のサーバの開始で失敗したと思われる。 実行ファイル自体はインストールできているようだから、 手で initdb したり pg_ctl start したりすれば切り分けできるかもしれない。 ...エラーメッセージを読む程度の能力があれば、だが。
文系だから分かりませんってのは、得てして文系を免罪符にして 理解する努力をしていないカスだ、などと文系の俺が釣られてみる
むしろ文系なら正しく日本語で説明しろと言いたい
文系と正しい日本語はあまり関係が無かったりする
"エベレストポーカー"で検索したんだけど、オンラインカジノのソフトウエアなのね。
まぁ、それは置いておき、ポスグレが本当に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は意図的に隠しているのか、天然で抜けてるのか、特殊環境を使ってるのか、よく解らない。
って、ことで593はスルーで。
俺も普通にインストールできたぞ。593よ、インストールできたら原因がなんだったか書き込んでくれ。気になる。まぁ頑張れ。
initdbしてないだけだろ。>593
>>600 はいかにもおっちょこちょいで思い込み激しい感じに対して
>>620 おまえ普通に賢くて問題解決能力あるよなぁ。
この差はどうしようもないんだろうなと思う。
畑違いとはいえこの体たらく これで法律をあつかうのか。。。
>>593 は、そのインストールスクリプトを走らせるだけでインストールできると思ったものの、できなくてレスのリンクにあるPTの掲示板と2chにマルチで丸投げしている奴だよな。
こんな問題も分析、解決できない奴が何できるの?
つーかそのリンク先にくわしいやり方も載ってるじゃない 選択肢がいっぱい出てきてたって、その説明に載ってないなら そのまま次に進めばいいだけなのに、何を迷ってんだか。 インストールしたら初期DBを作成してそこから始めるのに 作成する前にいきなり使おうとしたエラーだな。 作ってないのに接続しようとしたら「データベースへの接続に失敗しました」と出るのは当たり前。
いやー、伸びてるなぁ、と思ったら釣りでしたか
バイナリデータを保存すべく、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 );
base64カラムにインデックス設定してない? インデックスは8kB以内という制限に引っかかってるように見える。
素直にbyteaで入れればいいじゃん
633 :
630 :2009/06/23(火) 09:52:53 ID:???
ありがとうございます。 見たらINDEX作ってました。削除したら問題なくINSERTできました。 byteaではなくtextなのは、dumpしやすいなどの記事を見たからって程度で特に理由はないです。
インデックスで検索したいならば、データ全部じゃなくて ハッシュ値とかにしたほうが良いかもね。
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 に特有なものにあんまり入れ込んでもちょっとアレだしなぁ、
と思ってお尋ねします。
そもそもPL/pgSQL自体、OracleのPL/SQLを参考に作られてる物だから そこら辺は気にしすぎない方が良いと思う MSSQLServerでもTransact-SQLとかあるし 言語仕様はそりゃDB特有の部分はあるだろうけど
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 そうですか。
ヘンタイ とか キティガイ とか後ろ指さされずに使えるってことですね。 安心しました。
ありがとうございました。
>>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の設定はインストール時から特に変えていません。 なぜ動かないのかが分らず頭を抱えています。 どこか設定など足りない箇所があるのでしょうか。 どなたか詳しい方居りましたら教えて頂けないでしょうか
solarisユーザー少ないからなあ unix板のSolaris for x86スレで聞いてみたら?
/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 たぶんウィルスに多数感染してたんだとオモワレ
アーメン
8.4.0 Release date 2009-07-01
647 :
NAME IS NULL :2009/06/30(火) 16:19:49 ID:cTyHSoG+
Mac OS Xで表計算ソフトのような形で ビューしているデータを紙にプリントしたいのだが 何を使えばいいのかな?
Access
PHP+TCPDF
8.4.0が出たのになにこの盛り下がり
以前は再帰SQLなWITH RECURSIVEの実装を心待ちにしていたが、 今、WITH RECURSIVEを使いたくなるような案件がさっぱり無いや。
Windows 版 PHP 5.3.0 の php_pgsql.dll が壊れていて PostgreSQL が使えないのだけど、どうしてる?
こんなところに書き込んでないで、メンテナに報告してきたら?
656 :
NAME IS NULL :2009/07/04(土) 09:17:14 ID:eygNMagZ
>>653 なに?
じゃあPHPのバージョン下げるばいいじゃないかって?
お、ま、まさか、、、今頃
会社でpostgreSQLでDB運用されてるんで勉強しようと思ったけど windowsでインスコする場合に ver8.1〜ver8.4で何が違うのか教えていただきたい
>>658 ちょっくら読んで調べてみます
こんな初心者丸出しの質問に答えてもらってありがとうございます
MERGE文使えるようにならんかなあ・・・
>>660 使えるようにしちゃいなよ!
オープンソースの醍醐味だよ!!
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で格納する要件があるため、レコードセットは 避けて通れないのです。。 詳しい方いらっしゃいましたらアドバイスお願いいたします。
どう考えてもASPの質問じゃないのかそれ
>>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?)と出力されていました。格納領域が足りないからエラーと なっている感じなんですが、解決方法が判りません。。 重ね重ね恐縮ですが、何卒お知恵をお願いいたします。
timstamp 型で now で INSERT すると 2009-07-08 20:00:00.035189 のように .035189 というのが付きます。 これを付かないようにするにはどうしたらいいでしょうか?
>>671 自分はnowじゃなく CURRENT_TIMESTAMP(0) でやってる。
トランザクションの開始時刻なので、それで問題なければ。
>>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が付かないのでそっちを使ってみた。
>>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:???
うまくいった方法が正しかったり定石じゃないことがあるので確認してみました
定石などない
な事はないと思うが、別に反論するネタもないという 事でわ?
秒未満の情報を捨てるのはもったいない気がしないではない。 ミリ秒まで保存しておいて、表示のときに timestamp(0) にキャストしても良いかも。
DBからはミリ秒付でとってきて表示するView(フォームのテキストボックスとかjspとかphpとか)で 見た目を決めるのが定石なんじゃない? 同じデータでも管理画面では詳細まで、メンバー画面では日付までしか表示しないとか 簡単に切り分けられるように。 そもそもDBにミリ秒が要らないならまあそれでもいいけど
683 :
671 :2009/07/13(月) 18:44:25 ID:???
なるほど。 View にしても、日付のチェックにしても、 毎回ミリ秒を捨てていたので、 最初からミリ秒なしにできないかな、という考えでした。
貧乏性なおれは要らなくてもとっといてしまう。
で、低速マシンとの相乗効果で速度ガタ落ち
何言ってんの
dateといえば to_date関数の仕様が変わっててびっくり。 ある仕事でなぜか年月日がばらばらに保存してある テーブルに出会ったので日付でbetweenするために 使ってみたんだけど、確かバージョン7.4。8.3にしたらエラーだわ。 将来メンテする人には気の毒なことしてしまった。
>>685 dateに限って言えば内部は1970/1/1からのミリ秒をlongで保存してるだろうから
切り落としした方が遅くなるんじゃないかと思ったり思わなかったり
689 :
NAME IS NULL :2009/07/16(木) 13:55:53 ID:qWUWM5Do
mysqlがオラクルに飲み込まれ、 ライセンスの関係で、 PostgreSQLキターーーーーーーーーーーーーーーーーーーってなる日も近い? とりあえず、 WEB系でシェアの高い、Wordpres,Xoopsあたりが、postgresに対応して欲しい
おらくるはMySQLが自分の顧客喰うのを阻止したかっただけでそ。 近い将来では、PostgreDQL北ーーーーとならないんでね?
PostgreDQN北ーーーー
postgresql odbc でググると未だに Interwiz のページがトップとか・・・ 消えるなりリンクを張るなりしてもらえんかなーと思う今日この頃
今の Google は検索順位変えられるから問題なし
いや自分以外の人にでしょ
693と695はゆとり
やっぱり PostgreSQL 使えてもネカフェ難民っているの?
使うだけなら難民でもできる
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 とエラーが出てリストアできません。 エラーを無視して強行する方法はあるでしょうか。 不正な文字部分は適当な文字(? とか)に置き換えてリストアされて構いません。
前スレだったか、ソース書き換えてリストア時だけ?で通してしまう というのをやってた人がいたな。俺も参考にしたっけ。
tr やら perl やら何やらでバックアップファイル自体を書き換えるというのは無し? それともXXXXには、いろんな数字の組み合わせが入るのかしら。 XXXXが取りうる値の範囲は? いわゆる外字領域? それとも本当に単に不正なバイト列?
バックアップ書き換えとかネタだろ
704 :
700 :2009/08/03(月) 05:43:09 ID:???
バックアップファイルが -Ft で作ってあったので、tar で展開して不正な文字を置換してしまえば OK っぽいですね。 不正な文字置換スクリプトを書かなくちゃいけないので、まだ試してはいないのですが・・・ ちなみに不正な文字って、どうやら生JISコードっぽいです。 数百万行のうちの数行を除いてきちんと EUC なんですが、PHPアプリのバグかなにかで文字コード変換に失敗したまま DB に書いちゃったんでしょうね。
うちも初期のプログラムのミスでいくつか紛れ込んじゃって
8.Xにするとき苦労したわ。バックアップデータも数十GBだから
間に挟むのも時間かかって無理そうだったんで
>>701 でやった
706 :
NAME IS NULL :2009/08/04(火) 09:22:28 ID:h6XVbOdQ
マイエスキューエルに勝てそう?
すでに勝っている
負けたことは無い。
709 :
NAME IS NULL :2009/08/04(火) 10:52:21 ID:HcV1M4ZQ
勝ち負けを書くことに意味は無いと思うのだがw
どっちでもいいって事でしょ。 どっちも使えるが最高。
いつも思うのだけど PostgreSQL ユーザって質高いね。 ほかの言語や何かだと荒れるのにこの流れ。ステキ。
金持ち喧嘩せずの友愛主義だからな 最初にやってたSRAの人達が初心者ウエルカムだったのもあるかもしれん 出だしがJavaHouseみたいなコミュニティだったら もっと殺伐としてたと思う
ずっとそう思っていたけど、MySQL Clusterには負けた気がした。
どっちも良い。
MySQLは日本語環境がどうもなぁって気がする。 Query Browserも未だに日本語書けないし、5.0は日本語マニュアルもないし。 PostgeSQLはそこがちゃんとしてるから好き。 でも仕事で使わされるのはMySQLなんだよなぁ・・・。
標準でswedishになるのは勘弁して欲しい レンタル鯖だと泣ける
何が勝ってるのはほっといてもいいので、 何が劣ってるか 否 何が不足してるかを 周知させるだけでいいでしょう。 解決されるまで待つか 自らそれに参加するか。 といいつつMySQLは知らないです。 アプリで使っただけです。 Oracleと似てるのかな?わはは
719 :
NAME IS NULL :2009/08/05(水) 09:33:06 ID:WmA10RkO
>>718 にてねーよw
昔XOOPS使う為に触ったのが最初かな
psqlは強力すぎるからなぁ
レンタルサーバでMySQLは無料でpostgresは有料 なんだか勝った気がした
それわ微妙だなw 誰がもうかっとんねんって感じ。
MySQLは仕事で使う時のライセンスがあやふやだった時期があったのがな。 こないだもライセンスがどうのとか言ってたけど、結局どうなったんだろ。 8.4.0をテストサーバに入れてautovacumeを有効にして最低限の設定だけして使ってみたが 8.2でautovacumeを無効にしている環境より1.3倍ぐらい速い・・・。 内部の仕組みが変わったのもあるだろうけど、なにより これまでの設定がイマイチだったということだろうか。
激速になったのって8.3からでしたっけ? もうわすれてまった。
>>652 あ、ごめん、忘れてた。
pgsql-jpのメール(それ以外も含めて)はローカルで全文検索できるようにしているんで忘れてた。
明日8/6に確実にJPUGの人に言うだけは言っておく、忘れてなければ。
ただ、サーバ担当の人じゃないんですぐに対応できるかは怪しい。
いっそ、中の人になっちゃうのが早いかも。
MLにぽんとなげるんじゃダメなんだな
726 :
652 :2009/08/06(木) 09:54:01 ID:???
↓のようなtestというテーブルがあって、 num | str ---------+----------------- {3,4} | {{a,b},{c,d}} select str[1] from test; を実行しても{a,b}が返ってこないのはなぜですか??
>>727 配列の扱いは、ほかのプログラム言語と比べると貧弱だと思う。
標準SQLの規定なのか、Postgresの制限なのかはわからないけど。
str[Lo:Hi] を使うと、{ } が1段深いものの、↓まではできた。
select str[1:1] from tbl;
str
---------
{{a,b}}
プログラム言語は別にして、他に配列扱えるデータベースってどれだっけ 使ってて、ポスグレみたいにvarchar配列にaggregateできれば、とか思うことは結構あるんだが
=> select '{{a,b},{c,d,e}}'::text[]; ERROR: multidimensional arrays must have array expressions with matching dimensions ホント貧弱だし、なんかstrict気味だよね。もっと柔軟性あってもいいと思う。 でも便利に使ってます。 あとは、行型⇔配列が透過的に扱えるとウレシイんだけど。
>>730 っ array_agg(), unnest() @8.4
732 :
730 :2009/08/09(日) 00:14:24 ID:???
windows vista でpostgreSQL8.4のβ版を入れ、 正式版が出たので入れ替えようとしました。 プログラムの削除からはProgram Files (x86)\PostgreSQLフォルダが削除されないので、 手動でやろうと思ったのですが、おまえには資格がないと怒られます。 Administratorユーザーで強制削除したいのですが可能でしょうか。 attrib -r -s -h とか、プロパティから所有者を変えようとかやってみたんですがダメでした。
>>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}}が取り出せるのはなんとなく納得できるのですが。
>>734 ありがとうございます。
アクセス権ががっちり設定されていてできませんでした。
8.3のフォルダは削除できたんですが。
8.4のフォルダをリネームして(リネームはできた)、新しくインストールしました。
いつかは消したいんですが、しばらくこのままで行こうと思います。
がんば! 進展あったられぽよろ。
>>736 管理者でログインして、管理者権限で開くにしててもダメって事?
シールドアイコンついてる?
>>733 OS再起動後、フォルダのプロパティをみて、フォルダの所有者が誰になっているか見てみる。
所有者がカラの事があるので、自分のアカウントを所有者として設定し、それから消してみる。
アンインストールが半端に終わると起こる事がよくある。
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
pg_dumpでテーブルごととか --schema-onlyとか--data-onlyとかいろいろわけてやってみるのがいいかと
>>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/
協賛企業から金もらってるんだから、人手は金で買えばいいのに。
745 :
726 :2009/08/15(土) 09:42:31 ID:???
>>743 ありがとうございます。
site:mlog.euqset.org/archives/pgsql-jp.ml.postgresql.jp/
こんなのあったんですね。
ここを Google カスタム検索で置いておけば、
HTML だけの変更でいいかも。
これからの全文検索はログを公開してgoogle任せでおkってことですねw
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.
rpmからいんすとしなおして強制解決しました。
こうやって英語が読めない人が多いようだと、 v8.4で日本語のメッセージカタログが入ったのは良かったかもしらんね。
そういうところが PostgreSQL が好きなところ 日本語メッセージカタログ、お疲れ様です
748の場合、--no-locale付ければおk?
>>752 Cロケールでよいなら --no-locale または --locale=C。
日本語ロケールを使いたいなら、--locale=ja_JP.UTF-8。
お好みで。
--no-locale (locale=C) でないとソートがデタラメになるというのは、もう昔の話し?
> ソートがデタラメ それはデマ。エンコーディングとロケールのミスマッチが原因。 最近は、正しい組み合わせかをチェックするようになったから(そのエラーメッセージが 748)、 ミス設定も減ったし、日本語ロケールを使いたければ使えばいい。 ただ、所詮、ひらかな カタカナ 漢字の読み なんかをうまく扱ってくれるわけではない (まぁ当たり前だけど)から、C にして速度を稼ぐほうが良い気はする。 メッセージはいつでも変更できるから、英語が苦手ならば --no-locale で初期化しておいて、lc_messages だけ ja にすればいい。
756 :
NAME IS NULL :2009/08/18(火) 22:24:21 ID:S73O4dP3
nfsとか使えない環境で COPYコマンドでローカルのCSVをリモートのDBへ登録する方法ないですかね?
>>756 条件が漠然としすぎ
ローカルで psql が動くならそれで
ローカルのCSVをInsert文に整形してリモートで実行
COPY FROM STDIN とか psql の \copy ならリモートロードできることを知らない予感。
>>757 申し訳ない。psqlで、COPY発行してもできなかったけど
やる方法あるのですか?
>>758 その方法しかないですかね・・・
>>759 制限された環境だから
STDINだと、標準入力に渡すのに、だいぶ手間が必要なんで
STDINはあきらめました。
PSQLでCOPY発効してもだめだったけど
単にミスってただけですかね?
ちなみに、リモートのDBにCOPYするのに
PSQLでCOPYだと、ファイルのパスはローカルのパスでよいんですよね?
>>761 STDINってのはローカル (psql) 側のことだぞ?
それに制限なんて、シェルへのリダイレクトを禁止されているのか?
あと、psql の COPY と \copy は全く別物。\copy ならローカルのパスでいける。
psql の \copy と、フツーのCOPY文は挙動が違うってのは分かってる?
>>761
標準入力に渡す ・手打ち ・端末エミュレータにペースト しかないと思っているとか
>>761 お前がパイプを知らないことは理解できた。
>>762 ローカルのシェルの利用がかなり制限されてるんですよね。
パーミッションとか、パスでのコマンドの制限とか不便極まりない。
psqlの\copyは、ローカルのパスで試して、
エラーの内容がCOPYコマンドと同等だった気がするけど
明日再度試してみます。
>>763 一応わかってたつもりだったんだけど
上に書いていた通り、同じエラーが出た気がして・・・
明日試してます。
>>764 その辺りは大丈夫。
>>765 一応知ってるつもりです。あくまで、一応ですが。
>>766 ありがとう。
自分の勘違いな気がするから
明日また試してみます。
お前俺が発注してる奴じゃないよな chroot環境渡したらこれじゃ何もできないってジリジリ納期延ばしてきた奴
ALTAR TABLE で文字化けした列をリネームか 削除することって出来ませんか? 日本語で列名を定義した時点で問題なのですが、 文字化けしてしまっていて、ALTAR TABLEどころか、 ACCESSやpgAdminでデータを開くことも出来ません・・・。
問題は日本語で列名を指定した事じゃなくてサーバとクライアントの文字コードがあってないこと GUIツールじゃなくてpsqlでやってみ
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
SHOW client_encoding と、実際のコンソールの文字コードどうなってる?
あとその文字化けは | も含んじゃってるからそのまま入れても無理とか? どうしても無理ならテキストでダンプして直接書き換えてりストアしてみては
SHOW client_encoding がSQL_ASCII コンソールは送受信ともEUC-JPです。
776 :
770 :2009/08/19(水) 15:53:46 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です。
pg_dump DBNAME > db.txt してdb.txtの文字化け部分を書き換えて createdb test psql test < db.txt とかで戻して試してみては
UPDATE pg_attribute SET attname = 'ascii_name' WHERE ...;
781 :
NAME IS NULL :2009/08/20(木) 11:41:30 ID:S8uMOV4c
postgres用のODBCドライバは何を使えば良いでしょうか?psqlODBCを使えば良いでしょうか?
WindowsServer2003へのインストールってありですかね・・・?
べつにアリだと思うが、何が心配なんだ?
>>784 変な話なんですがSQLサーバーとかOracleに比べて業務で使用するのは
あまり聞かないので・・・信頼性とか
まあお金や顧客管理はしないのでそれほど重要なデータを格納するわけでもないのですが・・・
それじゃWindowsServer関係ないな。それともそれの組み合わせ限定での信頼性か? どちらにしろ絶対数的にはMSやOracleに比べて少ないと思うけど、 信頼性に重大な問題があったら、それこそMSやOracle近辺から騒ぐかもだから、 便りがないのは無事な証拠かもね。
Windows+PostgreSQLって組み合わせをあまり聞かないのは、確かにそうかも。 最近のバージョンなら良いけど、8.0〜8.1あたりはWindows版特有のバグも多かったし。 同じハードウェアならWindowsよりはUNIX系のほうが速いし、64bit対応もUNIXだけ。 OSの選択権があるなら、Windowsは使わないなぁ。 PostgreSQL自体は同じだから信頼性は変わらないとは思うが、ハードウェアはケチっちゃダメ。 Windowsだと比較的ハードウェアもショボいことが多くて、それがトラブルの原因になったりする。 ディスクが、ライトバックしているのにバッテリバックアップしてなかったりとか。
>>786 >>787 WindowsServer2003は決まっています
ハードはショボいのです
予算が無いのでフリーのDBをと思ったわけです
MySQLもとは思いましたが、Postgresで行こうかな
お金や顧客管理バリバリのシステムで使ってるぞ、、、まあWindowsサーバじゃないが
なんでも行けますよ
Postgres用にOracleのSQL*Plusみたいなソフトってないでしょうか?
psqlってのが付いてるよ
人によっては phpMyAdmin とか
phpPgAdmin の間違い
素直にpgadminでいいやん
普通にpgAdminIIIだな クラウド派の人ならphpPgAdminって人もいるだろうけど
え、GUIツールの話だったのか
SQL*Plusのどこが欲しいか言ってないからねぇ。 スクリプトを流し込みたいなら、やっぱりpsqlになるだろうし。
俺は釣りだと思ってました。
800 :
NAME IS NULL :2009/09/01(火) 18:25:09 ID:C/SXka7J
先生方に質問です PostgreSQLで使用できる、レプリケーションソフトで信頼性が高くて使いやすいのってありますか?
pgAdmin3も対応してるしSlony-Iが主流なんかなぁ。 使ったことないけど。
信頼性が高いのはSlony-I 全然使いやすくないけど
使いやすさというか、設定のしやすさの意味で書いていました、ごめんなさい。 信頼性を重視しないといけないシステムなのでSlony-Iを使ってみます。 まずはググって調べてみなきゃ・・・早速のレスありがとうございました。
信頼性だけならウォームスタンバイとかDRBDのほうが高くない? スケールアウトとは無縁だが。
Slony-Iは非常に設定はしづらい テーブル構造が複雑になれば複雑になるほど
設定が楽なのはpgpoolかなぁ。
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
それポスグレ関係ないから。まずはSQLの本を読みなさい・・・
実はなにげに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で並べ替える、とかかなぁ
SELECT * FROM (
SELECT ID,タイトル,時間 FROM TABLE1
UNION ALL
SELECT ID,タイトル,時間 FROM TABLE2
) AS T1
ORDER BY 時間 ASC
LIMIT 5
携帯からだから実際試してないけど。
テーブル1とテーブル2の構造がちがうんじゃね?
そういう場合はUNIONするテーブル同士のカラムを揃えてやらんとだめ。
あとエラーメッセージはちゃんと読んで理解しろ。
じゃないと一生原因追求できんぞ。
>>810 はかなり知ったか入ってるから参考にすんな。
>>810 みたいになりたくなければエラーメッセージは読むことだ。
>>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 エラーメッセージをきちんと読むことも重要。
マニュアル読めば、構文はきちんと書いてある。
オプティマイザって言いたかったんだろ
>>812 どの辺が知ったかなんですか?
教えてもらえるとありがたいです。
バージョンやデータ件数確認しないでパフォーマンスのことだけ言う奴は、 だいたいニワカなのは違いない
いずれかのバージョンでその事象が改善されているものであれば、 バージョン確認せずに云々は同意。 データ件数がある程度多い(またはその逆)場合にのみ有効なチューニングが あるかどうか分からないので、データ件数を確認することがどれほど有意義なのかが分からない 今回の場合だと、なによりもシンタックスエラーの詳細を知りたかったけどね。
>>810 は、バージョンやデータ件数に関係なく、ほぼ確実に有効だろう?
むしろ詳しすぎて説明を端折っているから、それこそ「ニワカ」では説明を理解しきれなかったように見えるが。
中途半端でまったく伝わらない文章書いちゃって、言い訳したい気持ちはわかるが、 言われた当事者以外が弁解するわけないんだし、なにやったって自演にしか見えんのだからやめとけ。 ってか、数万件程度じゃ遅くないと思うぞ別に。
「データ件数確認しないで」と書いた割には、「数万件程度じゃ」って勝手に規模を仮定していますね。
おまえら…
まぁ、無事解決ってことでw
もう自分を攻撃している敵が一人に見えてるみたいだな
なんかすげー粘着力だな
実はニカワだったと。
技術者って他人に間違いを指摘されるとめちゃめちゃ期限損ねる奴多いよな
昔、ニカウさんっていたなぁ。いい人柄だった。
>>828 それすごいわかる
とんでもない理屈つけて反論するやつとか
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
835 :
ココ電球 _/::o^ν ◆tIS/.aX84. :2009/09/06(日) 20:29:30 ID:quiJ7AY/
ウニオン
基本的なSQLの質問してるのに、それをぶっ飛ばしてオプティマイザがとか かなり恥ずかしいな。 こんな先輩だったら絶対新人育たないわ。
PostgreSQL 8.2.9 Windows版(日本語版)インストーラ がない
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って何ですか?
そういうマスターを作るのが一般的だと思うけど、そういう型あんのかな
無いんですね 有り難う御座いました
そのまんま、ENUM型があるが。
844 :
841 :2009/09/11(金) 21:54:57 ID:???
ほんとだ、8.3からかな? 適当な事を言ってすまんかった
A-0000〜9999 B-0000〜9999 のようにプレフィクスを付けた4桁のシーケンスを生成する ことってできますか? A-0010とB-0010は別物にしたいです。
SELECT 'A-' || to_char(nextval('seq'), 'FM0000'); みたいな感じ?
>>847 これだとA-0010とB-0010は別物にならなくないですか?
というか、seqには '10' しか入らないですよね。
>>848 別物ってどういう意味?
A-〜とB-〜を独立したシーケンスにするってこと?
なら二つ使えばよろし
>>848 ゼロパディングされないと怒っているように見えるけど、なんで?
ゼロパディングは 'FM0000' で救えていると思うんだけど。
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 などで調べました。 対処法等をご存知でしたら、ご教示のほどよろしくお願いします。
>>852 ここで取り扱うのが適切かは別として
> テーブル名に日本語がまずいのかと思って、アルファベットにしてみましたが駄目でした。
なら、アルファベットの時のエラーを出すべきだと思う。
アルファベットでもエラーメッセージが化けてるわけないよね?
MS系のことはよく知らないんだけど、直接クエリなげられんの? 投げられるならSELECT COUNT(*)とか適当に実行してみなよ
>>854 申し訳ありませんでした。アルファベットのときは文字化けしませんでしたが
エラーは同じものでした。
>>855 cn.Execute "DELETE FROM 日本語テーブル名;"で
レコードは削除されました。
Accessスレのほうがよろしいでしょうか?
>>856 Accessで似たような事やって悩んでた人はテーブル名を [ ] で括ってた。
まぁ、その人はクエリを書いててはまってたんで同じ話かわかりませんが。
自分では検証してないけど、その人が調べたところ Oracleで言う "テーブル名" な記述に相当するのが [テーブル名] とか言ってたな。
ハズレだったらゴメン。
858 :
852 :2009/09/16(水) 19:15:50 ID:???
>>857 回答、ありがとうございます。教えていただいた方法を試してみましたが駄目なようです。
自分なりに試した結果、SQLを発行すれば開くことができるようです。
一歩進んだのですが、AddNewでこけました。ネット上でもうまくいっていないようです。
ODBCによるやり方はたくさん見つかるのですが。といっても、私は接続ができなかったです。
まぁ、SQLで何とかなりそうなので、まずはそちらで勉強を進めてみます。
みなさま、ありがとうございました。
>>852 > googleでエラーコード、postgresql ado などで調べました。
おつかれさま。
けどシンタックスエラーだと言われているのだからシンタックスをただしてみたらどうなの?
まずはアルファベットで。
>>859 rs.Open "SELECT * FROM T日本語名;", cn, adOpenKeyset, adLockOptimistic
でエラーは一応消えました。AccessのテーブルをどうやってPostgresのテーブルにINSERTさせるか調べていたところ、
ほかの方もSELECT * FROMで接続しているようです。
リンクテーブルにすれば早いのだろうけど。
どうしても解決できないときは、またよろしくお願いします。
ドライバが8.4に対応してないんじゃね
皮肉だろうが、アドバイス求めてるのに人の話聞いてないんじゃなぁ、って感じ。
翻訳してあげよう MS系のことはよく知らないんだけど→このエラーに言語は関係ないってのカス シンタックスをただしてみたらどうなの→SQLエラーなんだからSQL見直せカス
頻繁に日付の完全一致検索を行うのですが、 その場合、データ型は date, text, int のどれが速いとかありますか? text/int なら 20090918 と登録して検索する、ということです。
>>865 素直にdateで良いと思う。データサイズはintと同じ4byteだし、日付関数も使える。
intのほうが日付のパースをスキップできる関係で、入出力は若干速いとは思うけど、
そこにこだわるくらいなら、チューニングすべきものは他にあると思う。
んで、たぶんtextは一番効率が悪い。
>>866 なるほど!すごく勉強になりました。
そうか、サイズもあるのですね。
ありがとうございました。
数値型で最高速はinteger 文字列型で最高速はtext そのうえでinteger>textなのは確かなんだが dateはどうなんだろうね
たぶん integer > date > text。date は内部的には integer と同じなので、比較や計算の速度は 整数と同じと考えていい。文字列から/への変換は整数よりは複雑だろうから、そこは遅いのでは。
100万件くらいで計測してみた、とかあったらブクマする
871 :
NAME IS NULL :2009/09/23(水) 20:57:09 ID:iXDfBimr
UBUTU 9.0.4のサーバ版で PACKEGEからPOSGREインストールしたのですが 文字コードをUTF-8からEUC_JPに変えれません。 いろいろネットで調べて実行してますが反映されないで困ってます。 何か言い情報ありませんか。
文字コードを変えるには、データベースごとなら 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というようなシーケンシャルでもいいです。 どうかよろしくお願いします。
INSERT INTO t SELECT i FROM generate_series(1, 10000) s(i); お好みで SELECT i ところで random() とかも使える。
>>874 全部1で作ったら後は UPDATE で random な値で更新かけてしまうってのはどうでしょう。
update target set targetcolum=random()*100
これなら 0〜99 の範囲でランダムに全行の 項目 target.targetcolum を更新してくれます。
winxpにてpg_dumpallのパスワード入力を回避しようとpgpass.confを作成し、 Application Data配下のpostgresqに配置しようとしたのですがpostgresqlフォルダが存在しませんでした。 ポスグレのバージョンにより作成場所が変わったりするのでしょうか? ちなみにver 8.2.xです。
すいません、質問します。 PC再起動後すぐにタスクマネージャーでプロセスをみたら postgres.exe が6個起動してるんですけど正常でしょうか。 何度か再インストールしてるのでそれが原因かもとおもってるのですが。 もし、異常な状態だとしたらどこをいじればなおりますでしょうか。
879 :
877 :2009/09/26(土) 13:27:31 ID:???
すいません。 ちなみにpostgreSQL 8.4 windows上で使用してます。
8.2と8.4をインストールしてるけど、 postgres.exe が10個起動しています。
pgpass.conf の設置位置。 たぶん、以下のような感じかな。 (例) C:\Documents and Settings\■ログインユーザ名■\Application Data\postgresql\pgpass.conf
>>881 postgresqlのフォルダは自分で作成するんじゃなく普通はインストール時に
作成されるのですよね?
pgpassってdataディレクトリじゃなくてホームディレクトリに置くんじゃないの? UNIX系の場合はそうだよ
postgres.exe がたくさんあるのは特に異常ではない。 マルチプロセスで動作するので、exeはたくさん立ち上がる。
>>883 君の意見は貴重だが Windows と Unix では意味を成さない。
「ウチのカレーにはチーズを入れる」程度の話だ。
そもそも、誰もdataディレクトリにあるって聞いてもいないし、言ってもいないんじゃ?
>>881 の示すディレクトリも所謂homeディレクトリ下だし。
882です。 いろいろご意見ありがとうございます。 とりあえず火曜日にpostgresqlディレクトリ作って試してみます。
名前はなんでもいいです
>>886 Application Dataじゃなくてホーム直下じゃね?
って事だろ
>>878 > すいません、質問します。
>
> PC再起動後すぐにタスクマネージャーでプロセスをみたら postgres.exe が6個起動してるんですけど正常でしょうか。
postmasterじゃないですか?
>>890 最近のバージョンだと postmaster はいないよ。ぜんぶ postgres.exe。
もちろん、その中のひとつは "postmaster" の仕事をしてるけど。
postgresでpostmasterのシンボリックリンク作っててワロタ
質問です。Postgresql 8.1 CLUSTER コマンドは、内部的には ORDER BY しつつテーブルのコピーを 作成して入れ替えるようなもののようですが、 そうすると CLUSTER を実行した直後のテーブルに VACUUM FULL や REINDEX は 不要というかむしろ時間の無駄なのでしょうか?
>>893 そのとおり、時間の無駄。CLUSTER 中にはテーブルもインデックスも
両方とも作り直されるので、終わった後に追加で必要なのは ANALYZE だけ。
VACUUM FULL は逆で、テーブルのレコードだけを寄せ集めるだけなので
インデックスはむしろ汚れる。こっちは追加で REINDEX (+ANALYZE) が要る。
やはりそうですか ありがとうございます。 しかし、全部のテーブルをクラスタ化するわけではないので たまには全体に VACUUM FULL + REINDEX しないといけないですよね ううむ、どのようにスケジュールを組むか悩ましい。。。
896 :
NAME IS NULL :2009/10/06(火) 18:40:50 ID:VxXgwHkh
postgresqlに対応したER図作成ソフトってある? できればWindowsで。 外部キーとか、リレーションまで書いてくれるのがいい。 印刷したい。 DBDesignerForkでODBC経由してやってみたけど、 外部キースルーされたので。
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試してみましたが、リレーションは自動では書いてくれない・・・ もしかして使い方が悪い?
>>899 >なんか質問されてるのかと思った
www
ようするに、テーブル間に線引ければいいんだよね?
今試してみたけどできましたよ。
ひょっとしてバージョンの問題かも。
自分がためしたのは
PostgreSQL8.4(Windows)
A5:SQL 2.3.3
です。
A5の掲示板で質問すると作者さんが丁寧に答えてくれますよ。
901 :
900 :2009/10/06(火) 21:07:29 ID:???
>>900 >ようするに、テーブル間に線引ければいいんだよね?
ようするに、リバース時に自動的にテーブル間に線引ければいいんだよね?
です。
失礼。
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は家でためしてみよう・・・・
CSEの代わりならPgAdmin使えよ
ODBC経由じゃんあれ
ああそうか、CSEはlibpqつかうんだっけか
ODBCじゃ何がだめなの?
なんとなくダメだろ
データ型変わるだろODBCのに
上に出てきた A5:SQL 試してみたけど テーブルは綺麗に出てきたけど外部キーの線が完全に出てこなかった というか半分くらいしか再現されなかったわ
ODBCでもデータ型は正しくとる方法有るんじゃない? A5:SQLってデータ型正しく出てるくるよ
まぁintegerとかvarcharとかしか使わないならODBCでいいんじゃね
システムカタログから引っ張って来てんじゃないの?
ODBCだとBLOBとか駄目だよ
テーブルの継承に詳しい方教えてください postgresql 8.1 パーティショニングではなく、ただの継承の話です。 CREATE TABLE parent ( 〜 ); CREATE TABLE child ( 〜 ) INHERITS (parent); の構成で、 INSERT INTO child SELECT * FROM 〜; などで子テーブルに長時間 INSERT している間、親テーブル に対する INSERT が ずっと waiting で固まってしまいます。 親テーブルへの INSERT が子テーブルに対してもロックを獲得しにいっているのではないか と予想しています。 トリガやルールで parent への insert を child に振り分ける、なんてことはしてないので 子テーブルにまでロックが及ぶのは非常に迷惑なのですが、 これってどうしようもないのでしょうか。
途中から親子が逆転してんのかな
INSERTであればテーブルロックは決してぶつからない。 何か勘違いをしているか、INSERT以外のことをやっていないか? 外部キーやユニークキーはどうなってる?
ALTER TABLEのNO INHERITで切ったらどうなる?
あとCHECK制約は入ってない?
924 :
NAME IS NULL :2009/10/15(木) 08:35:35 ID:3rUfd4Hh
DBを仕事で使うことになったですけど PostgreSQLってタダで手に入って このDBを含んだソフトを売ってもいいのですか? ライセンス?っていうのでしょうか?
926 :
NAME IS NULL :2009/10/15(木) 11:30:18 ID:3rUfd4Hh
>>925 情報ありがとうございます
安心して組み込めます
ポスグレの本でおすすめのものはありますか?
amazonで最新でソート表示して一番上のを買う。 後はマニュアルがなんつっても一番でしょ。
929 :
NAME IS NULL :2009/10/19(月) 00:09:52 ID:SE04vEP7
MySQLがオラクルに買収されたから、これからWebのDBでオープンソースといえばPostgreSQLかな・・・。 それとも、MySQL?(バックがオラクルだからなおさらって意味で・・・) どうなんだろう。
オープンソースDBもかなりの性能になってきたから オラクルとかの高いDBって売れなくなるってことはないの?
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の人しかパッと思いつかないけど
宣伝してないだけで、もっといろんな会社が扱ってるのかな。
俺に金詰めばいいのに
俺でも良いよ。
SRA とか PostgreSQL に金積めば 解決してくれるサービスあったよね。
いやいや俺に任せろ Oracleに換装するけどな
MySQLって自分で適当に対処して使っているユーザが多い気がするけど、 PostgreSQLユーザってやけにサポートをほしがる気がする。客層の差?
気のせい?
どこでそう思ったのか知らないが、普通に考えて、サポート欲しがってる人が postgresなんか使うわけないじゃん。
ポスグレで全文検索システム作ろうと思うんですがLUDIA(Senna)ってどうですか?
PostgreSQLのDBA経験あるだけですぐ採用される 相当需要あるんだと思う
きちんと使える人であれば 商用を買ってサポートサービス受けるより 安上がりだしね。
944 :
NAME IS NULL :2009/10/20(火) 13:57:39 ID:pYoEoiic
>>きちんと使える人 goldレベルの人がそういるとは思えないんだよね ちゃんとしたっていうと Linux Expoert クラスになるんだろうな・・・ #詳しい人たちが、使ってるってレベルなんだろうなと(そこそこの規模の案件で) それはMySQLも同じだと思うんだけどね 小規模で、関係者で詳しい人がいなくて、ごめんなさいで済むなら サポートはいらんわな #逆に言うと、そのレベルでの採用が多いんだろうかなと #雑誌で紹介される案件等はもちろん違うんだろうけどね そういうレベルの話をしているつもりは無いし
Postgresって資格あったよね?確か。 OracleみたいにSilverとGoldがあるのか。 誰か持ってる人いる?
日本語
>>945 Goldもってるよ。
自分以外に持ってる人見かけたことないが。
Goldを持っているひとは何人かいる。 ただ、マニュアル丸暗記で取れるから大したことはないって聞いてるけど。
俺シルバだ。凄いだろう。
無免許だからシルバーでも受けてくるかな とりあえず勉強しないで行ってみるけど 8年くらい使ってるから落ちたら恥ずかしい
まだブロン〇だ(´・ω・`)
ブロン液
よーしパパ、プラチナ狙っちゃうぞ
Win版Slony-I が参考になるわかりやすい情報ないですかね。 以下みたけど、うまくできなかった。 d.hatena.ne.jp/uriyuri/20090128/1233117758 table add key ( node id = 1, fully qualified name = 'public.history' ); でエラーになる。
何がどうエラーになるんだよ
その前の行がおかしいんでないの
とりあえず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
postgresで、データベースAをアップデートして、データベースBをアップデートして、 両方成功したらコミットという2相コミットをやりたいんですけど、 具体的にどう書いたらいいかわかりません。 pg_query(A, "BEGIN"); pg_query(B, "BEGIN"); pg_query(A, "UPDATE テーブル名"); pg_query(B, "UPDATEテーブル名"); ちょっとphpも入ってますが教えていただけないでしょうか。
>>961 1つのトランザクション、コミットができるなら、
あとは条件文次第で、2相だろうが、3相だろうが、可能でしょ。
>>961 各トランザクションをプログラムで管理して
それぞれコミットやらロールバックしていけということ?
964 :
961 :2009/10/22(木) 16:06:43 ID:???
>>963 結果条件によって、
それぞれ、データベースAとデータベースBの
コミット、ロールバックするということじゃないの。
966 :
961 :2009/10/22(木) 16:32:36 ID:???
>>965 まあそれでもうまくいくみたい?なんですけど、
複雑になってくるとあれなんで
2相コミット機能でのやり方を知りたいのです。
968 :
961 :2009/10/22(木) 21:12:00 ID:???
>>967 ここは既に見ました。
でも、いまいちちゃんと書いてないから
実際の書き方がよくわからないんだよね。
なんでこんなに情報少ないんだろ
COMMIT の代わりに PREPARE TRANSACTION + COMMIT PREPARED するだけだろ? ほかに情報が必要か?
>>960 Linuxの話だけど8.4系は1.2系の最新RCじゃないと動かない
まず本体を8.3系にして試してみ
それで通るならスタックビルダでバンドルされる版が8.4に対応してないものだと思う
>>968 2phaseコミットの説明なら、Javaの情報を当たった方がいいんでは?
XAとかのキーワードでどうぞ。
どの実装であれ、トランザクションを用意して
各データソース/セッションごとの操作は、全体で協調取れるまでは
ローカルのコミットという状態で、全てをコミットできる準備が出来たら
全体に対しコミットの号令を掛けてグローバルなコミットとする
という感じの流れでは?
実際には、
>>969 だけじゃないの?
>>971 2つのDBの整合性が取れてるかどうか判断する前にローカルをコミット扱いにするのは不味くない?
>>971 XAだとPostgresとはコマンドの対応が違うから、むしろ混乱するかも。
2PCはフレームワークに任せられるなら任せたほうが楽。
Javaなら結構あるけど、PHPだと少ないのかな?
>>972 「ローカルのコミット」は「準備済み」の意味っぽい。自分も始めて聞く用語だが。
975 :
961 :2009/10/23(金) 08:48:25 ID:???
>>961 の頭をロールバックした方が良い件について
ロールバック機能付きの人生がほしい
お茶とロールケーキ いりませんか〜♪ `∧_∧ (・∀・ ) 旦~@ 0┬0)囗-| ̄ ̄ ̄| ◎┴し-◎  ̄◎ ̄ 〜
テーブルの更新に失敗したので ロールケーキしました。
>>976 の頭をロールバックして髪フサフサにしてやれよ
お前ら多少はマジメに答えてやれよw
>>975 PREPARE TRANSACTION <gxid> が成功する前ならば、普通に ROLLBACK。
エラーが起こったときも、通常通りロールバックされる。
PREPARE TRANSACTION <gxid> が成功した後ならば、ROLLBACK PREPARED <gxid>。
COMMIT PREPARED が成功した後は取り消せないので、万が一 COMMIT PREPARED が
失敗したノードは切り離して縮退運転するしかない。まず、ありえないはずだが。
ところで、
>>961 さんは、どんな環境、どこまで、確認できてるの?
ぱっと見じゃ、 普通のトランザクションの --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相実行中の抽出結果を見れるということくらい?
>>984 実際のcommitに先立ってcommitに成功するかどうか判断するのがprepare transaction。
これに成功すればcommit preparedは無条件で成功する。
つか、2相commitが必要な理由がわからないんだったらわざわざ使う必要はないと思うが。
>>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とも変更あり
>>990 ありがとうございます。
以下とあまり変わらないとも言えるのかな。
--db1--
begin;
〜(insert分など)
if (失敗)
ROLLBACK; // db1の操作取り消し
return 操作失敗 // db1、db2とも変更なし
--db2--
begin;
〜(insert分など)
if (失敗)
ROLLBACK; // db2の操作取り消し
return 操作失敗 // db1、db2とも変更なし
commit;(db1)
commit;(db2)
それだとdb1のコミット後db2のコミットに失敗したらdb1は元に戻らない。
COMMIT PREPARED 'test1'; --(db1に対して) の成功後、 COMMIT PREPARED 'test2'; --(db2に対して) に失敗したら、db1は元に戻らないようだけど、 普通のCOMMITと2相のCOMMIT PREPAREDの差は、リスクの差?
なるほど、サーバーが途中でこけても、
2相のcommit prepared;は、保存されているから、再起動のあとでも、
commit prepared;を実行すれば、対応可能、トランザクションの結果が保証されるということか。
初期処理で、
SELECT * FROM pg_prepared_xacts; を見て、
commit prepared;を実行しておかないといけないってことね。
どうも、みなさん、勉強になりました。
私は、
>>961 じゃないので、念のため。
>>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とも変更あり
サーバが途中でこけたとかでなくても、 普通のコミットだと制約違反とかでCOMMIT時に失敗することは普通に起こる。 2PCならPREPARE TRANSACTIONが成功した時点でそこはクリアしてることが保証される。
>>996 普通のCOMMITがエラーになることがあるのは、わかりますよ。
2相のCOMMIT PREPAREDがエラーになることがあるのかどうか、知らないものでして。
それで、テスト的に途中でサーバーを再起動してみて、2相トランザクションがどうなるか確認してみたら、
SELECT * FROM pg_prepared_xacts;
に残っていることを確認できたので、2相のトランザクションのメリットを理論だけでなく実際の動作として確認できました。
SQLコマンドレベルですが。
>>997 ディスク故障とかを除けば、COMMIT PREPAREDがエラーになることは、まず無い。
COMMIT PREPAREDは障害でもない限り常に成功する。 障害の場合は回復時に再実行すればいい。
1000なら、次スレへ、 そうでなければ、1へロールバック
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。