>>1 乙
着実にVerUpしているけど、なんかこう今すぐUpしたいって思うような目新しいものがイマイチ無い。
ぼちぼちレプリケーション導入を考えているのだけど、本家(本体)に取り込まないのかな?
バックアップとかその復旧まわりがどの程度充実しているのか、最近ろくすっぽ追っかけていないので、
ようワカランのだが。
>>3 レプリケーションは次のバージョン 8.5 で取り込まれる予定。乞うご期待。
バックアップやリカバリは、本体には最低限必要な機能は備わっているので、
後はサードバーティ製ツールの対応次第だね。こっちも本体に取り込まれると嬉しいんだけど。
Win版使用だけど、
Slony-I の使い方がよくわからないので、
簡単なレプリケーションが組み込まれるといいな。
バックアップは、
バックアップファイルに対するパスワード化は標準である?
まぁ、ツールがあるし、別にいいけど、
バックアップ中は、CPU負荷が高くなるから、マルチCPUはいるね。
6 :
3:2009/10/24(土) 18:10:39 ID:???
>>4 それは期待して待っていよう。
といっても、それまで放置しておくのもなんなので、pgpoolでお試ししてみるかな。
本体に取り込まれるのは、オリジナル? それとも既存の何かを利用するのかな。
バックアップも、cronによる定期実行程度しかしてない。> 俺
PITRとかちゃんとやんなきゃと思いつつ...。
>>7 ログは「archive_command で取っておいたアーカイブログ」が要る。
pg_xlogはアーカイブされていない最新のファイルだけあれば可。
WALが残っている限り故障直前まで復旧できるし、
操作ミスを取り消したいのならば任意の時点で止めることもできる。
>>8 ありがとう。
アーカイブログが必要なんですね。
だから、pg_xlog配下のファイルはファイルサイズが一定で小さいままなのか。
ファイル容量の余裕と、PITRのリカバリ復旧の時間が早ければ、使ってみようかな。
PITR(ポイントインタイムリカバリ)だけど、
SELECT pg_start_backup('dbdata.init.bak');
SELECT pg_stop_backup();
を実行した後、'dbdata.init.bak'が見つからないけど、どこにあるんだろ。出来ているのかなぁ。
それは単にメモだから。backup_label という名前の
テキストファイルの中に、文字として書いてあるはず。
ちなみに、start 〜 stop の間に自分でファイルコピーしないどダメだぞ?
前スレ950だけどCEの8のSilver受けてきた
ギリギリ受かった
>>11 ありがとうございます。
pg_xlog配下にファイルが作成されていくようにはなりましたが、
recovery.conf によるリカバリーをいろいろ試しましたがうまくいきませんでした。
私の設定が悪いんでしょうね。(^^:
しかし、pg_xlog配下のファイルが意外に大きいので、ファイル容量的にちょっと断念かな。
蓄積していったら、とんでもない容量になりそうだから、試すのもあきらめます。(^^;
リアルタイムのレプリケーションの方がいいかな。
8.5で簡単にできることを期待して、それまで待とうっと。
>>13 普段開発やってる人ならそうでもないと思う
普段はpgAdminとか使ってるから管理ツールのコマンド絡みの問題が厳しかったわ
CEって、対象バージョンが「PostgreSQL 8」になっているけど、
これって 8.0 なの? それとも 8.0〜8.4 全対応って意味なの?
8.x の同士の差って、8.4→8.0 の差と比べても同じくらいはあると思うんだけど。
-Dでディレクトリ指定して起動してるんじゃね?
サービスから起動してるなら起動時のオプション確認してみ
>>19 確かにサービスの起動オプションに-Dが設定されていて、
それはインストール時のウィザードで設定した
「C:\Program Files\PostgreSQL\8.4\data」でした。
が、結局このオプションをどこで指定しているかがわからないのです。
何とも申し上げにくいが、
サービスの起動オプションで設定されているんだと思うよ
確かに、dbごとのディレクトリ設定、どうするんだろうね。
dbは、CREATE DATABASE で作成するから、その時のオプションか、それを管理しているファイルなのかな?
えーと…
基本的に分けることはできなかったとおもうので、ポート別にして二個起動すればいいんじゃない?
○Windowsの-Dオプション指定場所
スタート→マイコンピュータを右クリック→
管理を選択→サービスを展開→
PostgreSQLっぽいサービスを右クリック→プロパティを選択
○PGDATAを複数持たせたい
ポートを変更する
同じバージョンをインストールしたことないけど、
同じバージョンをポート別にして、インストールできるってこと?
別のバージョンのインストールは、ポート別にしてるけど。
(別にしないとインストールできなかったかな)
多重起動すればいいんじゃないかと
サービスは、
C:/Program Files/PostgreSQL/8.4/bin/pg_ctl.exe runservice -N "postgresql-8.4" -D "C:/Program Files/PostgreSQL/8.4/data" -w
になっているいるから、-D の引数で変えて、postgresql.confなどのconfigファイルなども変えて、
多重起動できるのかもね。
ってか普通に出来る
>>26 インストールは1回でいいよ。pg_ctl start -D <場所> を2回たたくだけ。
サービスで起動するなら、<場所> を変えたサービスを2回登録するだけ。
>>25 サービスのプロパティ画面からオプションを「指定」できますか?
>>31 パラメータの変更はできなかった気がする。
pg_ctl unregister & register で再登録すべし。
plpgsqlで質問します。
split_codes という returns text[] な関数があるのですが、
別のplpgsql関数内で codes text[] という変数に対し
codes := split_codes($1) としても codes[0] が NULL のままなのです。
split_codes の返り値は期待通りなので、配列への配列の代入がうまくいっていないと
思われます。
currentのドキュメントを読んだのですがどこにも書いてないように見えます。
ご存知の方おられましたらお知らせください。
>>33 配列の添字は 1 始まりっていうオチではなくて?
35 :
33:2009/10/28(水) 11:39:30 ID:???
ご指摘を受けて確認してみたところ、1起算で配列が作られていました。
インデックスで0が指定できるから0起算とばかり・・・
36 :
NAME IS NULL:2009/11/01(日) 10:27:41 ID:dRyHVXSa
pgAdminでテーブルを作成しデータの追加も行ったのですが、プログラムでテーブルを
SELECT使用とすると「リレーション: 未定義テーブル」といったエラーが帰ってきます。
原因と対処方法を教えてください。
別のデータベース見てるとか。
38 :
36:2009/11/02(月) 14:56:41 ID:KTnBgk4O
下記の用にテーブル名の前にスキーマをつけるとSQLを正常に実行できました。
スキーマを省略する方法を教えていただけませんでしょうか。
NG : SELECT * FROM public."STUDENT_NAME";
OK : SELECT * FROM "STUDENT_NAME";
set search_path to スキーマ名
のことかな?
でもpublicはデフォルトのような・・
40 :
36:2009/11/02(月) 18:27:18 ID:KTnBgk4O
>>39 その方法で解決しました。ありがとうございます。
XPHomeEditionでPostgreSQLって使えないんですか?
インストールはできたけどStartServerとか管理ツールとかでサービス開始って押しても
起動されないんですけど
2000以降ならエディション関係なく使えるはずだが
サービスとしてバックエンドで動作しているのに気づいていないだけでは?
管理ツールでサービス開始と書いてるからそれはないんじゃないの?
ログでも見てみたらどうかと思うんだけど。イベントログ吐かないのかな
もう起動してるから二度目の起動に失敗してるだけじゃね?
タスクマネージャでpostmaster.exeとpostgres.exeあるかどうか確認しろ
postmaster起動したらサービスは終了するパターンなの?
お前はDBいじる前にWindowsServiceについて勉強してこい
エラーメッセージも書いてないから、答えようが無いんだよ。
何を持って「起動されない」と判断したんだ?
49 :
41:2009/11/07(土) 08:45:09 ID:???
起動してないと思ったのは
管理ツール>サービス>postgresql-8.4
のサービスの状態が停止になっていたからです
postmaster.exeとpostgres.exeはタスクマネージャにありませんでした
StartServer実行すると↓になります
----------------------------------------------------------
postgresql-8.4 サービスを開始します........................
....
postgresql-8.4 サービスを開始できませんでした。
サービスはエラーを報告しませんでした。
NET HELPMSG 3534 と入力すると、より詳しい説明が得られます。
The start command returned an error (2)
----------------------------------------------------------
インストールはpostgresql-8.4.1-1-windows.exeっていうインストーラ版使いました
設定は
[Password] Password : postgres
[Password] Retype password : postgres
[Advanced Options] Locale : C
これ以外はデフォルトです
起動するユーザがだめかと思って
StartServerを右クリック>別のユーザで実行 : インストールのとき勝手に作られたpostgres
で実行したら↓になりました
----------------------------------------------------------
システム エラー 5 が発生しました。
アクセスが拒否されました。
The start command returned an error (2)
----------------------------------------------------------
DBの初期化 or サービスの登録あたりで失敗しているように見える。
インストーラは Windows の管理者ユーザで実行した?
あと、コマンドラインから
"C:\Program Files\PostgreSQL\8.4\bin\pg_ctl" start -D "C:\Program Files\PostgreSQL\8.4\data"
とかすると、もう少しまともなエラーメッセージが得られるかもしれない。
51 :
41:2009/11/07(土) 20:52:55 ID:???
>>50 インストーラを実行したのはAdministratorsグループの個人名ユーザです
StartServerを実行したのもこのユーザです
HomeEditionなんで表示されてないですけど
スーパーユーザ(Administratorアカウント)じゃないとだめなんでしょうか
言われたとおり実行したら↓になりました
--------------------------------------------------------------------------
C:\Documents and Settings\ユーザ>"C:\Program Files\PostgreSQL\8.4\bin\pg_ctl"
start -D "C:\Program Files\PostgreSQL\8.4\data"
サーバは起動中です。
C:\Documents and Settings\ユーザ>2009-11-07 20:48:19 JSTLOG: could not liste
n on IPv4 socket: No error
2009-11-07 20:48:19 JSTWARNING: could not create listen socket for "*"
2009-11-07 20:48:19 JSTFATAL: could not create any TCP/IP sockets
--------------------------------------------------------------------------
タスクマネージャにいない件だけど、すべてのユーザのプロセスを表示してる?
could not create listen socket だから、ファイアウォールが邪魔をしているのでは?
postgres.exe 5432 ポートを許可してみてはいかがか。
余計なアプリを終了や削除して再インストールで試すとか、
ログインパスワードも省略しないとか。
削除するときはOSのpostgresも削除しろよ
再インストール時にインストーラがパスワード解らなくて失敗するぞ
NICがないとかじゃ
NICはなくてもインストールできるだろ
58 :
NAME IS NULL:2009/11/10(火) 09:49:20 ID:ap2nF2fA
データベース作成に関する質問です。
pgAdminで新しいデータベースを作成する場合、SJISまたSHIFT_JIS_2004を
指定できません。
「ERROR: SJISは有効な符号化方式名ではありません」
SJISをDBに取り込んでSJISで出力するシステムなんですが、どうすればいい
のでしょうか。
無理じゃないかな。
サーバはUTF8やEUC_JPで作っておいてclient_encodingをShift_JISにしては
Sjift_JISに対応してないからEUCかUTF-8で出し入れしろ
ODBCとかJDCBならドライバが勝手にやってくれるだろ
8.4ではってかPostgre95まで遡ってもサポートされてたこと一度も無いだろ
>>57 NICついてなくてもループバックのソケットは作れるんだっけ?
サーバは起動中です。
ってスタートアップメッセージでいいんだっけ?
5432ポートを他が使ってる可能性は?
66 :
58:2009/11/10(火) 21:57:56 ID:???
>>59->62
すいません。有難う御座いました。
サービスで自動起動してるのにさらにコマンドで起動しようとした?
CSV形式でテーブルのデータをインポート、エクスポートするため
下記のようなパスを取得したいのですが、方法はありませんでしょうか。
D:\Program Files\PostgreSQL\8.4\data
69 :
41:2009/11/11(水) 23:29:41 ID:???
>>53さんの言うとおり、セキュリティソフトでブロックされてたようでした
postgres.exeの許可と5432 ポートの開放をすると起動できました
長々とすみません、本当に助かりました
あと関係ないかもしれませんが
以前インストールしていたSQLServerのExpressが同じタイミングで
イベントログ吐いてたのでアンインストールしました
>>68 意味がわからない。
パスがわかってるならそれを使えばいいだけでは
>>68 まさかファイルを直接触ろうとしてる?
そんなことはないか・・・
72 :
NAME IS NULL:2009/11/12(木) 22:41:41 ID:FED0V3qb
>>70 基本的にはそうなんですけど、パスを取得できるのならそうしたいだけです。
>>71 現状ではcopyコマンドでcsvファイルをインポートするため、サーバの\dataに
クライアントのcsvファイルを一旦コピーしています。
postmaster.optsの中身の-Dオプションに書いてある
まぁpostmaster.optsがある場所がそこだけど
というかそのパスって自動的に取得するものじゃなくて
起動時に明示的に付与してあげるものなんだけど
74 :
72:2009/11/13(金) 08:51:03 ID:YspQ0Qr8
>>74 ちなみに何をしようとしてるの?
そのパスを知ってやることってバックアップしか思いつかない
サーバの\dataにファイルコピーできたら逆にまずいんじゃね
わざわざpostgresユーザ以外はアクセスできないようにしてるんだから
tmpフォルダとかにあげておくべきだろ
クライアントからでもcopy使えるしなあ。
サーバの作業場所はそれ用に別に作った方がいい
間違ってpostgres.confとか同じ名前のファイル上げちゃったらサーバ止まるよ
81 :
NAME IS NULL:2009/11/20(金) 22:20:10 ID:sztJs2Te
a
PostgreSQL Conference 2009 Japan お疲れさま。
素晴らしいカンファレンスでした。
83 :
NAME IS NULL:2009/11/23(月) 20:30:57 ID:MqVij48w
bank から 8.4対応の本出たね。
一応買ってみたけど、まだ読んでない
いちおー尼でカートには入れた
85 :
NAME IS NULL:2009/11/28(土) 11:10:26 ID:2D7DiwpM
PostgreSQLってOracleとかSQLServerと比べて劣ってるところある?
インストールしてみたけどGUIもついてるし結構いいね。
PostgreSQL いいよ。
劣っているのはアピール力や宣伝力だと思う。
87 :
NAME IS NULL:2009/11/28(土) 12:01:09 ID:lolg3VYv
うーん システム一式で考えた時、色々たんない気がする
SQL周りはwithとかWindows関数も使えるようになってきたのは嬉しい
#用途は限られるけど
[プロとしてのOracle運用管理入門]レベルの本が出るといいなぁ・・
データベースのコアは問題ないんだ。コアは。
不満はサードパーティのツールや資格のオフィシャルっぽさが足りないこと。
個人の責任で導入できるなら良いのだけど、客へ提案するときには障害になる。
現状 SRA 頑張れ、ということになるのか。
ほかの SIer も乗り出せばいいのに。
データとかもPostgreSQLベースのパッケージとかやってるだろ確か
Powergresとかね。
Oracleが最も恐れてるのかPostgresだろうね。
対決もする気ないようだし。
オープンソースなんだから
会社じゃなく、ユーザがツールや
『プロとしてのOracle運用管理入門』レベルの
Wikiを用意する、という選択肢もあるのだけどね。
Powergresは他のSIerの他じゃない方の会社なのでは
とにかく足りないのはレプリケーション
Slonyかpgpoolがあるが
どっちも使ってみたうえで言ってる?
HadoopDB には少し期待している
>>96 使ってるけど普通に
最初はpgpoolだけだったが同時書き込みで引っ張られるからSlonyで非同期にした
PostgreSQLの課題と言われ続けていたvacuumがだいぶ改善し、
オンラインバックアップもバックアップソフトのサポートがないとはいえ
機能としてはPITRがある今、残る問題はMySQLがやっているような
大規模なクラスタリングかな。
レプリケーションとクラスタを兼ねたpgpoolだのSlonyだのいろいろあることは
あるけど、MySQLがやっているぐらいの大きな規模となると辛い。
>>98 私もpgpoolは引っ張られるし非同期だと負荷分散できないべ
MySQL Clusterも同期にした場合と非同期にした場合の特徴同じだろうに
ディスク共有の場合くらいだよ両立できるの
それと
>>98が言ってるのはどっちか一つじゃなくてpgpool+Slonyでしょ
MySQLでクラスタの話になると、ただのレプリケーションをイメージする人と
MySQL Cluster の人が混ざって困る。
どっちにしろPostgreSQLでクラスタやるときと変わらんよ。
pgpoolはどうしてもシリアルがずれる可能性が排除できない気がする
俺がロックをちゃんと理解していないからだろうけど
>>104 シリアルやタイムスタンプはアプリで埋め込むしかないと思う。
でもこれって MySQL でも基本的には一緒だよね?
同時書き込みやるタイプの奴は商用製品でも同じだよ
そもそも書き込むまで値が解らないデータなんて使わないのが普通でしょ
フレームワークだと自動採番はフレームワークで吸収したりするし
107 :
NAME IS NULL:2009/12/02(水) 00:47:55 ID:l7Mt4Pbd
日本のIT企業なんて、ろくにデータベースなんて作れないんだから
PostgreSQLメインにしたらいいんだよ。
>>104 MySQLはいくつかのデータをバイナリログで特別扱いしてるのでずれない
ちなみに乱数つかってもシードごと送るのでずれない
ユーザ定義関数はずれる
> ユーザ定義関数はずれる
PostgreSQL は、開発者がやけにストイックなので、
こういう割り切りは嫌われるからなぁ。
そういうのはPostgresじゃなくてPostgresコンパチの独自製品と思ったほうが良い。
コンパチ?
PostgreSQLのカスタマイズ製品だろ?
113 :
NAME IS NULL:2009/12/03(木) 01:24:49 ID:RG7qM8LP
日本のIT企業はいつもメーカー独自機能とかいって中途半端なものしか提供しないよな。
そんなんはいらんのよ
>>110 富士通は自分とこで作ってるんでなくて、海外企業のEnterpriseDBの製品を取り扱ってるだけ。
資本出資はあるけどね。
windows server 2008にダンプを取るバッチを作成し
pgpass.confをCドライブのuser\AppData\postgresqlに配置したんですが
実行してもパスワード入力を要求されます。
どなたかserver 2008もしくはvistaでpgpass.confを使っていらっしゃる方いますか?
Win postgresqlでlog_statement=modでsqlログを取ってるんだが
pgAdminで編集した内容はログが取れるのにJakarta Torque経由だとログが取れん・・・
何でだ・・・
>>116 user\App〜って事はWindowsのユーザがuserっていうやつだろうけど、
PostgreSQLのOSユーザは本当にuserなの?
あとAppDataは%AppData%だよね?
echo %APPDATA%
かエクスプローラで%APPDATA%直接入れて場所確認したほうがいいかも
120 :
NAME IS NULL:2009/12/08(火) 02:13:46 ID:Nbo4F8Sg
ログ出力のやり方が判らなくて難儀してるのですが良い解説ページ等は無いでしょうか。
バージョンは8.3.8です。
やりたいこと:
成功するつもりの挿入文で失敗(?)しているので、
実行時のパラメータ(生SQL文)と、エラーならエラー情報を取得したい
(現状、「成功していない」ということしか判らない
コンソールからログインして想定されるSQL文を直接流し込むと成功する)
できれば既存のログ(syslog等)ではなくオリジナルなログに出したいが
その手順が面倒なら出力先は任意でOK
成功するつもりの挿入文ってのが意味解らん
pgpool-IIは着実にバージョンアップしているね
今回のバージョンからtimestampとかがずれなくなったらしいね
pgpool相当機能をlibpq上に実装してもらうと、
単一障害点が無くなって嬉しい気がするのだが。
125 :
120:2009/12/08(火) 13:37:32 ID:???
>>121 例えば"insert into hoge(int a, int b) values (1 , 2)"というクエリを実行したつもりで、
しかし結果としてa=1,b=2のレコードが挿入されていない、ということ。
その際、ロジックがおかしくてSQLにパラメータが正しく渡っていないのか、
ロジック(≒SQL文そのもの)は正しいけれど、設定周り(例えば権限)が原因で失敗しているのか切り分けがつかない、ということ。
>>124 ありがとうございます、役には立ちそうです。
「○○を指定したときはこのオプション〜」式の細かい指定が多いのが見ていて辛いんですが、
これはみんなちゃんと理解して設定しているもんなんでしょうかね……。
>>125 とりあえずログを見たいだけなら、必要なパラメータなんて数個でしょ。
syslog で良ければ
log_destination = 'syslog'
だけでとりあえず出るでしょ。facility はデフォルトで LOCAL0 だっけかな。
postgresql.confをじっくり見れば解決
>>126 なんか違わないか
聞いてるのはlog_statementだと思うぞ
>>125 >例えば"insert into hoge(int a, int b) values (1 , 2)"というクエリを実行したつもりで、
>しかし結果としてa=1,b=2のレコードが挿入されていない、ということ。
単にコミットされてない、ってのはないよね?念のため。
普通に接続した場合はautocommitだろ
サーバ側でいじってなければ
131 :
NAME IS NULL:2009/12/09(水) 00:12:35 ID:Ao+i+k7i
良くわからないんだけど、PostgreSQLもユーザ数が増えて商用のデータベースの脅威となった場合は、
MySQLみたいに買われて、飼い殺しになっちゃうものなの?
そういうラインセンス!?
>>131 MySQLの場合だと、買収後に飼い殺しにされた後でforkするにはGPL版を
元にしなければならないので商用に使う際に面倒なハメに陥るけど、
PostgreSQLならBSDL系ライセンスのままでいけるので、自由度は高い罠。
133 :
NAME IS NULL:2009/12/09(水) 00:36:02 ID:Ao+i+k7i
純粋にオープンソースで継続的にバージョンアップができている分野って、
どういう条件要素なのかとおもったりする。
それを支えている人材の生活があるから、その十分条件として何があるのかと。
まぁ少なくとも日本ではそういう分野で生活できてる人材は皆無に等しいのは
やっぱ日本て目先しか見てないからソフトウエアには向いていない人種だなと思う。
ソフトウエアってマイナースポーツに似てるよなw
そもそも飼い殺しって何を心配しているのやら。
そもそも売らないと買えないんだけどな
MySQLは会社だったけどPostgreSQLは違うし
日本でもソース公開している人はいるだろ
ただそれだけで団体として発展してない。
日本のオープンソースで一番発達してるのはサクラエディタくらいじゃないか?
え?何をトンチンカンなことを言ってるんだ?
Sylpheed、EC-CUBE、Seasar2Framework、Ruby、Zebra、Hinemos、
OpenSOAP、fml、LHA、namazu、GRUB、delegate、mew、w3m
いくらでもあるわな
すくなくともS2やRubyは組織化してるな
あとテキストエディタならxyzzyやMeadowも日本のオープンソースでは
GRUBって日本なの?
サクラエディタは本家が更新捨てて、派生ががんばってるんだよね。
けど、win7 x64版がなくて友人が嘆いてたな
日本発のオープンソースソフトって全体的にこう支援的な
物が多い気がするね。
縁の下の力持ち的な。
そう考えるとRubyは例外中の例外の存在なのか。
>>140 2010で自分でビルドすればいいよ
変更箇所はちょっとだけだし、コンパイルしながらなおしてきゃいい
それをコミットしてバイナリ配布することが活性化につながるんじゃないのか
2008とかならいいけど、2010じゃまだまずいでしょ、まだベータだし。
webDB作成してほしいんだけど誰か請け負ってくれない?
webから追加・削除・更新できる程度て良いのでおねがいします。
簡単に言うと住所録みたいなかんじです。
おねがいします
>>147 いいよ
ここに連絡先は掲載しないほうがいいね
どこか、書き込み、削除ができる掲示板とかに連絡先とか?
>>119 そういう方法があったんだね。
勉強になった。
150 :
120:2009/12/10(木) 23:59:37 ID:???
報告が遅くなりましたが
>>126 の"syslog"指定で
(期待したものとちょっと違いましたが ←生クエリじゃなくてプリペアドステートメントが出た)
エラーメッセージは確認できて問題も解決しました。
ありがとうございました。
余談ですが原因はvarchar(64)のカラムに入れようとしていた文字列が長すぎてエラー、でした。
pgAdmin でSQL文を実行すれば、大半のエラーは、
文法エラーや単純ミスなので、ログ出力しないでも解決できるはず。
>>150 いやだからその次くらいのレスのlog_statementをだな
>>151 実行するために、実際に発行しているクエリを取得したいという話ではないのか。
まぁ、
>>152だけど。
今回はエラーだったから、クエリもいっしょに取れたんでしょ。
解決したのだから良いじゃない?
正常終了のパターンだと log_statement が要るけど。
ただ、普通はクライアントにもエラーメッセージが返されるはずなんだよね。
アプリでまともにエラーチェックしていないんじゃ?
log_statementだとprepared statementに突っ込んだ値も出るけど
エラーなら出ないでしょ
http://postgres.sios.com/modules/install/index.php?content_id=3 の手順を参考にwarm standbyを構築しようとしています。
この手順について、以下の認識で正しいでしょうか?
この手順はPPAS(Postgres Plus Advanced Server)を使用しているが、
ソースからインストールした通常のPostgreSQLでも同様に行なえる。
手順4以降、稼動系サーバは通常通り運用していてかまわない。
読み出し、更新ともに可能。
手順5〜7の間に稼動系サーバに実施された更新内容は、
稼動系サーバのarchive_commandで指定したrsyncコマンドにより待機系サーバに送られ
待機系サーバのrestore_commandで指定したpg_standbyコマンドにより待機系サーバに反映される。
手順6で待機系サーバに更新内容が不完全にコピーされるが、
上記のpg_standbyによる反映があるので気にしなくていい。
手順6ではpostmaster.pidのみコピー対象から除外しているが、
pg_xlog/以下も除外して問題ない。
(その場合、反映が多少遅れる?)
>>156 最後以外は正しい認識だと思う。なかなかにまとまりの良いガイドだね。
> pg_xlog/以下も除外して問題ない。
> (その場合、反映が多少遅れる?)
除外して問題ない(というか除外すべき)だが、待機側に pg_xlog 以下を再現した
空のディレクトリ・ツリーを作成しておくべし。これにより反映が遅れることはないが、
そもそもウォームスタンバイは非同期WAL転送なので更新結果の転送には必ず遅れがある。
もし、フェイルオーバー時に直近の更新は失われるのが嫌なら、さらに追加で
DRBD とかが必要になる。archive_timeout もゼロにはできないので。
なるほど、こりゃいいわ。
とりあえずこれで凌ごう。
159 :
156:2009/12/13(日) 22:40:31 ID:???
ローカルに2つプロセスを立てる例はけっこうあるんですが
2台でrsyncまで書いてあるのってなかなかないですよね。
なぜかarchive_modeについて記述がないのですが、
稼動系はon、待機系はoffで動きました。
>>157 ありがとうございます。
同期の遅れやデータの欠けについては了解しています。
元でガンガン書き込んでるのに丸ごとコピーしてちゃんと動くってのは
けっこう不思議ですね。
> 除外して問題ない(というか除外すべき)だが、
pg_xlog/以下のファイルはコピーしても結局使われないから、ということでしょうか。
1台で2つ立ち上げるのも2台でわけてsyncするのも同じ事だろ
syncの方法が解らないというのなら、syncの方法を調べればいいだけ
> pg_xlog/以下のファイルはコピーしても結局使われないから、ということでしょうか。
そう、使われない。確かコピーしても特に害は無いはずだけど。
データに聞けよ
Win鯖上で無料でレプリケーションできるようなツールってないですか?
Linuxなら色々あるようなんですが。。。
検索しなくてもSlony for Windowsとかあんだろ
てかSlonyはついてないか?
PGCluster
pgpool
PostgresForest
Slony-l
しかピックアップしていなかったので見落としていたようです。
ありがとうございます。
Slonyピックアップしてたなら見落とすなよ
>>162 Linuxクラスタ対応のようだから、Winは非対応でしょう。
DBをまたいだ操作はcontribのdblink使えばできる
質問させてください。
shared_buffersの値指定は、
8.1まではバッファの数、8.2からメモリサイズを直接指定
になっていると思うのですが、8.4のマニュアルを見ると
共有ディスクバッファ=(block_size + 208) * shared_buffers
と書かれています。
これだと8.1までの計算式と変わらないのではないでしょうか。
block_sizeをかける必要はないと思うのですが?
>>171 すみません自己レスです。
8.4でもバッファ数での指定はできるので、
計算式ではバッファ数を指定した場合の計算方法を表している
ということで良いのですよね?
173 :
NAME IS NULL:2010/01/22(金) 22:27:42 ID:eauqLL+S
・
174 :
NAME IS NULL:2010/01/24(日) 04:06:07 ID:pg++ufzR
サブクエリを外部結合するとnestedloop joinになってしまうのですが
hash joinになるようにする方法ってありますか?
175 :
NAME IS NULL:2010/01/25(月) 10:44:36 ID:foNl4qQb
一時的に
SET enable_nestloop = OFF;
実行してみれば?
でも、なんでプランナが選択した nested loop join じゃなくて
hash join にしたいんだ?
177 :
NAME IS NULL:2010/01/25(月) 21:45:08 ID:pui9fXUg
単純に遅いからじゃねーの
SQLチューニングでいきなりプランナいじる奴がいたらアホだ。
質問があります
PostgreSQL(本体または関連アプリ)にhttpでいうところの
「リバースプロキシ」のような機能を持つものはありませんか?
具体的には、サーバAへの接続を、接続先dbがdb-bだったらサーバBに中継し、
接続先dbがdb-cだったらサーバCに中継する、という機能です。
やりたい事は、バージョンアップのためのデータ移動を複数回に
分けたいのですが、アプリケーションからは透過的にしたいのです。
予めdb毎にIPアドレスを割り振っておけば済む話ですが、先々を考えると
ローカルIPとはいえアドレス消費しすぎかなと。
?????
> 予めdb毎にIPアドレスを割り振っておけば済む話ですが、先々を考えると
> ローカルIPとはいえアドレス消費しすぎかなと。
サーバA,B,Cと3台あるなら既にIPアドレスは3つある訳で、プロキシ使ったところでアドレスが減るわけじゃない。
素直にサーバBのアドレスでサーバBのdb-bにつなげばよいし、サーバCのアドレスでサーバCのdb-cにつなげばよいのでは?
意図がよく分らない。
アプリケーション側の設定を触りたくないのかな。
pgpoolでどうだろ?
pgpoolってプロキシにも使えるんだ....知らなかった
今までバージョン8.5としてたものはバージョン9.0として出すらしいという噂を聞いた。
184 :
NAME IS NULL:2010/01/26(火) 23:32:44 ID:C/MTbqDV
postgresqlは、是非ともOracleを駆除していただきたい。
>>184 禿しく尿意
エンタープライズ分野ではムリだろうけどな〜
まぁ俺達エンタープライズ!って人たちにはぜひとも過去の遺物に
しがみついてもらおう。
最近の技術の流れは明らかに10年前などとは違ってきてる
駆除とか言ってる奴は本当に頭が悪いなと思う
選択肢って言葉を知らないんじゃないか
でもボラクルはJavaもろとも死んでくれると実に嬉しい
>>180 すみません、説明のために簡略化しすぎましたか。
サーバBからサーバAにデータを移したいのですが、中身はdb-Aから
db-zまで52個のdbがあって、そのそれぞれにIPを振って52個を恒久的に
消費するのはアドレスの喰いすぎだと思うのです。
データ移行が終われば1台構成に戻るわけですし。
(実際には52個もありませんが、今後増え続ける予定はあります)
>>181 pgpoolはdb別の処理をできましたでしょうか?
(調べたけどよくわからない)
>>188 サーバBの52個あるDBをサーバAに移したい(コピーしたい)と言う話で、なぜ各コピー先DBにアドレスを割り振る必要があるのかが分りません。
サーバBのDBと同じ数だけサーバA上でcreate database を発行するか createdbコマンドを叩けばよいのではと思いますが。
作った各DBへはサーバAのアドレスで接続しに行けますよ。
まぁ、プロキシがんばって探してください。
#なんかインスタンスの話とデータベースの話を混同している様な気がしなくもありません。
#実はサーバBにインスタンスが52個あります、と言う話だったりして
>>189 えっと、
・サーバB上のPostgreSQL8.0上に(例えば)52個のdbが動いている
・別サーバのDBクライアントからはIPアドレス指定で参照されている
・これらdbを8.4にアップグレードしたい
・ベタに全部データ移行すると、データ量の関係で(例えば)30時間かかる
・だがサービスを止められる時間は限られている(夜中のN時間)
・幸いにしてdbが細切れなので1個2個ならば時間内に収まる
さてどうするか?
> なぜ各コピー先DBにアドレスを割り振る必要があるのか
db-Aに10.1.1.1、db-Bに10.1.1.2… と割り振っておくと、
データ移行が完了したdbのIPアドレスをサーバBからサーバAに
付け替えるだけでアプリケーションを変更せずに済むのです。
(「必要がある」のではなく「そういう方法もあるが選びたくない」という事)
# 複数インスタンスで同一「IPアドレス・TCPポートの組」を共有できれば
# 苦労はありませんよ。
サーバAに52個のIPを割り当て、アプリからDBへの接続はそれぞれ異なるIPでってことか?
現状は、同一IP、インスタンス1、ポートも1、dbnameのみ違うの?
今からIPを割り当てるなら、移行が終わってから戻しても良いと思うけど。
したくないとか勝手な条件つけんなよ
なんか、
>>190がいうのはdb複製が出来ればいいだけじゃなくて、
* 全部複製できるまでは複製済みのdbも含めてサーバBのアドレスでアクセスさせたい
* で、なんでかしらないんだけどdb一つにつきIPアドレスを1個割り振りたい
なんだって。情報小出しにしてるからこれからも条件がどんどん出てくると思う。
絶対止めちゃダメで、最大52個のデータベースが入ってて、1〜2個を停止時間中にコピー、
ってことだから、Slony-Iを使うなら
dbコピーして、Slony-Iにレプリの指定して
を最大で52日間(営業日ベースだと2.5ヶ月くらい)やり続けることになるんでしょうね。
クラッシュしたら、終わりだね。
というか、クラッシュしたほうが、すっきりするかもよ。
196 :
192:2010/01/28(木) 10:25:06 ID:???
>>194 >>179 >>188 >>190は一貫してこう言ってると思います。
「PostgreSQLに振り分けを行う関連アプリがなくても
IPをdbの数だけ用意すればIPルーティングでdbの振り分けを実現できる。
しかしそういう強引な手段はできるだけ避けたい。」
情報の小出しについてはその通りですね。
>>190の前半のような事情は最初から書いて欲しかったです。
移行してる最中のだけpgpool通して後は直結とかでいいんじゃね?
>予めdb毎にIPアドレスを割り振っておけば済む話ですが
てことなので、現状、サーバAのIPアドレスは一個なんじゃね?
現状1個だが、DB毎に別IPを振れば移行完了したところから順にIPアドレスを付け替えていけばなんとかなるけど、
これはやりたくないと。(この方法を書いた事が混乱を招いているように見える)
> # 複数インスタンスで同一「IPアドレス・TCPポートの組」を共有できれば
> # 苦労はありませんよ。
# コメント扱いにすれば何書いてもいいのか?うぜぇ。
IPアドレスが既に複数であったとしても、単にレプリケーションを仕掛けておいて、レプリケーションが完了したら
サーバBを残せばよいように思うが。
恐らく何処かで何か少しの勘違いが錯綜してイングランド
そうすれ違い!
52個じゃないにしても、コピー先に複数のアドレスがあるんでしょう。
>>179にはこう書いてあります。
> 具体的には、サーバAへの接続を、接続先dbがdb-bだったらサーバBに中継し、
> 接続先dbがdb-cだったらサーバCに中継する、という機能です。
この時点でコピー元はわかりませんがコピー先のアドレスは二つある様に見えます。
>>190でいうところのサーバA相当が2台あるのか、サーバAに2個のアドレス割り当ててるのかは分らないですけど。
現状の構成も不明瞭、移行中の予定構成も不明瞭、判っているのは移行後には(おそらく)サーバAだけになる、と言う事。
まだ聞く気があるなら、改めて小出しにせずきちんと書いてみたら?
>>179
ホスティングしてるサーバなのかね
203 :
NAME IS NULL:2010/02/18(木) 01:25:45 ID:h6krnEyT
pg_dump で 日本語が文字化けする場合と しない場合ってなんでしょう?
文字コードは、UTF8です。
pg_dump データベース名 > aaa.sql
なにこれトンチ?
釣りだろ
pg_dumpでもエンコーディングの指定できるだろう
207 :
NAME IS NULL:2010/02/19(金) 10:31:47 ID:jf2XucmD
indexがちゃんと構築されてるかクライアントから確認する手段ってないですか?
どうもデータロードしただけで再構築やってない雰囲気なのですが。
phppgadmin とかpsqlで接続はできますが、DBサーバのアカはないので
ログとかは直接みられない状態です。
権限ないのに見られたらセキュリティホールでは
209 :
NAME IS NULL:2010/02/19(金) 14:20:26 ID:sbocO3zV
それじゃ作成されてるけど単に使われてないだけなら解らないぞ
インデックスは作られてると思うけどなぁ。
パフォーマンスが悪いから、インデックスが作成されていないのでは?とおもったのなら、reindexdbやってみたらどうでしょ
自分で管理してない鯖なら管理者に問い合わせるべきなのでは
もしくは管理者権限よこせか
インデックスがあるかどうかが気になるのなら、
psql -c '\di'
インデックスの有無は普通にpg_indexesとかで解るけど
そういう事じゃないんだろ
いい質問だと思うけどなぁ。
再構築やってないか? が質問なんだよね。REINDEX が要るか否かってことなら、
pg_relation_size() でインデックスの物理サイズをチェックしたり、
pgstattuple() でデータと空き領域の比率を調べるのは参考になるかな?
ただ、どちらにせよ、「もし断片化してなければ、こうなるはず」っていう机上計算ができる程度の知識は要るかも。
なんでpsql使えるのにphpPgAdminなんか使ってpgAdmin使わないのか理解に苦しむ
>>217 psqlとphppgadminは使えるが、pgadminが使えない状況ってよくあるよね
レンタルサーバーなどの場合、制限で、pgAdmin 使えない場合あるんじゃないの。
そもそもインデックスが云々みたいな使い方してるのに鯖のアカウントないからログ見られないとか話にならないと思うんだが
とりあえず VACUUM ANALYZEしてみたら
>>219 psqlとphpPgAdminはlocalhost接続で、pgAdminはリモートしか使えないけど、リモートからの
接続は制限されてるという場合。
よくは無いなあ。
たまにはあるかもしれんが
納めちゃったシステムはいつもsshでログインしてpsqlで管理してた。。
ssh開いてるならpgAdminIII使えるだろ
>>225 sshが開いているのにポートフォワーディングが制限されているのか?
>>227 コンソールで慣れていたのでついうっかり。
トンネルに慣れるようにがんばるよ!
そして使い慣れずに右クリック一発で全データ消去するのであった
230 :
NAME IS NULL:2010/03/01(月) 11:56:35 ID:NrCpd4mv
postgresqlをインストールして、postgresユーザで初期データをINSERTしたのですが、
他のユーザからPerlのDBI経由で使えません。ユーザ名とパスワードは、postgres/passwordに
ちゃんとしているのですが、何か追加で設定が必要でしょうか?
使えないというのはどういう操作をしてどうなるの?
Perlのプログラムが動いてるのはDBと同じサーバ?
できればユーザーは先に作ろうぜ
232 :
NAME IS NULL:2010/03/01(月) 12:07:38 ID:NrCpd4mv
ありがとうございます。
全部同じサーバ上です。
hogeというユーザからPostgresqlにアクセスするにはhogeをcreateuserするのが
一番いいんでしょうか?
233 :
NAME IS NULL:2010/03/01(月) 12:15:31 ID:NrCpd4mv
Createuserやりました。そしたら動いたよ。
ありがとうございました。
特定のデータベースにある全テーブルを、リードオンリー(selectのみ許可)で
アクセスできるユーザを作成したいです。
将来そのデータベースに追加されるテーブルもリードオンリーにしたい
のですが、どんなユーザ(ロール)権限にしたらよいのでしょうか?
COPY TO を利用してテーブルの内容をファイルに出力する際、
出力内容をsortすることはできないのでしょうか?
>>235 COPY (SELECT * FROM test ORDER BY id) TO STDOUT;
でいけた。
238 :
NAME IS NULL:2010/03/04(木) 08:04:53 ID:gtvQ8+8N
>>234 9.0 待ち。ALTER DEFAULT PRIVILEGES。
8.4 以前だと無理。テーブルを作るたびに GRANT & REVOKE してやらないとダメ。
239 :
NAME IS NULL:2010/03/06(土) 14:15:24 ID:MQ3U7j/O
ストアドプロシージャ内でビューを生成したいのですが、ビューの選択条件に関数の引数を使用すると、
実行時に there is no parameter $1 というエラーが出てしまいます。
解決方法をご教授ください。
create function f( code text ) returns integer as $$
begin
create view my_view as select * from user_table whrer user_code = code;
end;
$$ language lppgsql;
select func( 'A102' );
ERROR: there is no parameter $1
whrer
失礼。タイポです whrerー>where.
直しても実行時にエラーになります.
lppgsql?
タイポいじりもほどほどにな。
ビューの定義にまでは引数を引き継げない。
やりたいことが良く分からないが、もし「ビューを作る関数」を作りたいのならば、
動的SQLを使って EXECUTE 'CREATE VIEW ... WHERE user_code = ' || code; ならできる。
ただ、これだと関数を呼ぶ度に新しいビューが作られるので、ビューの名前も被らないようにすべき。
もしテーブル関数を作りたいならば、返値を SETOF user_table、LANGUAGE を sql にする。
これだと SELECT * FROM f('...') みたいな使い方になる。
PostgreSQL 8.x for Windows で、DBアクセスのスピード改善に取り組んでいます。
Q1.DB全体のパフォーマンスアップをしたいです。
shared_buffers, temp_buffers, work_mem の値を変更しても速度の改善が
みられません。
このパラメータのほかにパフォーマンスに影響する設定はあるのでしょうか?
またPostgreSQLのパフォーマンスを計測する標準的な方法はありますか?
(ツールとか、システムカタログ値とか・・・)
Q2.特定のSQL文のパフォーマンス改善をしたいです。
SQL文のパフォーマンス改善の方法として標準的な手順やツールがあったら
教えてください。
よろしくお願いします。
パソコン、サーバー、ハード、ソフトの環境、
遅いと思われる、SQL文の例を提示したほうが、
アドバイスを受けやすいと思うよ。
PostgreSQL 9 になるんだって?
ストリムレプリケションってな〜に?
まず 8.x っていう言い方は止めましょう。x の違いが大きいんだから。
Q2 特定のSQLまで分かっているんだったら、それの EXPLAIN を見ながら
クエリの変形やインデックスの追加を考えることになると思う。
Q1 は Q2 が終わってから。ただ、I/O と CPU のどちらがネックかは見ておくべき。
チューニングすべき箇所が全く変わってくる。
本一冊買って読めとしか言えない
250 :
NAME IS NULL:2010/03/07(日) 14:11:54 ID:bYRg7fas
すみません、質問させてください。
補助漢字(JIS X 0213)が文字化けして困っております。
下記に環境を記載致しますので解決方法を教えて下さい。
宜しく御願いします。
【サーバーOS】CentOS 5.4(32bit)
【DBの文字コード】UTF-8
【クライアントOS】Windows XP
【DB】PostgreSQL 8.4.2
【ODBC】8.4.1(UNICODE)
【開発言語】C#
251 :
245:2010/03/07(日) 17:19:21 ID:???
>>248 親切なご返答ありがとうございました。
EXPLAINですね。まず見方から勉強したいと思います。
I/O と CPU のどちらがネックかを見るには、パフォーマスモニター
でしょうか。貧弱なツールだと思えるのですが、これしかないのかな・・・
I/O と CPU のどちらがネックかを見るのに良いツールがあったら
ご教示お願いします。
だからさ、本気でアドバイス欲しいなら、正確なバージョンとメモリ量、ディスクなどのハード構成、
データ件数とSQLの種類、現状の秒数くらい書きなよ。
一般的なセオリーを聞きたいのでは?
駄目な教えてクンっぽいので、何か教えてもそこから自分で努力しようとせずに逐一聞いてきそう。
っていうか、もうそうなってるけど。
つまりこのスレは、
・一般的な質問はお断り
・個別のトラブルなら相談に乗るぜ
ってかんじ
このスレと言うか技術系はどこでもそんな感じか
広すぎる話は答えにくいからねぇ。
一般的な質問でもいいけど、ネット上で次から次へと質問を繰り返す類の人はちょっと困る。
本読むかどっかの教室で学ぶかしたら?って思う。
リアルで面倒みてるなら的確な質問を返してくる生徒は大歓迎なんだけどね。
>>255 っつーか、聞いたことに答えずに、自分が勝手に納得して新たな質問をするから
駄目なんだよ。
なぜ
>>246 の PC 環境や SQL 文を書かないのか。一切無視なのか。
>>248 の 8.x は何かを改めて答えないのか。
その上、I/O や CPU がどうとか言われても、てめーに判断出来るのか?って話。
>>250 文字化け
その構成ならずっとUTF8で通るから、エンコードの変換自体が起こらなそうだけど?
アプリかドライバでSJISになっているのかも。
\encoding UTF8
SELECT '文字化けする文字';
って書いたSQLファイル (UTF8N) を「psql -f ファイル.sql > 出力.txt」しても化ける?
>>261 確認できました。
PostgreSQL ODBCドライバー V8.4.1をインストールする時に、
ANSIとUnicodeの文字コード二種類インストールされますが、
C#の設定ミスでANSIの方を使用していました。
設定を変更したところ補助漢字が表示・修正できました。
お騒がせ致しました。
ttp://www.postgresql.org/docs/8.4/static/arrays.html#ARRAYS-SEARCHING ttp://www.postgresql.jp/document/8.4/html/arrays.html#ARRAYS-SEARCHING >Tip: Arrays are not sets; searching for specific array elements can be a sign of database misdesign.
>Consider using a separate table with a row for each item that would be an array element.
>This will be easier to search, and is likely to scale better for a large number of elements.
>ティップ: 配列は集合ではありません。特定の配列要素に検索をかけることはデータベース設計が誤っている可能性があります。
>配列の要素とみなされるそれぞれの項目を行に持つ別のテーブルを使うことを検討してください。
>この方が検索がより簡単になり要素数が大きくなっても規模的拡張性があります。
ここの説明の、配列は集合ではないと書いておいて、
それに続けて特定の配列要素に〜と続けているのがよく分からない。
特定の配列要素うんぬんというのは「WHERE pay_by_quarter[1] = 10000」ということだよね?
「WHERE 10000 = ANY (pay_by_quarter)」「WHERE 10000 = ALL (pay_by_quarter)」は許容可能だが、
「WHERE pay_by_quarter[1] = 10000」は変だと言っている?
>配列は集合ではありません。
ただ事実を書いただけなのか、含みがあるのか・・・
searching for specific array elements
配列のなかから特定の要素を検索すること
「WHERE 10000 = ANY (pay_by_quarter)」
のことだと思う
>>245 8.4以降ならこのやり方がお勧めです。
スロークエリの分析
http://lets.postgresql.jp/documents/technical/query_analysis/ 方式2: サーバログへスロークエリを出力する
1. 指定した時間以上かかったクエリを(必要なら実行計画もあわせて)自動的にログに出力できます。
まずは、とてつもなく遅い単独のクエリがあるかどうかをこれで調べます。
2. そのようなクエリが無いにもかかわらず、全体としてパフォーマンスが悪い場合は、次は
プログラムコードを疑います。クライアントのループ内で激烈なクエリ発行をしてるなんて
ざらです。効率の悪いSQLを書いているかもしれません。
そのようなコードがあるなら修正します。
3. そのようなクエリがあった場合は、実行計画を見て、インデックスが使われているかどうか
調べます。あわせて、シーケンシャルスキャンになっているところが回避できるようなインデックスを
設定できるかどうか検討します。
4. そうでない場合は、やっとパラメータチューニングの出番です。
まずはスタックビルダでインストールできるEnterpriseDB Tuning Wizardで、適切だと
思われるpostgresql.iniを作り、それを使ってまた1からやり直します。
5. それでも解決できない場合は、専門家に相談しましょう。
268 :
NAME IS NULL:2010/03/10(水) 15:09:37 ID:seV06sgY
失礼します。
plpgsqlの中で、変数の内容にしたがってレコード型の内容を取得したいのですが、
いい手段はありませんでしょうか。
name という変数の中に レコード型のカラム名を入れて、そのカラムのデータを取得したいのです。
nameの中身を「伝票番号」とか「商品」とかにして、そのレコードの伝票番号やら商品やらを
取得したいのですがなかなか迂回手段も思いつかず、詰まってしまいました。
申し訳ありません。
動的SQL文だと、変数の展開までは出来るのですが、
展開された変数にセットされている値をレコード名として
レコード型の変数からデータを引っ張ってくるというのが出来ません。
無理
ですよねー
クライアント側に頑張ってもらうことにします。
273 :
245:2010/03/10(水) 19:39:19 ID:???
>>267 返答ありがとうございました。
大変、勉強になります。
チューニングの手順が理解できました。
スタックビルダ、スロークエリなど、チューニングに使えるんですね。
知りませんでした。
>>263 はい。再度マニュアルを読み込みます。
ある程度動かして一通り浅く理解してしまうと、なおざりになってしまいます。
反省しなきゃ・・・
>>266 ああああ、言われると確かに。
配列は集合じゃないという部分も合点。
PostgreSQL 9 の正式版の公開予定はいつごろ?
ロードマップ見て来いよ
何を言ってるんだこいつ?
日本語対応ってマニュアルの話?
>>277のPostgreSQL対応はあと3年くらい必要だな
マニュアルって機械翻訳なの?
誤訳やら原文忠実性を遥かに超えた直訳やらで面白いよね
どこが?
じゃあ俺が(ry って思えないのが
>>281の限界
>>282 どこが面白いかって意味なら意外性だな
頭をひねって理解するとそこにアハ体験的なものがある
技術文書だから読みやすさより忠実性をとるのは正しいけどさ
AYB感とともにチャイナガジェットの取説的な面白さが香ってるのは
間違いねえこった
どこが機械翻訳的かっていうと、いわゆる誤訳って原文と異なった
意味の文章を構成してしまうことだと思うんだが、日本語としても壊れてるところかな
適当に開いたページから例をとると、
> オプションのRECURSIVE修飾子は、WITHを単なる構文的便利さから、
> さもなくば有効な標準SQLではなくなるものを仕上げる構成に変更します。
とある。一読して意味が取れなくてもお前らの頭が(^q^)なわけじゃない
むしろ誤訳なのにサクサク読めてると思ってたらやばい
しかし次の一文まで読むと訳者の意図がピンと来る
> RECURSIVEを使用することで、WITH問い合わせが自己の出力を参照できるようにします。
とりあえずexcite翻訳に原文つっこんだら普通に正しい訳出てきたから
マシーンじゃないっぽい^^
有志がそれぞれ翻訳してんだから、おかしいと思ったら参加してやればいいだろう
フリーライダーが何を偉そうにいってるんだ
あの程度の英文が読めないところ
英語教育のダメさ加減を表してるな
馬鹿な授業やめればいいのにね
英文が読める読めないって話じゃなくて翻訳がおかしいって話じゃないのか
とても場違いな話題で申し訳ないけど、6年間英語教えても成果ないわけじゃん
けどあれって英語だけじゃなく他の科目もそうだとしたら…だめだ恐ろしすぎてとても最後まで書けない
何を言ってるんだ
とても場違いな話題だね。
日本はほぼ内需だから外国語できなくても成功できるからな
まだ引っ張るかね?
つーかITエンジニアやってれば英語のドキュメントを見る機会なんて幾らでもある。
もし問題があるとすれば、英語力よりも国語力の方だろ。
業務系の仕様書見れば、日本語がおかしいのなんて幾らでもあるw
あと昔ACOS扱ったことあるけど、マニュアルが日本語的に悲惨でえらく苦労したぞw
で?
296は国語力に問題があるな
でっていう
300 :
NAME IS NULL:2010/03/16(火) 14:07:32 ID:Cy/WXQsW
>>281 なんで日本語訳のマニュアルなんか読んでるの?
>>302 日本語訳の素晴らしいマニュアルがあるのに、君はわざわざ英語の
マニュアルを読んでるのかい???
gdgdですなw
ん?日本語訳に文句付けるなら、自分で直すか英語マニュアル読めって話でしょ。
>>303の勘違い。
文句言いながら読むのも人の勝手だから粘着するなってことか
いつまでやってんの。
>>285 a feature that accomplishes things not otherwise possible in standard SQL
の日本語訳教えてちょ
日本語ODBCは、使う環境や使い方によって、エラーが出ることもあるから、
エラーが出ないのなら、最新が安心かもね。
自分の環境は最新ODBCはエラーになる場合がある。
>>312 いのっちの父の部屋で報告したらいいのでは?
PostgreSQLしかDBを知らないのだが、Oracleなどは何が凄いんだ?
世の中の99.9%はPostgreSQLで十分な気がするのだが。
Pgとオラクルなんて似たようなものだ
普通の人がOracleしか知らないだけです。
pgsqlで十分ならそれで何の問題もないかと。
Oracleは色々と問題あるのよねぇ。
マテビュとかデビリンクとか...
サポートに連絡しても何の役にも立たないし。
問題が起こったときに
PostgreSQLだと自分で責任をとらないといけないが
Oracleならサポートのせいにできるだろ
そういやMySQLはオラクルの傘下に入ったんだっけ?
相当大規模だと違いあるけど
1台だけとか現用待機程度の規模でやるなら変わらんな
>Oracleならサポートのせいにできるだろ
サポートのせいにしたところで、実際には何も解決はしないけどね。
DBの不具合で被った損害をオラクルが補償してくれるわけでも
ないし。
それでも、腐った設計のデータベースの尻拭いに関しては、まだOracleが勝ってる。
責任を取りたくない開発者向きの機能は、まだまだ見習うところは多いと思うよ。
つまり、Oracleを使う現場では設計を腐らせないと有利に働く部分がなくなってしまうんだな
何言ってるの?
そうだな。
障害対応がOracleはすぐれてる。
PostgreSQLは、まぁましになってはきたけど。
先日、とあるSEさんにOracleのサーバは絶対に再起動してはダメだ、と言われた...。
理由を聞くと、ほぼ確実にデータが壊れて復旧できないから、なんだと。
そういうもん?
>>326 んなこたーない。そこはどんだけボロいハード使ってんだよ。
ひとつのPgSQL接続だけを強制的に切断する方法はありますか?
ひとつのPgSQL接続だけがものすごい時間のかかる処理をしている場合、
システムへの負荷が相当かかり、他の利用者のDB処理が遅くなってしま
います。
PgSQLの再起動は、運用上できないです。
Oracleは動いてるときにぶった切ってもデータ壊れんし壊れても復旧できるけど
逆にPostgreSQLはinsertとかやってる途中だとgdgdになったりする
そういう所だな0円と500万円の違いは
>>328 ひとつのPgSQL接続だけを強制的に切断
pg_terminate_backend in 8.4.
>>329 PostgreSQLはinsertとかやってる途中だとgdgd
は? 普通にクラッシュリカバリできるが、何を勘違いしているの? FUD?
>>328 KILLしたらいいんじゃないの。
Winならタスクマネージャーで。
>>330 実際やりゃ解る
こっちは何度も苦労してんだよ
アーカイブログあるからとかそういう問題じゃない
プロセスkillしたらそれこそgdgdになる
pg_cancel_backendだっけ?で止めないと
pg_cancel_backend もひとつのプロセスだから、同じじゃないの。
え?processが死んだくらいでgdgdになるの?
今まで、サーバークラッシュ、再起動しても、グダグダになったことはないな。
pg_cancel_backend で止めたほうが安心だろうけど。
>>326 一回リカバリーしたなら、それマージさせないと毎回起動時にリカバリーするはめになるよ
クラスタリングとか同期処理とかやってるとおかしくなるな。
あと、すげー昔だけどupdate止めてロックおかしくなって再起動したことはある。
おかしくなったって言っている人が実際適切に運用していたかはわからないから、
結局何が悪かったのかまで突き詰められない。単なる苦労話にしかならないから、全く価値が無い。
馬鹿でも簡単お手軽にリカバリできる方法が用意されていないって言う話ならば、
確かにそれはポスグレが悪いんだけど。
> 馬鹿でも簡単お手軽にリカバリできる方法が用意されていないって言う話ならば、
> 確かにそれはポスグレが悪いんだけど。
そんなものはオラクルにもないわけで。
んで適切な環境って何?
不慮の事故に対応するのがリカバリでしょ
RAIDでUPSでジャーナリングでってのは
リカバリができるか云々とは別のベクトルだし
適切な環境じゃなくて、不慮の事故時に適切な運用を行ったかどうかでしょ
初心者が扱うとまともにパフォーマンスが出ないオラクルは良いのか悪いのか、という話は今俺が作った別のベクトル
gdgdの具体例まだー?
oracleにコンプレックスでもあんのか?
PostgreSQLにも欠点はあるんだから
それを隠して絶賛してたら何も進歩せんぞ
ウリナラマンセーで反日やるようなもんだ
Oracleに匹敵するようなものを限りなく安く使えるのがPostgreSQLなわけで、
もしOracleを凌駕するようなものならOracleなんてとっくに無くなってるよw
オープンソースの魅力は好きなように改造できることで、(制限付きではあるが)タダで使えることじゃないよな。
ああ、なんか書き足らないことだらけだ...orz
×突っ込み
○やっかみ
IDEやSATAでドライブの
書き込みキャッシュOnにしてたらありえる
書いてfsync()したはずのデータを
失う可能性があるから。
そういう用途には
バッテリ保護付きのアレイコントローラや
外部ストレージが必要
いやだからそういう問題じゃなくて
純粋に素のミドルウエアとしてのリカバリ性能の話をしてるんでしょ
ハードやファイルが壊れない前提なら大抵のDBMSは問題ないわけで
Relese note見てないんだろうか、この人。
リリースノート関係ないでしょ
ライトキャッシュによる遅延書き込みの失敗なんて
テキストファイル保存したってバカ高いバックアップツール使って保存したって起こることで
pgとoracleの性能差とは別次元の設定ミス
>>345 「欠点はある」んだったら、ちゃんと具体例を報告して、
直すなり、直してもらうなりすれば良いのでは?
>>350 まだ「リカバリ性能の話」までたどり着いていない。
ある人が、何か操作をしたら、リカバリできなかったという書き込みがあっただけ。
自分の信じる物に欠点がないと信じたい気持ちはわかるが
産業製品にとってそれは何のプラスにもならない感情だぞ
宗教じゃないんだからさ
だから、あるなら具体的に。
誰もそんなこと信じてないけど
けんか腰の奴にいちいち説明する義理もなんじゃないのか
信じてないから欠点がないとも信じていないんだが
欠点を見つけたら報告するでしょ普通
windows、redhatのバグ見つけたら報告するよな?それと一緒。
って欠点=バグと思い込むのは悪い癖でした。
要望は上げたことないや
そもそも欠点があったからバグフィックスがでてバージョンが上がって行ってるんじゃないのか
過去にはVACUUMしたら壊れるなんてのもあったくらいだし
361 :
NAME IS NULL:2010/03/26(金) 02:08:03 ID:xwgsQGRx
そんなソフトウェア一般の話をここでされてもな
vacuumってソフトウエア一般か?
一回ダンプしないとバージョンアップできないバグフィックスたまにあるけど、
あれすげー痛いな。
364 :
NAME IS NULL:2010/03/26(金) 02:31:09 ID:xwgsQGRx
>>363 メジャーバージョンアップはダンプがいるけど、バグフィクスで必要なったことは
ほとんど無いぞ? 「具体的に」何を指している? 確かに REINDEX してくれってのはあったが。
殆ど無いじゃなくて普通にあった
8,2の時にも
得意なリリースノートでも見てみればいい
>>366 そういうのって例えばOracleであればありえないの? 保証されているの?
サポートに聞いたら、とりあえずこのパッチ当ててみ、ってのも嫌だな。
というか完璧は無くて、有償だと責任を転嫁出来るって感じ。
完璧があって、それがPostgqeSQLだとか言わんよな。
コンパイルオプションの違いでおきることはあるけど
それとバグ以外じゃないよ、なっか勘違いしてるだろう
>>352 で、リリースノートは読んでないんでしょ?
だから、
> 大抵のDBMSは問題ないわけで
こんなこと言うんだよ。
例えば8.4.1のリリースノートのE.3.2. Changesの先頭三つはこんなかんじ。
Fix WAL page header initialization at the end of archive recovery (Heikki)
This could lead to failure to process the WAL in a subsequent archive recovery.
Fix "cannot make new WAL entries during recovery" error (Tom)
Fix problem that could make expired rows visible after a crash (Tom)
This bug involved a page status bit potentially not being set correctly after a server crash.
PostgreSQLって、一貫性のあるウォームバックアップって取れる?
あと、増分バックアップってできるのかしら。WALを取っとくとかいうのじゃなく。
なんか日本語の理解力が著しく低くないか
しかも敵が一人と決めつけて、色んな人の自分に都合がいい意見だけ繋いで反論してるし
取れない
Oracleだって、自動リカバリ不能になることもあるのに、PostgreSQLでそうなったと言ったらFUDだと騒ぐ。
FUDと言いたいだけ
DBなんて稼働し始めたら稼働四波なhしてアップグレードなんてしないもんじゃね?
ハードごと入替でエクスポート、インポートってのはあるけど。
378 :
本田:2010/03/27(土) 00:58:15 ID:qqcAE8kL
zfsは任意の時間のファイルシステム自身のスナップショットを取れるようになっている。
バックアップ機能の貧弱なDBMSはそれ自身のバックアップ機能に頼らす、
新しいファイルシステムのバックアップ機能を使ったほうがベターかもしれない。
379 :
377:2010/03/27(土) 02:35:16 ID:???
今更の訂正ですまぬ。
× DBなんて稼働し始めたら稼働四波なhして
○ DBなんて稼働し始めたら稼働しっぱなしで
>>378 StorageTek とかのディスクアレイならUFSとかでもスナップショットとれるよね。
>>378 それ一貫性のあるウォームバックアップの代わりになんの?
pg_start_backupと組み合わせればいけるはず
pg_start_backupなしはダメ
>>372 ○ 一貫性のあるウォームバックアップ
ほぼ× 増分バックアップ
最終変更時刻に変更の無いファイルを除外すれば、
一応増分バックアップっぽくはなるけど、ファイル単位なので粒度は荒い。
>>371 「バージョンアップはダンプがいる」から繋がっている会話なのに、
リカバリができないバグを挙げているのは、おかしくないか?
.0 はさすがにバグが残っているから、本格的に使うのは .1 以降にするって話なら同意だが。
ダンプが必要なバージョンアップがあった時は痛かったって話であって
バージョンアップにダンプが必要とは誰も言ってない気がするが
2 つの話がごっちゃになってるだけだろ。
どっちもリリースノートって言うから混ざってる。
>>350に対しての
>>351なわけで、だってほら最近のリリースノートにだってbugfix満載ですよってこと。
日本語が読めないというより、都合の悪いことは読みたくない奴が一人いるみたいね。
389 :
NAME IS NULL:2010/03/29(月) 01:17:45 ID:5tk5Z2gY
例えば、一定の売上高以上の伝票を検索しようとすると、シーケンシャルスキャンになると思うんだが、
売上高の様な整数(や浮動小数)のフィールドにインデックスを設定することに意味はあるでしょうか?
>>389 一般的には、売上金額など値データの列にはインデックスは張らないでしょうし、
意味もないと思います。
金額でソートする場合は貼るだろ
392 :
377:2010/03/29(月) 02:10:57 ID:???
>>380 トランザクションのコミット前なら大丈夫(だったよ、実際に)。
いきなりプロセスが死んだ(kill -killとかコンセント引っこ抜いた感じ)
状態になるけど、とりあえずリカバーできたよ。
というか、常時稼働の場合はDBによる「一貫性のあるバックアップ」と
一応「ある時点でのストレージのバックアップ」の両方をテストしたときに
以外に何とかなったんで、
ええっと、俺じゃなくて
>>378へのレスだったことに今気がついた・・・
読み飛ばしてくれ・・・
>>389 もしその数値フィールドがアプリというかシステムの重要なパフォーマンスに効いてくるなら、
例えば、log10をとったり10*nで割った値とかを整数化した値のコラムを作ってインデックス貼ると
速くなるよ。検索入力の値のlog10とか10*nで割った値(インデックス張った値)を検索条件に
いれる。DWH(読み取り優先)みたいなのではよくやる。
ヒストグラム(でいいのかな?)が均等になるようなインデックス値をひねり出すのがミソ。
参考までに。
>>392 [金額/10*n] = 入力/10*n and 金額 = 入力
のような検索条件にするの?
394 :
377:2010/03/29(月) 03:06:14 ID:???
まったくその通り。
たとえば、kinngaku_idx = 2 and kingaku = 235 みたいに。
この場合、
log10(235) = 2.371... -> 2
と、
235 / 100 = 2.35 → 2
の二つの考え方ができるけど、都合のいい方でとらえてほしい。
SybaseのIQとかは内部的にこんなようなことをを自動でやってくれたりするけど、
コラムの値のバリエーションが分かってるなら「出来合いのロジック」よりも
賢いことができる。
・・・といいな。
395 :
377:2010/03/29(月) 03:11:56 ID:???
ごめん。
>の二つの考え方ができるけど・・・
じゃなくて
「とか、いくらでも考えられるけど」
の方が適当だね。
へぇぇ。これは頭の片隅に入れておくよー
>>392 > ええっと、俺じゃなくて
>>378へのレスだったことに今気がついた・・・
> 読み飛ばしてくれ・・・
いやいや、お前が文章削れよ。
398 :
NAME IS NULL:2010/03/29(月) 23:47:39 ID:m9bmz7wY
mac osx でPostgreSQL 8.3 -> 8.4 にアップデートしたんだけど、HDDが20GB位消えてしまった。
pg_dumpall でデータを入れ直しました。
Caches にもなし。アップデートで多量の一時ファイルを消費して、消さないということはあるのでしょうか。
399 :
377:2010/03/30(火) 02:39:17 ID:???
>>397 いやぁ、なんかせっかく書いたのが惜しくなっちゃったもんで・・・
>>398 >HDDが20GB位消えてしまった
ここがよくわからん。アップデート前より、
ディスク容量が減ったのか、
DBが使っていた領域が減ったのか、
どっち?
空き容量が減ったってこと?
VACUUM FULLすればいいんじゃないの
そもそもアップグレードのときにDBクラスタには互換性は無いはずだけど、
Mac OS X だと何か特殊なアップグレード処理があるの? pg_migrator とか?
もしそのままDBファイルが使えるなら、内部的には dump & restore しているはずなんだけど?
売上金額にインデックス張ったほうがいいかどうかは、
環境によって違うだろうし、
どれくらいパフォーマンスがあがるか比較すればよいだけのこと。
先日postgreSQLを始めたばかりです。
初心者用サイトを見ながら、アカウントpostgresを作ったけれど見えなくなってしまいました。
コマンドプロンプトからパスワードは設定したのですが、これは別に気にしなくていいのでしょうか。
PCはwindows7です。また、最新版はpostgresql-8.2.1-1-jaなのでしょうか。
Windows7対応、動作確認済みなのかは、知らないけど、
最新版は、8.4.3 で、postgresql-8.4.3-1-windows.exe のようだよ。
日本語版jaじゃなくても、OKなはず。
405 :
403:2010/04/01(木) 23:22:21 ID:???
>>404 postgresql-8.4.3-1-windows.exe を無事に見つけてインストールもできました。
ありがとうございました。
406 :
NAME IS NULL:2010/04/02(金) 00:17:14 ID:e9uXcqr4
VACUUM FULL がかれこれ48時間くらい終わらない。
VERBOSEオプションで出力されるメッセージも新しいものは、24時間以上でていない。
速くする為に設定するconfのオプションがあったら教えて下さい。
ver 8.4です。
8.2以前ならともかぅ8.4でそんなことあんのか
VACUUM FULLならありえる。
ダンプとリストアを使ったら?
410 :
NAME IS NULL:2010/04/11(日) 00:10:05 ID:PA0WZF+k
テーブルトリガをCで書いてます。
「PostgreSQL 8.4.3文書 35.4. 完全な例」はその通り出来ました。
Cコード中でイベント発生行自身にアクセスするにはどうしたら良いですか?
SPI_Execに SELECT hoge from tbl_hoge where id_hoge=xxx とかしたく、
そのxxxが取れればいいな、と思っているんですが。
OSX10.6.3 iMac21.5インチ Intel Mac mini(1.83GHz) / Mac OS X 10.5.6で
PostgreSQL 8.3.6 をインストールし、libpqを使用した
アプリをUniversal Binaryで作成しようとすると、
ppcのコンパイルでlibpqへのリンクエラーが出てしまいます。
どうやらPostgreSQLのコンパイルを行う必要があるみたいなのですが
詳しい方よろしくお願いします。
make
PostgreSQL 8.3.6をどうやってインストールしたんだそもそも
よく見りゃ地球は不思議の塊
まあ ./configure --help で
PostgreSQL 9.0 早く出ないかな・・・
すげー期待してます。
何が乗るかも解らないのに期待してどうすんの?
419 :
NAME IS NULL:2010/04/19(月) 13:28:36 ID:Jr6VAcFd
なんで?
他の会社が金掛けて研究した情報をタダで手に入れようとか浅ましすぎる
はぁ?なんで?
なんでェ?
>>423 Gmailとかtwitterで個人情報登録必須だったらファビョるくせに
自分からはなにも貢献しないでもらうだけなのに
文句言ってんじゃねーよ。
嫌なら利用しなきゃいいだけだ
>>425 住所氏名とクレジットカード番号取るサイトもあるが
>>427 Gmailとtwitterのアカウント取る代行サービスでもあんの?
嫌なら登録しないだけでファビョらない
PostgreSQLと関係ない話はやめてくれないかな。
419がそもそも悪いけど、釣られた人たちも同罪
phpPgAdmin で、phpMyAdmin みたいに、カラムの追加とかしたときに
ALTER の SQL 文が見られるような機能ってありませんか?
phpPgAdminは知らん。
PgAdminIIIならALTER のSQL文を見れる。
答えになってないね。すまん。参考まで。
SET log_statement = ddl しておけばサーバログには
SQLが出力されると思うが、代わりにならないかな?
435 :
NAME IS NULL:2010/04/30(金) 02:59:33 ID:tPUwSxgQ
VACUUM FULL をした結果、次のようになりました。
INFO: free space map contains 65082 pages in 155 relations
DETAIL: A total of 67264 page slots are in use (including overhead).
67264 page slots are required to track all free space.
Current limits are: 80000 page slots, 1000 relations, using 534 KB.
ここで INFO で言われてることが気になるのですが、VACUUM FULL をした場合って削除済み領域を全て解放して
free space map が 0 になるということではないのですか?
VACUUM FULLするとテーブルはぴっちり切り詰められるけど、インデックスはむしろゴミが
増えるし、空きがあってもそのまま。インデックスに必要なぶんが報告されているのでは。
完全に 0 にしたいのならば、VACUUM FULLにつづけてREINDEXもしてみては?
質問です。
【サーバーOS】WinXP SP3
【DBの文字コード】UTF-8
【DB】PostgreSQL 8.4.3.1
【開発言語】PHP
HTMLファイル,PHPファイル,ブラウザより送られる値すべてUTF-8ですが、
この状態でデータベースにINSERTを行うと
「Character not in repertoire: 7 ERROR: invalid byte sequence for encoding "UTF8":〜」
とエラーが出ます。
さらに送られた値をアプリ側でUTF-8に変換してINSERTを行うと正常にINSERTできますが、
pgAdminVで値を見ると文字化けしているのですが。
これはどういった状況なんでしょうか?解決方法がありましたら
教えていただけないでしょうか?
または、参考になるHPがありましたら教えてください。
本当にサーバのエンコーディングはUTF8なの? psql -l してみて。
あと、サーバの設定でデフォルトのclient_encodingは何になっている?
439 :
NAME IS NULL:2010/04/30(金) 20:58:33 ID:sn9MUW5D
>>437 $conn=pg_connect(...);
pg_set_client_encoding($conn, 'utf-8');
してみたらどう?
set namesしたら動くとか言うオチなしな
>>437 UTF8をさらに、UTF8で変換するということをやっているということは、
何かおかしいので、どこか確認箇所の見落としがあるかもね。
PHPソースの変換サンプルを提示してみたら。
スタックビルダで認証proxy場合ってどういう指定するの?
ユーザー名とパスワードの指定でできる?
443 :
437:2010/05/02(日) 12:52:56 ID:???
>>438 client_encodingはUTF8になっています。
>>439 >>440 PDOを使って接続していますので、
set client_encoding to 'UTF8'クエリを実行しています。
>>441 mb_detect_encoding()で文字コードを確認して
mb_convert_encoding()で変換していますが、
うまくいってないですね
色々試した結果、正常に動かないので
インストールから設定しなおしてみます。
ありがとうございました。
>>437 >>443 Pgのバージョンは違うけど、自分は以下のようにサンプル作成したなぁ。
■SQL問い合わせ時
$str_sql = "select syohinmei from syohin_table WHERE syohincode = 123";
$str_sql = mb_convert_encoding($str_sql, "UTF-8", "SJIS");
if (!($rs = pg_query ($dbconn, $str_sql))) {
die;
} else {
}
■結果取得時
if ($row = pg_fetch_assoc($rs)){
$syohinmei = mb_convert_encoding($row['syohinmei'], "SJIS", "UTF-8");
} else {
}
445 :
NAME IS NULL:2010/05/03(月) 12:00:14 ID:Pnvwac5C
446 :
435:2010/05/05(水) 00:55:52 ID:???
>>436 REINDEX しても 0 とは程遠い値になります。
まあ、具体的に困ったことが起きてるわけではないので、ほっときます。
どうもありがとうございました。
>>435 そこで言われているのって、free space mapを
VACUUMでどれだけ解放しましたよ〜って事じゃないのかね
>>446 VACUUM FULL+REINDEXなら確実に 0 になるので、もし 0 にならないと
感じているのであれば、447 の言うように、単なるメッセージの読み間違いと思われる。
テキスト形式でダンプしてDBごとドロップして再インポートしないとそこは0にはならんぞ
FATやNTFSでデフラグしても頭から順番に並んで詰まる訳じゃないのと同じように
450 :
432:2010/05/06(木) 12:41:58 ID:???
えっ
452 :
410:2010/05/07(金) 01:14:30 ID:???
SPI_getvalue()で、なんか出来たっぽいです。
>>452 「Cコード中でイベント発生行自身にアクセスする」って話なら、
TriggerData 構造体の tg_trigtuple と tg_newtuple とは違うの? ...と思ったが、
これらの行の特定のフィールドにアクセスしたかったのかな? なら、SPI_getvalue or SPI_getbinval で正解。
>>450 差分管理するならCREATE文をコミットするのがいいと思うけど。
ALTERだったら大変じゃない?
455 :
432:2010/05/09(日) 20:08:51 ID:???
>>454 データが入ってて運用中のテーブルの変更なので、DROP/CREATEできないんです。
開発機のphpPgAdminを開発者にいじらせて、リリースの手順が svn merge→
mergeに関連するDB変更のSQLを流す→ソースのアップロード
なので、1発で全体を再現する完全なCREATE文は管理していません。
svnで管理しているddlを記述したファイルがある訳だよね?
変更の度に末尾にalter文を追加していくってこと?
だったら、変更後にテーブル定義をSQLでエクスポートしたものを
バージョン管理すればいいじゃん。特に、alterを手で書けないような
開発者にメンテさせるんなら、これ一本でddlに触らせない方がいい。
お前いっぺん『データベースリファクタリング』読めよ
458 :
432:2010/05/10(月) 12:59:52 ID:???
>>456 ひとつのリリースが終わったらファイルを変えて変更を累積しはじめ、
次のリリースのときにDB変更をまとめて本番機へ反映するために利用します。
できるにこしたことはありませんが、各DBのSQL方言を手で書けなくても
まともな設計をできる人はいると思います。
>>456 いつでもdrop database, create databaseで済む奴は楽だよね。
で、それで済まない環境を理解できないと。
>>455 運用中のテーブルに対して頻繁にALTER TABLEを実施するような状況ってこと?
運用開始からどのくらいたってるのかにも拠るとは思いますが、それ自体問題な気がしなくもなく。
# それとも普通の事で私がずれてるだけなのかな。
ALTER TABLE文を管理するこの方法はかなり異端視されているが、
Railsのmigrationみたいなものと思えば、そんなに変じゃないと思うが?
あっちは、元に戻す手順とセットだけど。
そうは言っても、ALTER文くらい手書きしたってバチはあたらんよなぁ。
まともな設計できる人なら、SQL方言くらい覚えるだろ。
ところで、ツールを変える、って選択肢は無いのかね。
pgAdmin IIIなら、GUIでALTER TABLEできて、SQLも自動生成してくれるけど。
見えすぎるのが困るのなら、上手いこと権限設定すれば何とかならないか?
>>460 頻繁って、勝手に頻度上げるなよ。1度でも起き得るなら考慮すべきだろ。
462 :
NAME IS NULL:2010/05/11(火) 07:55:06 ID:hNJe4LWT
>>461 ツールを変える選択肢、とかいうならもったいぶらずにお勧めのものを教えてあげればよいのに。
>>462 pgAdmin って書いてあるだろ。
使い古されて言いたかないが、「半年ROMってろ」を地で行ってるな、アンタ。
>>460 仕様変更などでカラムを追加する場合はどうやってんの?
そんなにしょっちゅうカラムが増えるなら設計がおかしい
466 :
460:2010/05/11(火) 20:48:39 ID:???
>>464 別に ALTER TABLE 使うなとか、CREATE TABLE を常にやれ、とかそういう話じゃないですよ。
リリースして最初の1〜2ヶ月とかなら運用中のテーブルに直接変更かけるのはわからなくもないけど、
基本的に設計ができているなら変更が発生するなんてほとんどないと思うんです。
※単体アプリ専用テーブルは除く
でも今はそういうことを気にせず変更を随時するもんだ、って言うような事になってるなら
私は古いんでしょうね。
ちなみに私が経験してきた範囲では、運用が始まってからそういったテーブル仕様変更をする際は
週末の運用後にフルバックアップとってアプリの持つ更新ログ回収してガッツリ確認までやる大掛かり
な入れ替え作業になります。
外部キーやトリガーやビューといった要因で問題がでたら目も当てられません.......
>>465 なんで頻繁に発生することが前提なんだ?
まぁそれはともかく、お前のところでは、過去も未来も仕様変更によるカラムの追加は
一切無いということだな?
>>467 しょっちゅう増えるならおかしいって書いてるじゃん。
でもまぁ、仕様変更の内容に応じて増えるのはいたって普通のことだと思うな。
項目増えてもスキーマ変更が起こりにくいように柔軟な設計をしました!っていうのは
逆にいやなにおいがするかもだ。
カラム増やすくらいならテーブル追加しろよ
既存のプログラムに影響与えるような殖やし方すんなよ
2カラムだけのテーブルが量産されるのもいやな話だな
カラム増やすなといったら、話がすすまないだろ。
みんな自由にデータの項目増やしたいから非RDBMSが流行ってるんだろ
ちょっとスレ違いかも知れませんが、識者の方おられましたら助言をお願いします。
OS:RedHat ES 5.3
postgresql-8.4.3
unixODBC-2.2.11-7.1
poco-1.3.6p2-all
の環境で、Poco::ODBC経由でTIMESTAMP型の
データをselectしようとすると、DataExceptionが発生します。
isql/psqlを使用した場合は問題なく表示されています。
testsuite(testrunner PostgreSQL)を実行すると、
[PostgreSQL SQL Executor] Warning: no SQL_TYPE_TIMESTAMP data type info returned by driver.
[PostgreSQL SQL Executor] Warning: could not get SQL_TYPE_TIMESTAMP parameter description.
の様に警告メッセージが表示されます。
もしかして、Poco::ODBCと、unixODBCは混ぜるな危険なのでしょうか?
Poco::ODBC::Utility::dataSources にもバグがあって散々悩まされましたし、、、
Cでユーザ定義関数を作ろうとしているのですが、
postegresqlの配列型(固定長integer[]とか)の受け取り方がよくわかりませぬ。。
どうやって受け取ればよいのでしょう?
deconstruct_array
>>472 一応 PostgreSQL でも、既存の行の初期値がNULLで良いなら気軽に ADD COLUMN できるし、
配列, hstore, xml なんかの構造化されていないデータを格納する方法はあるわけで、
「データの項目増やしたいから」ってのは一番の理由では無いのでは。
スミマセン。ソース見てたらなんとなくわかりました。
479 :
NAME IS NULL:2010/05/20(木) 23:43:15 ID:Y24F0uiZ
8.4.4, 8.3.11, 8.2.17, 8.1.21, 8.0.25, 7.4.29 リリース。
RHEL ES 4
PostgreSQL8.2.5
slony-i 1.2.12
上記環境で、Slonyのテーブル:sl_log_2のサイズが9GBを超えてしまいました
このsl_log_2のサイズを小さくしたいのですが、どうすればいいでしょうか?
あとslony-iの動作確認用のコマンドとか無いでしょうか?
(MySQLでいうところの、show master|slave statusとか)
481 :
NAME IS NULL:2010/05/23(日) 05:49:24 ID:E/lX6C9v
今回の更新の
?Fix possible crash if a cache reset message is received during rebuild of a relcache entry
って、どの程度の頻度なんでしょう? 急いでバージョンアップすべき?
>>481 たぶん、踏む可能性はとても低い。CLOBBER_CACHE_ALWAYS 付きでビルドした
負荷試験でしか確認されていなかったような気がする。
最悪、クラッシュして自動リカバリが走るだけだから、データ損失はないだろうし。
483 :
NAME IS NULL:2010/05/23(日) 21:07:44 ID:E/lX6C9v
>>482 ありがとうございます。文章読むと不安になりまして、かといって
リリースされたばかりで適用するのも怖いもので、、、。
数日様子を見て、1台ずつ適用してみます。
postgreSQLにaccessでリンクテーブルを設定しています。
そこでODBC接続に詳しい方にお尋ねしたい事があります。
リンク先を変更する際にリンクテーブルマネージャを使用すると
大変時間がかかるので、管理ツールのODBCデータソースアドミニストレータより
アクセスでリンク設定しているDNSの名前の構成のサーバー名を変更する形でやろうとしました。
できません。随時リンクの更新をしなければならないのでしょうか?
例えばテスト環境と本番環境それぞれにpostgreSQLが動作しているサーバーがあり、
テスト環境でリンクを作成したMDBファイルを本番環境で実行する場合も
ODBCドライバ等の設定が同一であっても、その都度更新をしなくてはいけないのでしょうか?
アクセスでリンクテーブルマネージャの画面を見ると
○地球マーク public_テーブル名 (DNS=ドライバで設定した名前;DATABASE=DB名;)
となってますが、ドライバで設定した名前以外に何か持っているのでしょうかね?
初めてなのでさっぱりわかりません><
Accessスレで聞いた方がいいと思うけど。
俺の疑問。何で本番用DBにリンク貼ったMDBとテスト用DBにリンク貼ったMDBの二つ
用意しないんだろう?俺がAccessのド素人故に抱く疑問なんだろうか。
それともう一つの疑問。何でAccess経由でODBCを使ってるんだろう?
直接使えばいいんじゃ。
>>485 レスありがとうございます。
Access経由といいますか、Accessでレポート出力しています。
既存のシステムがpostgresqlでそこにアクセスしています。
Accessのバージョンによるだろうから、Accessの使い方については、
Accessのスレや検索するといいでしょう。
ODBCを使う目的でAccess使ってるんじゃなくてODBC経由でAccess使ってるんだろ
あずにゃんぺろぺろすぐる
>>489 どうすんだよ・・・スレ止まっちゃったじゃねぇか
ワロタ
492 :
NAME IS NULL:2010/06/03(木) 00:03:08 ID:ZpHh5vtT
保守
じゃ、質問。
createdb された db1 と db2 があったとして、
ユーザ human は db1 だけ見られて、db2 は見られない、ってできませんか?
pg_hba.conf で指定できるけど、
createdb とかする度にその定義を書いて再起動するのはイマイチで。
ユーザ human からは db2 の存在そのものを隠したい、ってこと?
もしそうなら俺も知りたい
495 :
494:2010/06/03(木) 02:18:53 ID:???
連投ごめん。とりあえず
REVOKE CONNECT ON DATABASE db2 FROM public;
とかやってみたら、オーナー以外接続できないようにできた。
# 依然 \l には出てくるけど。
そらそうだ
存在すら隠したいならインスタンス2つ立ち上げて接続分けるしかない
498 :
NAME IS NULL:2010/06/12(土) 17:56:01 ID:wRV5qdR+
postgresについてつまずいているので、どなたか助言お願いできませんでしょうか?
以前までcreatedb 'データベース名'でデータベースの作成は出来ていたのですが
今日、ふと新しいデータベースの作成を試みたところ
createdb: could not connect to database postgres: FATAL: database "postgres" does not exist
と表示され前に進めません。
postgresが起動していないのかと思い、既存のデータベースに接続を試みたところ
データベースにアクセスし、データの参照は可能でした。
しかし、psql -l のコマンドは通りませんでした。
以前サーバのIPアドレスの変更したのでそれが原因かな?とおもっているのですが
関係ありますでしょうか?
以下の環境でPostgreSQLを動かしております
■OS:FreeBSD 8.0
■PostgreSQL 8.4.0
>>498 postgres データベースをDROPしちゃったのでは?
createdb postgres で作り直すか、-d <既にあるDB> で接続するDBを明示すればOKと思われる。
ただ、いろんなコマンドで -d 指定するのも面倒だから、postgres を作り直したほうが良いかもね。
>>499 見事そのとおりでした。
postgresのDBは必須だったのですね。
質問内容に対する見事なエスパーありがとうございました。
ユーザー名"postgres"でつかってるとみた
ざんねん。createdbは常にpostgresデータベースに繋ぎに行くのです。
(postgresデータベースを作るときを除く。)
psqlとかはユーザ名と同じDBになるけど。
あれ?
template1って何だったっけか?
ぐぐったらわかった。
知りたい奴はぐぐれ。
ググるレベルじゃなくみんな知ってるだろ普通
506 :
NAME IS NULL:2010/06/15(火) 13:53:22 ID:NHxMlo8d
>484
コードでリンクは切替えられると思ったが
#昔やったきがするけど、コードは今手元に無いw
レコード数が900程度のテーブルを、全レコード毎秒UPDATEしているのですが、
突然UPDATEに要する時間が20倍になってしまいました。(900レコードを1レコードずつ更新するのに1秒以下で
vacuumしてないとか
レコード数が900程度のテーブルを、全レコード毎秒UPDATEしているのですが、
突然UPDATEに要する時間が20倍になってしまいました。
(900レコードを1レコードずつ更新するのに1秒以下で済んでいた)
REINDEXすると一時的に改善するんですが、数分経つとまた20秒くらいかかってしまいます。
まったく解決策が見出せないのです・・・どのあたりについて調べればいいかでもいいのでアドバイスお願いします
RHEL5 POstgreSQL8.3.1 slony-i1.2
>>509 ありがとうございます。
autovacuumを設定しています。(ログ出力はしていませんが・・・)
postgres.confのAUTOVACUUM PARAMETERSで設定しているのは以下の3つです
autovacuum = on
log_autovacuum_min_duration = 2
autovacuum_naptime = 3min
REINDEXで改善?
んーーーー
とりあえず切り分けしたいので、コマンドでVACUUM ANALYZEして直後に時間測ってみて
あとconfの値は全部デフォルト?
Free Space Map関連を増やしてみるとか
VACUUM FULL、VACUUM ANALYZE、ANALYZE、REINDEXをすでに何度か試した後でした・・・
それ以外のことは何もしていません。とりあえず今は1秒くらいで処理が終わっています。
confは下記以外デフォルトです
max_connections = 100
shared_buffers = 32MB
AUTOVACUUM関連
関係あるか分かりませんが、topコマンドでメモリ使用量を確認したところ
遅い時はusedが物理メモリ8G中7.9GBくらいで、通常は、8G中7GBくらいでした。
FSMが小さいと、データベースクラスタの容量がどんどん膨れ上がると書いている人が居たので
関係ありそうです。FSM周りについて少し勉強してみます。
updateの検索条件がPKじゃないみたいなオチなしね
一つの列をPKにして、whereの条件はPK一つだけにしています・・・
ちゃんとHOT効かせてたら大丈夫なだけど、まさかそのPKは更新してないよね?
他のトランザクションと重なってたりするとHOT効かないことあるんで、
排他ロックかけるってのもありかも?
あとはFILLFACTOR調整したり・・・
なんで測定しないの?
いろんな測定。OSのI/Oとかも含めて。
そんな抽象的なアドバイスはしてないのと同じ
520 :
NAME IS NULL:2010/06/26(土) 00:46:09 ID:cCUVcESF
>>510 まず、実行計画を速い時と遅い時で見ること。
ソートがオンメモリとディスク上になってたりしないか?
OSが何なのかわからないけど、vmstat的なもので、速い時と遅い時になにか
違いがあるのか調べたら?
でもREINDEXでなおるんだったら、やり方全体を見直した方がいいかもね
定期的にREINDEXする、でもいいけど
updateが独立してるなら、10個のコネクションで90個ずつupdateするとか
全レコードUPDATEはきついな。設計ミスと言わざるを得ない。
インデックスを張ったカラムを更新しているのでなければ、
そのテーブルの fillfactor を 50% 未満にすると改善されるのでは。
DELETEしてINSERTしろ
こういう興味ある事例に限って、解決しても報告がないんだよね。
527 :
510:2010/06/28(月) 18:09:19 ID:???
すみません遅くなりました。仕事で週末潰れてました
現在は、処理が正常に動いている(1秒間に900レコードupdate出来てる)ので
再発した時のために教わったことを整理して備えてる状態です。
お陰様でやれる事が見えてきました。
topコマンド画面をただ眺めてる時間が短くなりそうです(汗
しかしすでに稼動中且つ正常に動作している中で色々試すのは怖いものがありますね・・・
>>517 PKのカラムは更新していません。
>>518 SQLの実行時間を測って満足してました。
HDDへの書込み速度を比べてみます
>>517,520,524
HOT、FILLFACTORについて勉強してみます
>>521 なるほど・・・勉強になります
インデックスが使われることは確認したのですが
そういう事も分かるんですね
>>522-524 原因が隠蔽されてしまう可能性がありますが・・・検討してみます。
>>525 追記型DBなので効果が無いと思うんですがどうなんでしょうか
>>526 何か分かったら絶対書き込むようにします
レス消費して恐縮ですが・・・
レスお疲れ。
なんかわかって気が向いたらまた書き込みヨロ。
検証用のテストマシンがあればいいな
レスはどんどん消費してほしい
530 :
NAME IS NULL:2010/07/08(木) 16:17:31 ID:089bL9oR
教えてください
現在、postgresqlをつかったpush型webアプリケーションを調査中です
tomcat+apache+phpで設計しようと思うのだけれども
できればwebサーバー側のスクリプトは統一したいのです
そこでphpをやめてjavaに統一しようと思ったのですが、notify/listenをトリガーに設定しようとすると
java/jdbcではポーリングをするはめになるようです(非同期がつかえない)
だからと言ってjavaをやめるとcometがどうもよくないのです
そこで質問です
java/phpのブリッジにはsapiか、jniのどちらを採用する方が一般的でしょうか?
また、その際の注意点、留意点があったら教えてください
あと調査の結果でないと思うのだけれども、jdbcでnotify/listenでポーリングせず
スマートに非同期できる方法があるのでしたら教えてください
よろしくお願いします
統一しなきゃいいんじゃない? …ってのはナシ?w
そういや9.0、ベータ3になってるね
533 :
NAME IS NULL:2010/07/31(土) 12:07:33 ID:6Gfxgj+P
order by random()が便利すぎる
何に使うの?
view に対してインデックスを張ることは可能でしょうか?
8.3です。
>>535 ビューは仮想的なテーブルであって、ビュー自体にデータを保存する場所機能がない為、
インデックスを張る事はできません。
テーブルに適切なインデックスを設定して下さい。
テーブルに張ったインデックスは、ビューを使った時に有効活用されます。
ユーザを作らないで運用する事って可能なのでしょうか?
rootでは動かせない?
rootで動かしたくないからいろいろやってんでしょう。
目的がはっきりしてるならできないこともないけど、
ユーザーの作り方がわからない、とかならやめといたふが・・・
rootになれるなら説明書通りインストロールするだけだろ
rootになれないので一般ユーザのままインストールできますかって質問なら成立するけど
いや、新規ユーザを増やしたく無いという客がいた場合
対応できるのかなと思って。
なんで増やしたくないんだ
そんな奴いるのか?
ストアド書いてそこから外部プログラム実行するようにしたら
DB使えるなら誰でもrootで実行できちゃうよね
あ、rootで動かした場合の話ですよ。
ポート1024以下で動かしたい場合でもリダイレクトでやるべきだろうし。
rootでインストーラ動かす話とアプリのインスタンスを
rootで動かすってのがごっちゃになってない?
質問です。小さなテーブルに対するUPDATEが返ってこなくて固まってしまうのですが、
別セッションでトランザクションがかかりっぱなしになっている以外に
原因て考えられるでしょうか。
OS: CentOS5.2
ver: postgres8.1.11
Webシステム全体が止まってしまうのですがCPU使用率も高くないし、トランザクションかけてるところは
全部チェックしたのですがあやしいところがないし、pg_logにも何も出ないしで
困っています
547 :
545:2010/08/22(日) 21:09:38 ID:TfBU30EW
トリガ・ストアド・ビューはなんもないです。
気になるのは止まったときにpg_activityをみると20個くらいはAのテーブルのUPDATE文なのですが、
2,3個BのテーブルのUPDATE文が混じってることです。トランザクションが問題なら
別のテーブルに影響でないですよね?Bが20個くらいでAが2,3個の時もあります。
トランザクション中に違う順番でロックかけてデッドロックも疑ったのですが、
プログラムを見てもこれと行ってあやしいところがありません。むーーーん、、、
オートコミットになってなくてコネクションが残ってるとか
つい最近、図書館の騒ぎにあったな、コネクション残りw
550 :
NAME IS NULL:2010/08/24(火) 13:08:14 ID:4eZnnJ7w
>>545 その機能は、もともと稼働していたのか?
新規なのか?
新規なら機能バグでしょ?
プーリングしてる?
時間のかかるSQL文をチェックする変数あったよね?
pg_logにも何も出ないじゃなくてなにも出ないように設定してるだけじゃないのか
みなさまレスありがとうございます。
>>551ログの設定はデフォルトです。
このシステムは3年ほど稼働していて新機能が随時追加されていて、
去年辺りからあまりレベルの高くないPGがまじっていて何度か致命的なフリーズをおこし
(ユーザーの1クリックで500MBのテーブルを条件無しで全部メモりに読み込んだりとか、
登録する度に過去データをコピーするので倍々にレコードが増えていったりとかw)、
その度に私が対処してきたのですが、今回ばかりは原因を見つけられずにここに
相談してみた次第です。同じモジュールが他にも10サイトほどで稼働しているのですが、
現状ここでしか起きていません。ただ、ここでしか使ってない機能もあるしこのサイトが
一番負荷が大きいので、プログラムの問題なのかOS/DBの設定の問題なのか
ハードウェアの問題なのかの切り分けも微妙という状態です。
一応Webサーバーの方にはトランザクションかかりっぱなしならコミットするという
ロジックを入れて二日ほど落ちていません。が、もともと週末に1,2回落ちるだけなのでまだなんとも。
>>550 フリーズ中にpg_activityみてもPrimaryKEY指定のUPDATE文が残っているだけですし、
ミドルウェアの機能で全SQLの実行時間を集計していて特にあやしいSQL文はありません。
というか毎晩vacuumしたり過去データ削除で時間はかかってますがフリーズのタイミングと
相関がありません。
現象と状況からするとただのプログラム作り込みバグにみえるけどねぇ。
トランザクションと全く関係ないような画面のSELECT分にfor updateが付いてるとかのイージーエラーじゃね。
全SQL調査したけどselect for updateはありませんでした。このシステムでは全部後勝ち更新で
使ってないしそのPGはselect for updateの存在すら知らないと思います。
やっぱりロック絡みですよね。今度起きたらpg_lockみてみます。
select * from pg_locks l left outer join pg_class c on l.relation = c.relfilenode
こんな感じでロックかかってるテーブル特定できますよね。
今まで見てなかったのかよ!
我慢してたけど、君の書き方から察するに
決め付けや思い込みでバグが見つけれて無いだけな気がする
出てません、してません、ありません
では見つかるバグも見つからないと思う。
>>556 結構同感。
> みなさまレスありがとうございます。
>>551ログの設定はデフォルトです。
で、結局ログ出てるの出てないの?
回答者にデフォルトがどうだったとか、いちいち調べさせたいわけ?
> 全部チェックしたのですがあやしいところがないし、pg_logにも何も出ないしで
何も出ないとは? UPDATE 以外のも何も出てないの?
本当に微塵も何も出てないなら、
>>551 となって話はループするんだが。
業務上のトラブルなのに
MLじゃなくてこっちで質問する判断力がまずどうかと思う
名前だして質問したくないレベルってことか?
業務上のトラブルはMLじゃないとだめなの?
早期解決が目的じゃなくて雑談交えたいならこっちでいいんじゃね
フリーズとかいいつつpg_locks見てなかったって・・・
このレベルの人だとデッドロックは見つけられないだろうな〜
とは思った(笑)
>>557 すいません、書き方が悪かったですね。フリーズに関連するログは出てないだけで、
それ以外の時には「LOG: クライアント接続に想定外のEOFがありました」等はでています。
(posgresql-8.4にupgradeしたのでログが日本語になりました)
>>558 MLは昔はいくつも入ってたのですがチェックするだけで時間喰うしつい答えたくなったりするので
最近は使っていませんでした。質問ある時だけ入るのも悪い気がするし
>>561 すいません、今までは自分が全体を見てるプロジェクトではデッドロックなんて起こしたこと無かったので
PostgreSQLのpg_locksは今回のことで知ったばかりで、無知でお恥ずかしい限りです。
いちPGの時は関わったプロジェクトでデッドロックが起きた事もありますが、OracleでDBAもいたし
自分のところじゃなかったので首突っ込んでなかったんですよね
posgresql-8.4にupgradeしたので
posgresql-8.4にupgradeしたので
posgresql-8.4にupgradeしたので
>>562 MLに聞かない理由は分かった。
で、ここなら質問ある時だけくるのもおkなのね
>>565 べつに
こっちの人には悪いと思わないのかなと思ってね
俺はMLでも2chでも、一見さんでも構わないと思うけど、
どうやって聞いたらアドバイスが貰いやすいとか、
考えて質問しろよと思う
今回ML等に質問に行かない理由はプログラムの問題であって
postgresの問題じゃないだろう、というのもあります。こっちの方が
気軽に聞けるし、ここはちょくちょく来てますし。質問は
>別セッションでトランザクションがかかりっぱなしになっている以外に
>原因て考えられるでしょうか。
に集約されるのですがわかりにくかったでしょうか。
他に考えられないのであれば自分のバグの探し方が足りないだけでしょうし、
他の原因もあるのであれば見当違いの調査をしてる可能性もあるので、
なんかヒントでもないかなあ、と思って質問した次第です。
まあでも雰囲気悪くしちゃったみたいなんでおとなしくプログラムのバグ
探し続けます。
エスパー募集中
最近は念力デバッグというらしい
んで8.1から8.4にワープした言い訳を
>>567 postgresの問題じゃないとするのならスレ違いじゃね?
それはそれとして、稼働中のシステムのものについてそんな簡単に
アップグレードしちゃっていいの?
ちゃんと検討してるのか怪しいように思える。
んで、本題だけど、今まで発生しなかったけれど、プログラムの修正によって
発生するようになったのなら差分を追いかければ済む話。
そこで作りこんでいなければ、「あまりレベルの高くないPG」以外が作った
潜在バグが表面化しただけ。
あまりレベルの高くないPL
の間違いのような気がする
原因見つけました。結局その駄目PGのコードで、
成功したらコミット、SQL例外が出たときのみロールバックする、というコードがあり
SQL例外以外の例外の時にトランザクションがかかりっぱなしでした。
そのPGが参考にしたと思われるコードではSQL例外以外のものは出る余地がなかったのですが
問題の箇所では異常データが送られてくることを想定してないといけなかったという感じです。
トランザクションかけるときは全ての例外キャッチでロールバックするというのを徹底したいと思います。
ありがとうございました。
バージョンアップについては、前述の通りASPで同じシステムが10サイト以上入っており、
新サイト追加の時にテストして8.4を導入済みで実績があった(暗黙の型変換絡みで一カ所だけ修正が必要でした)
のと、検索速度増加を期待してあげました。というかいちいちここで背景まで説明するのは
うざいだけだと思うんだけどそんなに聞きたいの?単に「どうせロクに検査してねえんだろ」という
事を確認して他人をバカにしたいだけだからスルーするのが大人ってものなんだろうか
結局ログをちゃんと見てなかった or 出てなかった、ってことでしょ
そこまでできてないなら、原因聞くより調べ方効いた方がよかったね
>別セッションでトランザクションがかかりっぱなしになっている以外に
>原因て考えられるでしょうか。
あーなるほど確かに>調べ方聞いた方が
ちなみにまとめておくと、pg_stats_activityのquery_startで古い物ばっかり
注目してたのですが、8.4に変えたところxact_startというのが追加され(8.3かららしい)
この時間がフリーズの数十分前になってる「<IDLE> in transaction」があり、
トランザクション開始時近辺のログを調べることで原因を特定できました。
8.1のままだとxact_startが無いのでまだ気付かなかったと思います。
http://lets.postgresql.jp/documents/technical/statistics/2 「<IDLE> in transaction」はpg_stats_activityを見てると時々出るので
あまり気にしてなかったんですが、始めからこれに注目すべきでした。
みなさんの口ぶりからするとdbaでもないのにこんなの見たら一発でわからないと
駄目なんですかね。頑張って精進します。
つーかcommitやrollback関係なくconnection閉じてないだけだろ単に
良く分かってないのはお前だろ
知らない分からないを問題としてるんじゃないのに・・・
まあ知ったこっちゃないか
いやconnection.close()は各SQL呼び出し箇所のtry-finallyできちんと呼ばれてるけど。
どうしたらこんな素っ頓狂な発想がでてくるのかね
>>579
トランザクション中にコネクション切れたらアボートされないか?
コネクションプールのミドルウェアが保存しとくので本当にclose()されるわけじゃないよ
って言ってもphpとかのスクリプト言語しかやった事無い人には想像できないよね
コネクションプールのミドルウェアはトランザクションも保持するのかよw
なんで突然ミドルウェア?
例外発生で、SQL例外のみキャッチしロールバック。
その他の例外は何もしないでfinallyでclose?
トランザクションかけっぱなしのままコネクションプールに返却したら保持されるよ。
いちいちコネクションを持ちまわらなくてもいいようにスレッドローカルに紐づけて
任意の場所でconnection.close()が呼べるようになってるから
だから
>>587みたいなtry-catch-finallyじゃなくて、トランザクションをかけるところでは
try-catchでrollback、SQL実行は別のDaoクラスのメソッドでtry-finallyでクローズ。
Daoの方はトランザクションがかかってるかどうかは気にしない
あまり流れを追ってないだけど
質問者って開発言語すら書いてないよね。
最初はDB知らないだけかと思ってたけど、
SEとしての資質が欠如しているような
>>574 お前が馬鹿なのと品性下劣なのと自分の醜悪な部分を人に見せびらかすという
性癖を持っている変態なのは理解してあげたから、もう二度と湧いて出てくるな。
皮肉を言わなきゃ気がすまない奴はこういうところは馴染めないね
自分は悪くないし、できると思ってるんだろう
よちよち歩きのクセにみえだけは貼りたがる
プーリングするやつがトランザクションも監視して切断と
同じ状況に戻すだろう、どんなミドルなんちゃらを使ってんだ?
つーかpoolしてたってコネクションcloseすればトランザクション切れるだろ普通
TomcatとJavaでやってるけどclose漏れ以外でそんなんなったことないぞ
とりあえずPHPバカにすれば玄人っぽいと思ってる奴が恥ずかしすぎる
トランザクションが保持されるって環境に当たったことがないなぁ
確かにプーリングした場合に、使うミドルウエアによってはあり得るんだろうけど
それにしたって、普通にプーリングしてもトランザクションなんて維持されないし、
かなり特殊なパターンじゃね?
プライドだけは高いんだな
phpでもpconnect使えばコネクション保持できるし、トランザクション途中でほったらかせるけどな
もちろん"するべからず"だけどね(笑)
JDBCの場合だいたいどのDBでもcloseすると勝手にcommitされる
JTAみたいにトランザクション開始したら同一スレッド内では何度getConnection()/close()
してもコミットされないというのが最近の主流だと思ってたんだが、うちは少数派だったんだな。
というかスレタイとずれまくり
JTAの場合はDBのコネクション取得するしないじゃなくてUserTransaction単位だから
また概念が違うしな
で?
分散トランザクション使ってるかもしれないだろ
そんな予測もできない奴はPHPでも使ってろよ
> 単に「どうせロクに検査してねえんだろ」という
> 事を確認して他人をバカにしたいだけ
君は本当にバカだなぁ。
そりゃあ検査してないなら、自分が見てるプロジェクトではこんなことなかった!とかいう傲慢なPLをバカにするけれどね。
そうでなくともトラブル発生中に他の変更要素を加えるなんてバカだなぁとしか思えないのに。
質問の仕方がちょっとアレってだけのヤツをネチネチといつまでも・・・
いい加減にスルーしろよ
oracleのデータベースリンクに相当する機能ってありますか?
>>609 これって違うマシンのPostgreSQLサーバにも接続できるんでしたっけ?
>>610 hostやportを指定するから出来るんじゃね?
>>611 これって、dblink用にモジュール追加するんでしたっけ?
ってことは、インフラチームにお伺いを立てることに…
パッケージで入れてるならcontrib突っ込むだけ
ソースからやってるなら頑張ってとしか言えない
でしたっけ
がんばって思い出しなよ
615 :
k:2010/09/08(水) 18:08:59 ID:c+IijDxV
616 :
NAME IS NULL:2010/09/21(火) 12:09:28 ID:Fbol+TGj
っげ、やっと昨日rcを試すために入れたのにwww
618 :
NAME IS NULL:2010/09/22(水) 22:54:22 ID:3dsl4h+O
Postgresqlは、
BEGIN;
SELECT Fields FROM Table;
COMMIT;
と書かなくても
SELECT Fields FROM Table;
と書けば
トランザクションが働きますか?
619 :
NAME IS NULL:2010/09/22(水) 22:56:52 ID:3dsl4h+O
すいません。SELECTじゃ意味ないですね
Postgresqlは、
BEGIN;
UPDATE Table SET Fields = 1 ;
COMMIT;
と書かなくても
UPDATE Table SET Fields = 1 ;
と書けば
トランザクションが働きますか?
>>619 psqlから入力すれば、自動コミットされる。
わかりますた。
9.0のレプリケーションがうまくいかないなぁ。
SELECT pg_start_backup 後の
マスター側からスレーブ側へのデータコピーが、よくないのかな。
スレーブ側が立ち上がらない。
そのへんの定番のやり方ってどっかに書いてないのかなぁ。
>> 622
どんなエラーメッセージが出てる?
626 :
622:2010/09/26(日) 16:23:24 ID:???
>>622 です。
Linux版ではなく、Win版です。
検索して他のLinuxの例を参考にしましたが、
うまくいっておりません。
.confファイル設定のみでは、
普通のスタンドアロンとしてスレーブ側も立ち上がりますが、
SELECT pg_start_backup 後の
マスター側からスレーブ側へのデータコピーをした後、
うまく立ち上がらないです。
■イベントビューア
GMT FATAL: bNt@C"postmaster.pid"????: Permission denied
サーバの起動待機がタイムアウトしました
■pg_log(一部文字化けしています)
LOG: 統計情報コレクタのソケットに接続できませんでした: Invalid argument
LOG: 作業用ソケットの欠落のため統計情報コレクタを無効にしています
WARNING: 誤設定のためautovacuumを起動できません
ヒント: "track_counts"オプションを有効にします。
LOG: データベースシステムは xxxxx にシャットダウンしました
FATAL: データベースシステムは起動しています
LOG: データベースシステムの接続受付準備が整いました。
FATAL: データベースシステムは起動しています
ERROR: "pg_start_backup"また?Eそ?E近辺で構文エラー(?E??位置 1) スチE?EトメンチE
pg_start_backup('SR SNAPSHOT')
627 :
626:2010/09/26(日) 16:46:12 ID:???
>>626 訂正。
■pg_log(一部文字化けしています) は、スレーブ側のログではなく、
コピーした後のログ、すなわち、マスタ側のログでしたので、関係ありません。
イベントビューアのエラーログしか情報はわかりません。
コピー後は、postmaster.pid は、削除してスレーブ起動していますが、
イベントビューアの下記エラー
GMT FATAL: bNt@C"postmaster.pid"????: Permission denied
が問題なのかな。
9.0だとインストール時に作成するpostgresユーザが隠しユーザになったん?
>>627 きちんと設定しろ。全然できてないじゃないか。
Unix版の設定をよく読んで理解したうえでやってくれ。
スレーブ側のログも読めないんじゃどうしようもない。
きちんとやれとか何のアドバイスにもなってないぞw
ログくらい出せっての。
ログないんだからアドバイスしようがないだろ
>>630
最初からログ出せってアドバイスしろよ
なんの実もない煽りだけやんなら目障りだから書き込むな
質問者本人?
質問者以下の回答者
回答者などいない
いるのは質問者と外野のみ
>>622 >>626 の質問者本人ですが、
pg_log配下のログは生成されていないようなので、
それ以前の問題ということだと思います。
イベントビューアログのエラー、
GMT FATAL: bNt@C"postmaster.pid"????: Permission denied
しか手がかりはありません。
Win版で動作確認された方いるのでしたら、その設定例があれば、幸いです。
中国人か台湾人のWin版の成功例があるみたいだから、参考にしてみます。
*.confの設定はわかるけど、中国語の解読が問題だな。(^^;
中国人か台湾人のサイトの例は、参考にできなかった。
>>638 だ か ら
スレーブ側のpostgresql.confにログを出させる設定しないとログがでないんだよ。
もしもマスタのpostgresql.confをそのまま使っていて、ディレクトリまわりを特に変わった設定してないなら、
絶対にログがでるはず。それでログがでないのなら、スレーブが立ち上がっていない可能性がある。
だが、スレーブは立ち上がってpsqlで接続できんだろ?つうことはログがでないのはおかしいのだ。
ログを出すように努力しろとしか言えない。
postgresql.confの設定値のうちディレクトリのどこかの設定がおかしくてマスタとスレーブがごっちゃになってるとかじゃないのか?
もちろんスレーブは起動してないなんてオチ。
質問者本人です。
>>640 スレーブが立ち上がらない、その原因がわからないってことですが。
Program Files\PostgreSQL\9.0\data 配下をマスターからコピーすると、
立ち上がらないということです。
もちろん、*.conf 設定はしています。
コピーしないで、同じ、*.conf 設定だとスレーブは立ち上がります。
>>638 WinOSは何?
postmaster.pidが作れないってことかな?
面倒だからフォルダ全部everyone フルコントロールにして試したらどう?
やっぱ質問の意味なんて全然理解せずに煽ってるだけの奴だったな
PCは別でやってんのかな?
pg_start_backupとか無しで単にコピーしただけのやつは起動できるの?
質問者本人です。
>>644 postmaster.pid は作られていませんね。
マスター側:Win2000
スレーブ側:WinXP
>>646 >pg_start_backupとか無しで単にコピーしただけのやつは起動できるの?
pg_start_backup を実行せず、data配下をコピーしてもダメですね。
ファイヤーウォール
じゃあコピーじゃなくてinitdbしたやつは動くのかな?
>じゃあコピーじゃなくてinitdbしたやつは動くのかな?
動きます。
Posgreのデータ、ディレクトリ構造はよく知りませんが、
data配下をコピーして、動作するものなのですかね?
手詰まりなので、
もう一度、最初から試そうと思っています。
Oracleの開発からPostgreに移行して
「ポスグレ癖あって使いにくい 糞だ糞だ」
と日々つぶやいていたが、案件がSqliteになって
「ポスグレのが良いよ〜 Sqlite糞すぎだよ〜」
と日々つぶやくようになった俺が通りすぎますよ
なんでdata配下をコピーして動くと思ったんだ
MyISAMじゃねえんだから
1. SELECT pg_start_backup('hoge');
2. マスタの$PGDATAをスタンバイにコピー
3. SELECT pg_stop_backup()
という手順を踏まないとスタンバイ動かないよ。
やはり、うまくいかないですね。
しばらく断念です。
8.0からは「data配下をコピー」で動くようになったじゃないか
>>647 PostgreSQL停止時のdataをスレーブに持っていって動かないんだとしたら、
プライマリとスレーブのアーキテクチャが違うのでは、一方が32bitでもう一方が64bitとか
64bitのXPってレアだなw
スレ違いかもしれないんですが、どうにも行き詰まったので質問させてください。
こういう場合のBitmap Heap ScanやNested Loopは、
これ以上早くなりませんでしょうか。
TableA (約213683000行)
Id
Bid
WhereValue
Value
TableB(約9530700行)
Id
Cid
Explain Analyze Select TableB.Cid, TableA.Value
From TableA join TableB
on TableA.Bid=TableB.Id
Where ( TableA.WhereValue = 310 )
and TableB.Id > 0
order by TableA.Value desc limit 1000;
"Limit (cost=106779.51..106782.01 rows=1000 width=12) (actual time=10810.625..10810.719 rows=1000 loops=1)"
" -> Sort (cost=106779.51..106962.79 rows=73311 width=12) (actual time=10810.624..10810.668 rows=1000 loops=1)"
" Sort Key: TableA.Vindex"
" Sort Method: top-N heapsort Memory: 72kB"
" -> Nested Loop (cost=178.31..102759.95 rows=73311 width=12) (actual time=26.717..10695.292 rows=136489 loops=1)"
" -> Bitmap Heap Scan on TableA (cost=178.31..30899.92 rows=8080 width=12) (actual time=26.694..7875.418 rows=34025 loops=1)"
" Recheck Cond: (WhereValue = 310)"
" -> Bitmap Index Scan on bindex (cost=0.00..176.29 rows=8080 width=0) (actual time=21.003..21.003 rows=34025 loops=1)"
" Index Cond: (WhereValue = 310)"
" -> Index Scan using dIndex on TableB (cost=0.00..8.78 rows=9 width=16) (actual time=0.074..0.078 rows=4 loops=34025)"
" Index Cond: ((TableB.Id > 0) AND (TableB.Id = TableA.Bid))"
"Total runtime: 10810.943 ms"
PostgreSQL v8.4.4
set enable_bitmapscan=off;
を実行したあとだと、どうなる?
TableA.WhereValue = 310に該当する行について、ソートのためにValueを調べるのに主な時間がかかっているように見えるので、
可能であれば、TableA(WhereValue,Value)に複合インデックスを作成すれば、大きく改善できるかもしれない。
661 :
658:2010/09/30(木) 11:55:10 ID:???
>659 660 ありがとうございます。
660さんのインデックス(index660)を作成し、
vacuum analyze した後、SQLを実行してみました
この際、各SQLは再起動直後に実行しています。
あまり芳しくない結果ですが、何かヒントになりますでしょうか。
よろしくお願いします。
Explain Analyze Select TableB.Cid, TableA.Value
From TableA join TableB
on TableA.Bid=TableB.Id
Where ( TableA.WhereValue = 310 )
order by TableA.Value desc limit 1000;
"Limit (cost=104496.85..104499.35 rows=1000 width=12) (actual time=16703.301..16703.399 rows=1000 loops=1)"
" -> Sort (cost=104496.85..104677.04 rows=72073 width=12) (actual time=16703.299..16703.345 rows=1000 loops=1)"
" Sort Key: TableA.Value"
" Sort Method: top-N heapsort Memory: 72kB"
" -> Nested Loop (cost=218.57..100545.17 rows=72073 width=12) (actual time=39.108..16576.433 rows=136489 loops=1)"
" -> Bitmap Heap Scan on TableA (cost=218.57..30364.94 rows=7924 width=12) (actual time=20.582..10170.489 rows=34025 loops=1)"
" Recheck Cond: (WhereValue = 310)"
" -> Bitmap Index Scan on index660 (cost=0.00..216.59 rows=7924 width=0) (actual time=13.409..13.409 rows=34025 loops=1)"
" Index Cond: (WhereValue = 310)"
" -> Index Scan using dIndex on TableB (cost=0.00..8.74 rows=9 width=16) (actual time=0.176..0.182 rows=4 loops=34025)"
" Index Cond: (TableB.ID = TableA.Bid)"
"Total runtime: 16703.647 ms"
-- set enable_bitmapscan=off; 実行後
"Limit (cost=106055.45..106057.95 rows=1000 width=12) (actual time=106629.504..106629.604 rows=1000 loops=1)"
" -> Sort (cost=106055.45..106235.63 rows=72073 width=12) (actual time=106629.503..106629.552 rows=1000 loops=1)"
" Sort Key: TableA.Value"
" Sort Method: top-N heapsort Memory: 72kB"
" -> Nested Loop (cost=0.00..102103.77 rows=72073 width=12) (actual time=23.130..106491.917 rows=136489 loops=1)"
" -> Index Scan using index660 on TableA (cost=0.00..31923.54 rows=7924 width=12) (actual time=5.626..10702.449 rows=34025 loops=1)"
" Index Cond: (WhereValue = 310)"
" -> Index Scan using dIndex on TableB (cost=0.00..8.74 rows=9 width=16) (actual time=2.792..2.809 rows=4 loops=34025)"
" Index Cond: (TableB.Id = TableA.Bid)"
"Total runtime: 106629.682 ms"
前回より遅くなっているのは、
再起動直後に実行しなかったため、一部キャッシュが使われたからかと思います。
*(and TableB.Id > 0)については、analyzeするとインデックスが使われるようになったので
削除しました。
index660を作成すれば、Sortじゃなくて、
Index Scan Backwardが使われると思ったんだけど、
そうなってないね。
drop index index660;
して、
create index index662 on TableA(WhereValue,Value) desc;
したらどうかな。
もしくは、
create index index*** on TableA(WhereValue,Value,Bid);
や
create index index*** on TableA(WhereValue,Value,Bid) desc;
あたりで変わるかもしれない。
664 :
658:2010/09/30(木) 15:22:15 ID:???
>662-663
ありがとうございます。
ともかくTableAのインデックスが肝のようですね、
いくつかパターンを試してみてまた報告させてもらいます。
ガンガレ
666 :
658:2010/10/01(金) 17:29:10 ID:???
>>659-665 ご意見ありがとうございました。
最終的には
create index indexname on TableA(WhereValue,Value,Bid);
このインデックスで平均Total runtimeが0.01s以下で収まるようになりました。
ただ、連続でかつ、説明不足で申し訳ないのですが、
本SQLのWhere句については、OR で複数の要素がつながる仕様でした。
例)Where (TableA.WhereValue = 310 or TableA.WhereValue = 9 or ...)
これについては、現在のところ速度改善が行われていませんので、
試行錯誤の上、また、結果を報告させていただきます。
以上、ありがとうございました。
ORするくらいなら二つのSELECT文をJOINで繋いだ方が速い事が往々にしてあるでござる
>>666 (Select TableB.Cid, TableA.Value
From TableA join TableB
on TableA.Bid=TableB.Id
Where ( TableA.WhereValue = 310 )
order by TableA.Value desc limit 1000)
union
(Select TableB.Cid, TableA.Value
From TableA join TableB
on TableA.Bid=TableB.Id
Where ( TableA.WhereValue = 9 )
order by TableA.Value desc limit 1000)
union
...
order by Value desc limit 1000
のようにすれば、いまのインデックスが活用されると思う。
669 :
841:2010/10/02(土) 16:43:57 ID:???
うわJOINじゃなくてUNIONだったハズカシ
Oracleに負けてる機能は?
勝ち負けなんて意味無いだろ。
生きる事とは闘う事だ
シーケンスを作るファンクションを作ろうとしたのですがうまく動かず困っています。
CREATE FUNCTION TEST( SEQ_NAME CHAR(10) )
RETURN CHAR(2)
AS
'
BEGIN
IF( シーケンスが存在しない ) THEN
CREATE SEQUENCE SEQ_NAME START 1;
RETURN ''OK'';
ELSE
RETURN ''NG'';
END IF;
END;
'
LANGUAGE 'plpqsql';
PostgreSQL 9.0.0 今日インストールしたので恐らく最新Verだと思います。
引数で受け取ったシーケンス名で作りたいけど、変数名「SEQ_NAME」でシーケンスが作られてしまいます。
シーケンスの存在有無は調べてみて自分で何とかできそうなのですが、変数名の方はちょっと自分には荷が重いです。
Lvの低い質問かもしれませんがお分かりの方お手数ですが教えてください、お願いします。
675 :
673:2010/10/04(月) 21:37:11 ID:???
>>674 動的SQLで書けばひょっとしたら出来るのかな
今環境ないので試せませんが、明日試して見ます。
ヒントありがとうございます。
・・・ちょっと考えれば分かりそうなことでしたね、考えてるときは動的SQLなんて頭の中から消えてましたorz
676 :
658:2010/10/05(火) 09:20:28 ID:???
遅くなってすみません。
>668の方法ですごく高速になりました。
かかわってくださった皆さん本当にありがとうございました。
677 :
NAME IS NULL:2010/10/05(火) 22:16:41 ID:BAZfEN9h
初心者です。
\pg_logにfunctionの途中経過の値を出力したいのですがどうすればいいでしょうか
例えば$1などのバインドする値など
8.4だけど、9.0にしたらなんか良い事ある?
PostgreSQL 9.0 の本っていつぐらいに出るんですかねぇ。
凄く分厚くなりそうw
>>681 レプリケーション周りは、それだけで本1冊書けるからねい。
なんせ、
>>680の日本PostgreSQLユーザ会のPostgreSQL 9.0の
新機能の説明ページですら、PostgreSQL 9.0本体標準機能で
抜けているところを説明し、それを補完するためにpgpoolだの
Slony-IだのPGClusterだのの説明をしているわけだし。
あれ、こっちかな
初歩的な質問で申し訳ないのですが・・・
pg_dump_allでバックアップしたデータのリストアって、何もせずただpsqlで普通にdumpデータ流しこむだけじゃだめなんですよね?
今あるデータベースの内容に関係なくリストアする(SQLを流し込む)ために、全(各?)データベースを一度削除したり、
キレイにリストアできるようにリストア前の準備をするのが普通(必須)なんでしょうか?
いろんな本やネットを見ても、「dumpしたものをpsqlなりで流し込む」くらいのこといか書いていないような気がして・・・
(実際ただ流しただけでは完全にリストアはされてませんでした。当たり前かもしれないけれど、データベースを全部削除してから流し込んだらうまくいきました)
とんでもない変なこと言ってたらすみません・・・
>>684 pg_dumpall のオプションは何でやった?
まあ普通はinitdb直後に流すだろ
[id]と[text]を持ったテーブルで
textsearch_ja使って全文検索してるけど、
これってcount(id)って早くならないかな。
ginとB-treeの複合indexは作れないよね?
>688
説明足りなかったみたいですみません。
SELECT count(id) FROM T WHERE to_tsvector('japanese', text) @@ to_tsquery('japanese','検索語');
のcountが早くならないかなと
CREATE INDEX idx
ON T
(USING gin (to_tsvector('japanese'::regconfig, text)),
id);
こういうことができたらたぶん早くなりそうなのにと思うけど無理だし
>>689 idがNULLでない行が、わずかしかない場合には、複合インデックスに意味があるが、
そうでない場合には、あまり意味がないと思う。
特に、idがNULLの場合がないとすれば、
SELECT count(*) FROM T WHERE to_tsvector('japanese', text) @@ to_tsquery('japanese','検索語');
と同じことで、複合インデックスはまったく意味が無いと思う。
て
>690
そうなんですか、200万行くらいのテーブルなんですが、
速くするのは無理そうな感じですかね
1万行ヒットする検索とか投げると1分くらい帰ってこないんですが、
企業とかだとこういうのどうやってるんだろうなぁ
OFFSET LIMIT
それは検索に時間がかかってるんじゃなくて、単に転送量が多いから
時間かかってるだけでは?
>>693のように絞ってみては
>693,694
欲しいのはcount(id)なので、limitで絞っても意味ない感じです
explain analyze 見る限り、インデックスの段階で行数わかってるのに
それをそのまま出してくれないので歯がゆい感じです
SELECT count(id) FROM T WHERE to_tsvector('japanese', text) @@ to_tsquery('japanese','検索語');
Aggregate (cost=69934.46..69934.47 rows=1 width=8) (actual time=64261.363..64261.363 rows=1 loops=1)
-> Bitmap Heap Scan on T (cost=11496.91..69892.53 rows=16770 width=8) (actual time=6524.880..63900.754 rows=1133683 loops=1)
Recheck Cond: (to_tsvector('japanese'::regconfig, text) @@ '検索語'::tsquery)
-> Bitmap Index Scan on idx (cost=0.00..11492.71 rows=16770 width=0) (actual time=6356.651..6356.651 rows=1133683 loops=1)
Index Cond: (to_tsvector('japanese'::regconfig, text) @@ '検索語'::tsquery)
Total runtime: 64263.331 ms
LIKE だと何秒?
>696
Likeだと、どんな検索語投げても約50秒ですね。
textserch_jaのインデックス使うと、
該当レコードが少ない場合0.1秒未満で帰ってくるので
さすがにシーケンシャルだと辛い感じです。
1分より50秒の方が速いけど、満足でないということ?
力技だけど、
SSDで解決できそうな気がする
>698
説明の仕方が悪くてすみません。
Like使って検索する場合「検索語A」も「検索語B」...「検索語Z」もすべて約50秒かかりました。
ts_vector使って検索する場合「検索語A」では0.1秒、「検索語B」では60秒かかります。
検索語は大量にあるので、
「検索語A」や「検索語B」のような極端なものばかりでもなく、
ほとんどの検索語は、ts_vectorで検索すると
だいたい10-20秒くらいで実行できます。
それが695のクエリなんですが、
この状態が限界速度なのか、
設定やクエリに工夫がないだけなのか。
そのあたりが知りたい感じです。
詳しくないからわからないけど、ソフト的には限界なのかもね。
PostgreSQLフォーラムに聞いた方がいいかもね。
http://www.postgresql.jp/document/9.0/html/textsearch-tables.html にあるとおり、
ALTER TABLE T ADD COLUMN textsearchable_index_col tsvector;
UPDATE T SET textsearchable_index_col = to_tsvector('japanese', coalesce(text,''));
CREATE INDEX textsearch_idx ON T USING gin(textsearchable_index_col);
として、
SELECT count(id) FROM T WHERE textsearchable_index_col @@ to_tsquery('japanese','検索語');
としたらどうなる?
もし、idはNULLにならないのであれば、
SELECT count(*) FROM T WHERE textsearchable_index_col @@ to_tsquery('japanese','検索語');
とすると、またすこし違うかもしれない。
>>692 よく分からんがl、8.4.5のChangesに
・Fix incorrect search logic for partial-match queries with GIN indexes (Tom Lane)
Cases involving AND/OR combination of several GIN index conditions didn't always give the right answer, and were sometimes much slower than necessary.
なんてのがある。8.4.5で試してみたら?
数年前やったときは、Ludiaを使ったな
いろいろありがとうございます
>699
力技ですが、確かに効果はありそうですね
ディスクとしての信頼性が少し怖いですが。
>702
情報ありがとうございます、
一度実践してみますが、少々時間がかかりそうです。
また、報告に参ります。
>703
ありがとうございます。
バグですか、でもまAndOrも使わないシンプルな状態ですので、
とりあえずは関係なさそうです
>704-705
Ludiaも選択肢だったんですが、出来上がるファイルサイズが馬鹿でかかったのと
昔Tritonn(Mysql+Senna)で同じようにスピードで悩んでたので、
今回はTextSearch_jaにしてみました。
スピードに関してはあまり変わりませんでしたけどw
逐次検索したいのに、そこまで時間が掛かるようだったら、luceneやsphinxなどを使うしかないような。
やっぱり8.4.5→9.0.1でも遅くなってしまうクエリがあるみたいだな
大きなテーブルをSelectすると
ERROR: メモリ不足です
DETAIL: サイズ471989501の要求に失敗しました
っていうエラーが出るんだけど、
これって設定ファイルのどの項目いじれば限界容量上げれますか?
それとも小分けにするしか方法がない?
すこしずつFETCHする以外にないんじゃないかな。
set FETCH_COUNT
だっけ
712 :
NAME IS NULL:2010/10/20(水) 21:30:17 ID:cd5KjE//
初心者です
CSEでpostgresqlに接続するとシステムテーブルが表示されユーザ定義テーブルにアクセスできません。
ユーザ名、パスワード、データベース名は間違いないと思います。
サーバ名をlocalhost
ポートを5432
としているのですが、どうすれば自分で定義したテーブルにアクセスすることができるでしょうか
CSEて、Common SQL Enviroment?
昔はSQL崩しで多少お世話になってた気がするけど、また懐かしいなそれはw
714 :
NAME IS NULL:2010/10/20(水) 22:31:33 ID:cd5KjE//
そもそもなんでCSEなんて使うのか
ODBCドライバどうしてる?
pgAdminIIIじゃいかんの?
>>716 CSE知らないのに明後日なアドバイスするのってどうなの?
>>712 権限設定が不明なんでアドバイスしようがない
>>717 CSE使ってたよ。ODBC接続もサポートしてるからどうしてるか聞いたんだよ
つーか、昔はPostgres対応してなかったし
バージョンの違いでうまくいかないようならODBCはさんで試してみるのも手だよ
720 :
NAME IS NULL:2010/10/21(木) 21:47:40 ID:G5GCo38y
>>716 有難うございます
ODBCだと問題ないのですが、直接つなぐとシステムテーブルのみが表示されるのです
ODBCで済ませることもできるのですが、なぜ直接つなぐと自分が作ったテーブルに
アクセスできないのかと思いまして・・・
cseからCREATE TABLEしたらODBCからは見えるの?
722 :
NAME IS NULL:2010/10/21(木) 22:54:36 ID:G5GCo38y
CSEでのログインロールにテーブル見る権限がないくらいしか
考えられないけど、ODBCの時と別のユーザーにしてないよね?
CSEの未対応とかバグじゃないの。
1.59からぜんぜんバージョンアップしてないし。
自分は、CSE使えなかったから、pgAdminIII を使うようになった。
pgAdminIIIもバグあったり、使いづらい部分もあるけどね。
つか、CSEでも問題なく使えてるけどな。
そして、一応最新版は1.60betaだ。
1.59に差し替えてみたけど、テーブルは見えたな。
各バージョンとか何も書いてないので回答はスルー。
726 :
712:2010/10/22(金) 20:20:58 ID:9SqnX56B
皆さん有難うございます
CSEのバージョンは1.59です
CSEは昔から漠然と使っており、直接つなぐと自分で定義したテーブルを
見ることができないことに釈然としない思いでいました
pgAdminIIIをインストールしてみます
727 :
706:2010/10/26(火) 13:32:24 ID:???
>702
遅くなってすみません。
先日、テーブル構築が終了しました。
結論から申し上げますと、
countに関する速度的な差は、やはり、全権読み込んでカウントしているらしく
あまり変わりませんでした。
ただ、検索そのものについては、速度が上がったと思います。
(行数など100万件ほど増えているので正確な結果はわかりませんが)
いろいろありがとうございました。
728 :
NAME IS NULL:2010/10/29(金) 17:52:05 ID:NxxWaUov
FreeBSDで8.4を使っていますが、psqlとか使ったときのエラー出力とか
logへの出力が文字化けして読めません。
nkfでフィルタさせても化けたまま・・・
createdbするときのエンコードとかはUTF8で正しく設定されており、
クエリーそのもの内容は2バイト文字があっても正常に出てきます。
端末のlocale設定などをいろいろいじってみたんですが何をやっても
ダメで、ググった結果をいろいろ試しましたが何れも効果はなし。
同じような症状が出てる方います?
とか
いろいろ
>>728 FreeBSDのgettextとかlibiconvが正しく使えていないのかも。
FreeBSD+PG+日本語の組み合わせってちゃんと検証されていない気がする。
portsから入れたら普通大丈夫だと思うがソースから独自に入れたのならガンバレとしか
732 :
NAME IS NULL:2010/11/01(月) 13:48:19 ID:5GELdooG
PG8.4の内部って日本語ローカライズされてたっけ?
ubuntu 10.04で使ってるけど、エラーメッセージとかは英文でしか出なかったような
えっ
270 名前:名無しさん@お腹いっぱい。[] 投稿日:2010/10/04(月) 22:21:37
日テレ実況で醜態(ドラマQ10編)
62 名前:名無しさんにズームイン![] 投稿日:2010/10/04(月) 22:12:05.58 ID:upo9Qhxc
前田は絶対可愛くない
69 名前:名無しさんにズームイン![sage] 投稿日:2010/10/04(月) 22:12:09.92 ID:cvvsZm0r
ぶせぇええええええええええええええええええ
70 名前:名無しさんにズームイン![sage] 投稿日:2010/10/04(月) 22:12:10.05 ID:BL/CmGso
目が寄ってませんか?
72 名前:名無しさんにズームイン![] 投稿日:2010/10/04(月) 22:12:10.23 ID:a4h8fkP5
佐藤健のがかわいいとか
80 名前:名無しさんにズームイン![] 投稿日:2010/10/04(月) 22:12:18.74 ID:EViLFotq
パーツ中心顔きたあああああああああああああああ
82 名前:名無しさんにズームイン![sage] 投稿日:2010/10/04(月) 22:12:20.02 ID:IxfDeVPe
近くで見るとブス
83 名前:名無しさんにズームイン![sage] 投稿日:2010/10/04(月) 22:12:20.13 ID:fjGOXJJN
前田って受け口じゃね?
86 名前:名無しさんにズームイン![] 投稿日:2010/10/04(月) 22:12:21.85 ID:dpxDw34Y
顔のパーツが真ん中に寄ってる
95 名前:名無しさんにズームイン![] 投稿日:2010/10/04(月) 22:12:31.98 ID:Y93mNJzt
前田ぶっさいくだなwwwwww
108 名前:名無しさんにズームイン![sage] 投稿日:2010/10/04(月) 22:12:43.51 ID:98l15f6U
不細工やなー
111 名前:名無しさんにズームイン![sage] 投稿日:2010/10/04(月) 22:12:46.46 ID:RRu3ReRp
顔中心によりすぎ
113 名前:名無しさんにズームイン![] 投稿日:2010/10/04(月) 22:12:46.42 ID:/GNRG4ie
女の子のほうがかわいくない
114 名前:名無しさんにズームイン![] 投稿日:2010/10/04(月) 22:12:48.21 ID:Z0SW1Lom
前田淳子より佐藤健の方がかわいいw
116 名前:名無しさんにズームイン![] 投稿日:2010/10/04(月) 22:12:49.15 ID:u+TWJZmG
この前田って娘はどこが可愛いのですか?
120 名前:名無しさんにズームイン![sage] 投稿日:2010/10/04(月) 22:12:51.51 ID:OLrv4ZqS
こいつAKBなのかwwwwwww
121 名前:名無しさんにズームイン![sage] 投稿日:2010/10/04(月) 22:12:51.56 ID:+11HV6fR
パーツ寄り子
>>728 ダンプをリストアしたときに表示される内容が化ける問題と同じような気がする。
表示上は化けててもDBの中身には問題ないけど。
jdbcドライバを見てて思ったのですが、
postgresql-8.3-603.jdbc3.jarのように、完全にDBのバージョンにドライバのバージョンも合わせないと動かないものなのでしょうか?
実際これでPostgreSQL8.4と問題なく通信しています。
>>736 基本的に新しいJDBCなら古いサーバに繋がる。
むしろサーバのバージョンに関係なく新しいJDBCを使うのが良いと聞いたことがある。
ただ、JDBCのバージョン間の挙動に互換性が無い場合があるので、
メンテナンスならドライバのメジャーバージョンは上げないほうが良いかもしれないが。
8.4から9に移行しようかと思うけど
データはそのまま使えないの?
XenのゲストOS(CentOS5.5)上にpostgre7.4.30を入れてみた。
postgreSQL7.4.30をtcp/ipを使用して接続しようとしてみるけど、ポートが開放されてないといわれる。
ポート番号を5433に変更して起動したら、netstat -lでは開放されているように見える。
でも、外からは接続できない。
ポート番号を5432に戻して起動したら、やっぱりnetstat -lでは開放されているように見える。
でも、外からは接続できない。
ファイアーウォールは無効状態だし、postgresql.confもpg_hba.confも何度も見直した。
外から繋ぐ時も、ポート指定している。
何か設定が間違っていないか、アドバイス頂きたい。
>>741 素人的な書き方ですまないけれど、
クライアントホストからネットワーク的に到達できているか確認する(pingとか?)
listenしているnicに到達しているかをみてみる(0.0.0.0でlistenしているなら関係なし)
SELinux、ipchainを改めて確認する
あたりを、やってたとしても、改めてやってみてはどうでしょうか。
あと、ゲスト上でpsql -p 5432で繋がるか確認してみるとか。
postgresql.confのlisten_addresses = '*'じゃないの?
ちゃんと *:5432 で listen してるか確認して、
telnet localhost 5432 が繋がるか確認して、
telnet (自分のIP) 5432 が繋がるか確認して、
最後に外部から telnet (ターゲットのIP) 5432 が繋がるか確認すれば、
大雑把に切り分けられるんじゃないだろうか。
SELinuxに一票
ネットワークまわりだと、知っているのは、iptables --list の確認や
route みたりifconfigでGATEWAYが設定されているか
ping , tracepathの疎通や
ssh やhttpサーバ動かして繋がるか
ぐらい
selinuxは、1番影響がないのはpermissiveかな
自身から、psqlで127.0.0.1やethのIPアドレスで繋がるの?
748 :
741:2010/11/19(金) 23:10:33 ID:???
皆のおかげで、原因がみつかった。
postgreSQLの起動オプションに「-h 127.0.0.1」なんて爆弾を仕込んでやがった
Pacemakerで起動してたから、起動オプションまで頭が回らなかったよ。
みんなありがとう。
爆…弾…?まるでその設定が悪であるかのような。。。恐ろしいことをいうね。
むしろ741が爆弾。
そんなの netstat の出力見たら一発じゃねーか。やっぱり 741 が爆弾か。
それほど741を責めることもないと思うけどな。
勝手に設定を上書きする Pacemaker の文化?作法?は、
あんまり褒められたものではない気がするぞ。
ごめん意味がわからないんだが、外のマシンからpsql -h <server>とやるのに
強制的に「-h 127.0.0.1」となるような設定がされているの?
「これらの列の要素は重複を許さない」
って制約はどう設定するのですか?
列1 <> 列2
758 :
756:2010/11/23(火) 04:23:32 ID:???
行単位でです
o1 o2 o3
--------
2 2 9
入力時点で、ダメ!みたいな
>>757 列が2個の場合それでいけますね
n個の場合どう対応すれば良いのでしょうか?
?
列1 <> 列2 and 列2 <> 列3
>>760 列1 <> 列2 and 列1 <> 列3 and 列2 <> 列3
が正しいと思います
列が少なければ根性で入力可能です
しかしもっと増えるとリーグ戦の表の半分の入力回数になります
これはO(n^2)だと思うのでちょっと現実的とは言えません
設計がゴミ
その列に何が入ってんの?ってか、途中から名前なくなってるけど質問者でいいのかな
764 :
756:2010/11/23(火) 08:05:45 ID:???
>>763 はい。
LOTO6の出玉の記録を(順番付きで)とってます
同じ回で同じ番号は出現し得ませんよね
少なくともダブった入力ミスを省きたくて
まあボーナス番号含めて7つですから
根性で実装できちゃったんですけどね
スマートにやりたいなと
抽選通番、出た順の連番、出た数字
pkey(抽選通番、出た順の連番)
unique(抽選通番、出た数字)
766 :
756:2010/11/23(火) 09:01:09 ID:???
>>765 inning o1 o2 o3 o4 o5 o6 bonus
506 27 39 21 11 5 37 26
みたいなテーブルなんですが
出た順の連番フィールドと出た数字フィールドの違いが判りません><
506 1 27
506 2 39
506 3 21
506 4 11
506 5 5
506 6 37
506 7 26
意図があって非正規化してるならそれでもいいけど、そうじゃないならとりあえず正規化してみたらどう、という意見でした。
769 :
756:2010/11/23(火) 09:21:23 ID:???
アナル!そこまで冗長に作るんですか!?
inning out result
506 1 27
506 2 39
506 3 21
506 4 11
506 5 05
506 6 37
506 7 26
inning × out をプライマリキーにすると
inning × result をユニーク制約にすると
あ、データベース触るの初めてです^^
770 :
769:2010/11/23(火) 09:26:02 ID:???
おkコツが分かったお〜〜(^ω^)サンクスコ
アナル?
772 :
756:2010/11/23(火) 09:31:37 ID:???
524行も打ち込んだのにこれを
正規化するのかぉ(´;ω;)
うまく楽する方法ありますか?
773 :
756:2010/11/23(火) 17:29:15 ID:???
ふひぃ〜〜(^ω^;)
やっと正規化できた
VIEWとやらを作ってからINSERTで流し込んだ
英語マニュアルと悪戦苦闘して
pg_enumとかも迷い込んで
大冒険だった
取り敢えず助かりました
あり^^
初心者にありがちなExcel感覚でテーブルを直接エンティティに対応付けただけのDB設計。
さてどうなることやらと眺めていたけど、正規化の指摘で素直に理解できてるじゃん。
珍しく好感の持てるヤシだった。DBは初めてかもしれんが素人じゃないね。(チラシ裏柿
select insertですんだんじゃないか?というのはさておき、おつかれさん。
せっかくPostgreSQLなら配列という手もあった気もする。
配列っていつも使おうとしてやめるんだけど、みんな使ってるのかな。
今回のみたいなユニーク制約もつけられるのかな。
素人ならなおさら配列なんて使うべきじゃないな。
配列ってCOBOLのOCCURRENCESみたいで嫌w
縦横の表が頭にイメージされちゃってて、
配列っていうイメージがすぐに沸かない。
よって、使った事ないな。
(PHPで配列型をハンドリングできるのかな・・・)
配列使い始めたら、ERがテーブル内に出来上がって、それなら
ORDB•XMLDB•ドキュメント指向KVS(MongoDBやBigTable?)とか使った方がいいんじゃね?ってなりそうだな。
でもEnumとかは、使いたい気がする。
配列速いという話も見かけたので、局所的に注意深く使う程度がいいのかなー
すみません教えてください。
date型式のデータを取得すると YYYY-MM-DD とハイフンでつながれますが、
これをデフォルトで YYYY/MM/DD とスラッシュで区切りたいのですが、
どのように設定したらよいのでしょうか?
>>784 SET datestyle TO SQL,YMD;
で、いけるかと思ったが、手元のバージョンじゃ11/30/2010のMDYで表示されたわ。
postgresql.confを書き換えたらYMDで表示されるのかな?
datestyleでググって、あとは試してみて。
PostgreSQL 8.4を使っています。
一台のサーバで何人かで各自好きに独自にDBを作っています。
psql -lすると、全員のが見えてしまいますが、
自分が作ったDBだけ見えるようにするにはどうしたらいいでしょうか。
>>787 DBのインスタンスを分けないと無理。
ログインはできないはずだから、DB名が見えるのは気にしないのが吉。
フリーのDBで一番マニアックな要求に堪えるのはPostgreSQLで良いんですよね?
あなたがそう思うならそれでいいんじゃないすかね。
マニアックな要求が何かよく分からないからなんともいえないというのが正解では?
PostgreSQL 9.0.1のインストールの途中で止まってしまいます。
インストールの最後の
「クラスタの初期化中...数分お待ちください」
の箇所です。
Ver 8.4.5のインストールは問題なくできます。
解決方法が分かる方いましたら教えてください。
なお、Cドライブのスキャンディスクは行いました。
そうですか
それは大変ですね
794 :
792:2010/12/02(木) 06:42:26 ID:???
792ですが、
>Ver 8.4.5のインストールは問題なくできます。
今、再度やったらインストールできなくなっていました。
以前は出来ており、アンインストールしてからインストールしたら
できなくなってしまったようです。
申し訳有りませんが、792の質問は撤回し、
PostgreSQLをアンインストールして再度インストールすると、
インストールの最後で止まってしまう。
この解決方法が分かる方いましたら教えてください。
chkdsk /Fは?
エスパーだけどOSのポスグレのアカウント削除しろ
ああなんか見覚えあるなその事象
798 :
NAME IS NULL:2010/12/02(木) 16:58:16 ID:TJNe4aq7
WindowsのPostgreSQLにあるデータをLinuxのPostgreSQLに移したいのですが、どうすればよいでしょうか?
データベースのサイズは100GBほどです。
dump restoreじゃだめかな。
800 :
NAME IS NULL:2010/12/02(木) 17:43:53 ID:TJNe4aq7
それでやります。
PgAdminIIIからダンプ開始しました。ありがとうございました。
なんとなく気持ち的にはlinux側からネットワーク越しにwindowsのをdumpしたいかなぁ。
てか、100GBっておおきいね。ラージオブジェクトとか使ってるのかな。
803 :
794:2010/12/04(土) 13:03:16 ID:???
何度もすみません。
PostgreSQL 8 をアンインストールして再度インストールすると、
インストールの最後「クラスタの初期化中。。。」で止まってしまいます。
(Windows版です)
上(795, 796)で教えていただいた、スキャンディスク・デフラグ・Postgresアカウントの削除
をやってみましたがダメでした。
何か解決方法をご存知の方いましたらご教授お願いいたします。
試す価値のありそうなアドバイスなどでも結構です。
よろしくお願いします。
>>803 よくある事象なら煽りでもヒントくらいのレスはある。
それが無いなら余程レアケースなんだろ。
レアケースの場合は詳細な環境を書いてもレスは付かない事あるんだから、
そんな質問の仕方でレスが付くと思わないほうがいい。
>>803 DOS窓から直接initdbしたら何かエラーメッセージが出てくれるんじゃないかな?
Windows(の何?) で動かすときのアカウントに注意な。
インストールディレクトリにゴミが残ってて再構築に失敗するんじゃないの?
別ディレクトリにするか、削除してしまうとか。
あとはPostgresのバージョンを落としてみるとか、いっそ7を試しにいれてみるとか。
>>803 よくあるのは「管理者として実行」してないことかな。
古いインストーラだと自動昇格してくれなかった気がする。
あとは postgres ユーザのパスワード違いとか。
「クラスタの初期化中」ってことは、バイナリはインストールされている
はずだから、
>>805 のとおり手作業のinitdbでチェックすると良さげ。
Windowsで7入れるとかネタだろ
初心者におすすめの書籍おせーて
811 :
803:2010/12/10(金) 05:06:38 ID:???
>>805, 806, 807, 808
レスありがとうございました。
教えていただいた事を参考にさせていただき、次の事をやってみました。
・HDのチェックディスク、最適化。
・postgresユーザの削除。
・PostgreSQLディレクトリの削除
・PostgreSQLレジストリの削除(2箇所)
・PostgreSQLデータディレクトリを別の場所を指定
・AVG Freeというアンチウイルスソフトをアンインストール
これらをやって再度インストールしてもダメでした。
インストールで止まっている最中initdbしてみると、
次のエラーメッセージを表示します。
データベースシステム内のファイルの所有者は"Owner"ユーザでした。
このユーザがサーバプロセスを所有しなければなりません。
データベースクラスタはロケールJapanese_Japan.932で初期化されます。
(WindowsにはOwnerユーザでログインしています)
解決方法お分かりの方、いらっしゃいますか?
WindowsXP、ファイルシステムはNTFS、スタンドアロンです。
よろしくお願いします。
(何度もすみません)
サービスが残ってたりしない?
ファイル名を指定して実行で「services.msc」と入力して、サービス一覧を確認してみて。
>>811 本当にPostgreSQL関連のユーザが残っていないか、
コマンドプロンプトでnet usersして確認してみ
レスありがとうございます。
>>812 サービスは残っていません。
>>813 net users でpostgresは存在しません。
(インストールエラーの度にnet user postgres /delete で消しています)
手詰まりで困っています・・・
仮想マシンいれてLinuxにPostgresいれれw
どうせWindow版なんてまともに動くとは誰も期待してないんだから
インストール出来ないのも親切設計くらいに思ったほうがいい。
エラーメッセージをそのまま解釈すると、
PostgreSQLデータディレクトリのファイルの所有者はOwnerだけど、
postgreSQLのサーバ自体はそれ以外のユーザ(administratorなど)で起動しているんじゃないの?
さてオチは何だろうね。
同じやり方で別のPCにはインストル出来るのかな。
もうVMware入れてLinux入れてその中に入れれば?
819 :
NAME IS NULL:2010/12/10(金) 18:49:45 ID:v6WE8fXX
集約関数結果の変遷のクエリはどうすれば良いですか?
id毎にそれまでの平均を出させたい等
id point
1 5
2 10
3 7
4 6
id avg
1 5
2 7.5
3 7.3
4 7
postgres をインスコして初めてのテーブル定義で pgAdminIII が、
"作成先のスキーマが選択されていません"
と言います。publicスキーマは削除して別個に作成してます。
どうすればよいのでしょうか?
822 :
819:2010/12/13(月) 07:45:37 ID:???
>>821 ありがとうございました^^
SELECT id, avg(point) OVER ( ORDER BY id )
FROM the_table;
何でWindow functionって云うんですか?
pgAdminって管理者権限で使うのですか?
データベースのユーザとしてOSにログインしてる時
サーバのリストが出てこないんですが
管理者権限でログインしてる時はサーバ表示問題無いんです
Windows2000 SP4です
Windows版を使ってみたけど、、、エラーメッセージとか酷すぎ。
Linux版は知らんけど、これではとても「商用に」なんて言えたものではない。
んでお前はなんか貢献してんの?
せめてそのひどいと思ったエラーメッセージを教えてあげてくれ。
メッセージが「読めない」人なんだろ.
エラーメッセージがどうひどかったんだろ。
なぜ商用になんて言えないんだろ。
メッセージが英語だったとか文字化けしてたとか言うオチなしな
文字化けします
pgAdminのSQLのエラー時レスポンスとか
ステータスバーのコメントは正しく表示されますのでまあやれてますが
テスト環境でWindows版使ってるが文字化けなんかしたことねえな
と言うか文字化なんて7.xの頃にSoralisでしか経験したことねぇ
pgAdminIII でテーブル作ると、
「クエリーは、350 ミリ秒で結果なしでうまく帰りました。」
とか表示されるのは単語文節訳を組み合わせてるからか?
日本人は見た目や形で判断し易いから、いくら中身が良くてもメッセージやヘルプが貧弱だとそれだけで”選考外”。
メッセージとか、英語のまま使えよw
見た目で選ぶならゾウさん一択でしょ。mysqlがキリンさんを採用したらあぶないけど
9.0 Win版のレプリケーションの設定方法を紹介しているサイトがありますかね?
ひょっとしてenumと
独自にIDと名前で管理する事って同じ?
>>837 効率的には同じ。管理テーブルとJOINしなくても、
名前を自動的にIDに変換してくれることが利点だと思う。
あり^^
840 :
811:2010/12/18(土) 13:21:01 ID:???
以前、PostgreSQLをインストールできず質問した者です。
解決しましたので報告します。
【症状】
PostgreSQLのインストールの最後に、「クラスタを初期化中・・・」と
表示したまま停止してしまう。
【原因】
.BAT の拡張子の関連付けに不具合があったためです。
通常、.BATを実行(エクスプローラから.BATをダブルクリック)すると通常DOS窓を開いて
バッチファイルを起動しますが、何もせずに終了してしまう、という状態にWindowsレジストリが
設定されていました。
【対策】
Windowsレジストリを編集し、正常にバッチファイルが起動するようにしました。
【補足】
.BATを実行するとエディタが起動するなどになっていれば直ぐに原因は判ったのですが、何も
せずに終了してしまっていたので、不具合の特定が遅れてしまいました。
お騒がせしてすみませんでした。
この苦労がPostgreSQLの普及や皆さんのお役に立てればうれしいデス。
解決おめでとう。
それはさすがにエスパーできんかったw
なんでそんなことが起きてんだ。
クラックされてないか?
凄い設定だな
「assoc .bat」でググると、(PostgreSQLと無関係に) そういうことがあるようだ
ちなみに、正常な場合はこうなる:
C:> assoc .bat
.bat=batfile
C:> ftype batfile
batfile="%1" %*
pgAdmin3 で以下のようにテーブルの列にコメントをつけようとすると、
ALTER TABLE tbl_A
ALTER COLUMN "列名1" SET STORAGE ;
COMMENT ON COLUMN tbl_A."列名1" IS 'コメント列名1';
Line2: ALTER COLUMN "列名1" SET STORAGE ;
^
などとエラーになりますが、なぜでしょうか?SQL文を書き込むのではなく、
列のプロパティ・ペインに書き込んでの変更です。
pgAdmin使ってる人はじめて見た。
そんなにpgAdminIIIダメか?
TeraTerm
俺もpgAdminIII使うよ。
>>847は揚げ足取りかも。
でも、コメントつけるときにそのようなエラーに遭遇したことはないかなー
pgAdminIII最強だろ。
>>847 おまい何つかってんだよw
晒してみろカス
psqlとか言うなよハゲ
phpPgAdminとか言うなよ低脳
CSEとか黒猫とかいうんじゃないの。
もしかしたらアクセス。
俺EclipseのDBViewerかCSE使ってる。さすがにCSEはそろそろなーと思うんだけど
DBViewerはシリアルとか見れないからなあ。
pgAdminはバックアップなんかも簡単にできて機能は最強だと思うけど、
複数DBに繋いだときにSDIだとどのウィンドウのがどのDBのかわかりにくくて
いまいち馴染めないなあ。
>>854 どのDBに接続してるか出てると思うけれど、見てる画面が違うかもしれないのでなんとも。
CSEはPostgreSQLじゃまともに動かんぞ
そう?1.60ベータちゃんと動いてるけど
Oracle使ってもMySQL使っても同じインターフェースってのがいいんだがなあ
SI Object Browserがもうちょっとやる気出してくれたら
ODBCじゃなくてか?
>>858 CSEの話?
857とは別人だけど、1.60beta+libpq.dllで問題なくDBMS:PostgreSQLにて
8.4.6や9.0.2相手に使えてますよ。
SELECTやINSERT流すだけなら使えるよCSEでも
それ以上の事できないけど
862 :
846:2010/12/21(火) 09:07:31 ID:???
>>846 ですが、以下のようなエラーが表示されます。
ERROR: ";"またはその近辺で構文エラー
LINE 2: ALTER COLUMN "全地公団コード" SET STORAGE;
^
********** エラー **********
ERROR: ";"またはその近辺で構文エラー
SQLステート:42601
ちなみに、pgAdminIIIで列にコメントを加えようとしたときの
列プロパティ変更ウィンドウ[SQL]タブには、以下のSQLが表示されてます。
ALTER TABLE scm_zip.tbl_import
ALTER COLUMN "全地公団コード" SET STORAGE;
COMMENT ON COLUMN scm_zip.tbl_import."全地公団コード" IS '全国地方公共団体コード';
863 :
846:2010/12/21(火) 09:14:18 ID:???
P.S.
エラー3行目の”^”は”コード”の”コ”の下に表示されてます。
データベースは
エンコーディング:utf8
コーレーション:Jpanese, Japan
文字型:Jpanese, Japan
です。
>>862 サーバ(PostgreSQL)のバージョンは?
少なくとも7系列だったら、そのSQL文は通らないと思うから
対応バージョンがあってないんだと思う。
865 :
846:2010/12/21(火) 15:13:26 ID:???
ありがとうございます。バージョンは、
PostgreSQL:9.0
pgAdminIII:1.12.1
です。
以前からとある理由でINDEXの再作成(DROP>CREATE)を定期的に行っていたのだけど、
pgpoolによるレプリケーション+負荷分散の環境にしてから、
DROP INDEXがwaitingで止まったまま動かなくなるようになった。(´・ω・`)
解決方法知ってる方居ましたらよろしくお願いします。
867 :
866:2010/12/21(火) 17:01:12 ID:???
postgresのバージョンは8.2です。
REINDEXにしてみるとか。
869 :
846:2010/12/21(火) 23:13:35 ID:???
以下の1行 SQL 直打ちで、すんなり列コメントを追加できましたが、不可解。
COMMENT ON COLUMN scm_zip.tbl_import."全地公団コード" IS '全国地方公共団体コード';
>>869 PgAdminの日本語処理(Shift_JIS)に何らかの不具合があるのかな。
サーバ側で全部ログに吐かして、どのようなSQLが発行されていたか
確認したらわかったかも。
pgAdmin使ってる人はじめて見た。
おれは2回目。
テーブルの定義などは便利だと思うけどな > PgAdminV
定義や修正のSQLなんかも見れるから、テスト環境で確認したら
そのSQLを本番サーバのpsqlへ流し込み。
おかげで、ALTER文なんて全然覚えていないや。
クエリーツールがpsql見たいにTabキーで補完してくれると楽なんだけど。
精一杯好意的に受け取って、補完できるけど動きがイマイチよくないよねということだろうか。
>>873 pgAdmin も Ctrl+スペース で補完してくれる。
個人的にはpsqlのほうが好きだけど。
>>875 おっ、出来た。サンクスです。VS等のエディタと同じなのになぜ気づかなかったのだろうw
でも、テーブル名やカラム名は一覧が表示されるが、マウスでクリックしないと選択出来ないのね。
選択肢がひとつしかないところまで打つと残りは補完してくれるのだけれど。あぁ、psqlと同じなのか。
>>876 一覧が表示された後、スペースで選べなかった?
自分もよくEnter押して、失敗するけど。
>>877 何度もスマソ。選べました。
手慣れている分だけpsqlの方が小気味よく使えそうだが、
補完してくれるのならPgAdminVにどっぷり浸かってもいいな。
いや、Tabで補完できるでしょ
>>879 psqlがTabで補完出来るように、PgAdminVのクエリーツールでもできたらいーな。
って話しです。(
>>873からの流れで)
PgAdminIIIのクエリツールでTab補完できるけど特殊なんだろうか。
俺のは、psqlもPgAdminIIIもTAB補完なんてしてくれないぞ!?
設定とかあるの?
Postgresql8.4なんですが
shared_buffersに1GB以上指定すると
起動しなくなります。
参考サイト見たら3GBとか設定されてるのをみるので
1GB以上も可能なんですよね?
>883
shmmaxじゃね?
>>883 俺のもそうだよ。
物理メモリのサイズじゃないの?
32bitならそんなもんじゃない?
>>882 テーブル名とか、where句のカラム名とかでできると思うよ
888 :
883:2010/12/23(木) 00:25:38 ID:???
>884
>885
説明足りませんでした。すみません
Windows 2008 server R2 64bit
搭載メモリ16GB
タスクマネジャーで通常時の消費メモリ2G弱なので
足りないってことはないと思います。
ってWindowsか。ごめん。
Windows32ビット版はメモリアクセスが遅いの?
なにと比べてだろう。
Linux32ビット版と比べて
どっからの情報ですか
>>888 OSは64bitでも、PGは32bitなんじゃ?
それだと1-2GBで上限にひっかかるのも無理も無い。
9.0から64bit版があるから、乗り換えてみたら?
897 :
NAME IS NULL:2010/12/23(木) 04:48:52 ID:c+uJyMV9
>>895 All evidence I've seen points to that
you should have shared_buffers
as *small* as possible on win32,
because memory access there is slow.
>>897 Who does write this ?
900 :
NAME IS NULL:2010/12/23(木) 17:09:37 ID:AsyKUZ+j
テーブルに格納されているデータがいつ頃INSERTされたか知ることはできますか?
2ヶ月ほど前にINSERTされた可能性が高いのですが、ログはもう流れてしまっており、
なんとか確認できないか手段を探しています。どうかよろしくお願いします。
そんなこともあろうかとタイムスタンプを付けておいたから大丈夫
902 :
NAME IS NULL:2010/12/23(木) 17:25:11 ID:AsyKUZ+j
タイムスタンプ?
そんなのが全てのテーブルの各カラムについてるんですか?
ほら、そのレコードの最後のカラムに「最終更新日」があるだろ?
904 :
NAME IS NULL:2010/12/23(木) 17:32:56 ID:AsyKUZ+j
ええっ、英語の名前を教えてください。
検索しているのですが、分かりません。
デフォルトでは「最終更新日」列なんて無いよ。
そういう目的のために DEFAULT CURRENT_TIMESTAMP な列を余分に
持っておく設計もあるとは思うけど。何も準備していなかったなら、
残る手段はテーブルのファイルの最終更新時刻を見るか、
xmin を見てトランザクションIDから判断するくらいだろうか。
>>899 Rainer Bauer did write.
>>905 それ、最終更新日に使えるの?
それともnull不可、default指定した列をnullでupdateするとdefault入るのかな。
nullでupdateしたらnull
最終更新日カラムをテーブルの最後にもつのが普通だと思ってたけど、
web屋から入ってきた人にはそうでもないんだろうなあ
普通は「登録日」と「更新日」を確保するんじゃないか?
>>908 not null制約つけてるからnullにはならないと思うんだけど。普通にエラーかね。
登録日ならdefaultで指定してもいいかもしれないけど、
>>909のように登録日と更新日を
保持するなら両方ともロジックから設定したほうが分かりやすくていいかな。
web屋だけど。
Webシステムでも最終更新日は普通持つ
Webフレームワークでもデフォでそういう機能あるのが殆ど
RailsとかCakePHPとか
912 :
888:2010/12/24(金) 13:25:06 ID:???
なるほど、Postgresqlが32bitだからですか
textsearch_ja使いたいって理由で8.4使っていますので、
解決は無理そうですね。
ありがとうございました。
914 :
888:2010/12/24(金) 17:16:21 ID:???
すみません、URLの先読めてませんでした。
小さいほうが有効なんですね。
ありがとうございました。
小さい方が有効なのとそもそも設定ができないのとでは
意味合いが違うからPostgresが32bitだからでいいんじゃないの?
916 :
初心者:2010/12/27(月) 08:19:08 ID:IG6MxVWP
一度決めた列挙型名を変更するクエリを教えて下さい
917 :
初心者:2010/12/27(月) 08:24:06 ID:???
自己解決しました
ALTER TYPE name RENAME TO new_name;
918 :
NAME IS NULL:2010/12/30(木) 20:23:23 ID:NdZiDxrg
複数のPCから頻繁にアクセスがあるDBで、印刷や閲覧のみの用途に一時テーブル作ってるが変かな?
一度テーブル作ったらしばらく使いまわしてよくて、かつリクエストが結構頻繁にあるならいいんじゃない?
閲覧のリクエストの度に一時テーブル作る外注ならクビにするけど
920 :
NAME IS NULL:2010/12/30(木) 20:53:47 ID:NdZiDxrg
じゃ俺クビだわ。
で、どうするの?
CREATE VIEWとか?
リクエストの度にCREATE VIEWもクビだろw
922 :
NAME IS NULL:2010/12/30(木) 21:16:43 ID:NdZiDxrg
じゃ、どうすん?
何十年前の人について仕事覚えたんだ
アプリ側のメモり内ですきなようにしろ
そんな事でいちいちDBサーバーのI/O負荷あげんな
DBサーバーはスケールアウトが難しくてスケールアップに
なりがちだからコストが高くなる。DBにはなるべく本業以外させない
924 :
NAME IS NULL:2010/12/30(木) 22:12:41 ID:NdZiDxrg
自分の考えで
仕事じゃないんです
ただ、普通はどうしてるのかなと思いまして
CREATE TEMPORARY TABLEでいいんじゃないの
わっふるわっふる
>閲覧のリクエストの度に一時テーブル作る外注ならクビにするけど
俺もこれやってます。
あらかじめビュー作っておく方法もあるけど、DBへの負荷としては一緒だと思う。
928 :
NAME IS NULL:2010/12/31(金) 08:51:05 ID:Ws6muYWR
複数のセッションから同時で作成されるんでなければ
TRUNCATEすればいいんでないのかい
同時に作成されるんならしょうがないのかな、
参照用のテーブル先につくっとけないのかね?
大差ない
930 :
NAME IS NULL:2010/12/31(金) 09:37:03 ID:Ws6muYWR
>>929 ディスクIO的には大差ないのはわかる
テーブルの生成を常に行わないって意味で書いたんだけど
結局こんなこと考えるのは設計が悪いだけだと思う
>結局こんなこと考えるのは設計が悪いだけ
いろいろなシステムを手がけると、いろんな問題が出る。
設計が悪いだけだと断じる貴方は、よほど実務経験が乏しいようだ。
932 :
NAME IS NULL:2010/12/31(金) 15:17:44 ID:Ws6muYWR
>>931 つぎはぎだらけでそうなるなら致し方ない面もあると思うけど
結果としては設計が悪いに帰着すると思うが
いかがか?
なんで設計の悪さを認めようとしないのか不思議だなw
934 :
NAME IS NULL:2010/12/31(金) 19:21:18 ID:zJ6oCjND
そんな設計の良いのなど見たこと無いが
935 :
NAME IS NULL:2010/12/31(金) 19:29:00 ID:Ws6muYWR
いや、あの
設計が悪いから、直せる部分ごっそり直せるんだったら直す
それができないなら次善の策を考える
それだけだと思うけど
SERIAL型をもつテーブルにレコードを挿入したとき、
挿入時に自動付番されたSERIAL型の値を得るにはどうしたらいいの?
エロい人教えてください!
937 :
NAME IS NULL:2010/12/31(金) 22:26:24 ID:zJ6oCjND
シーケンス使うとか?
SERIAL型で default を指定した場合、裏で nextval() が自動的に呼ばれるけど
普通のシーケンスと同じように currval() で取得できるよ。
もしくは、INSERT 〜 RETURNING を使えるなら、1回で済む。
939 :
936:2011/01/02(日) 06:41:32 ID:???
>>938 INSERT 〜 RETURNING という方法があるんですね。
素晴しい!!!
さっそくマニュアルで調べました。
エロい人ありがとう!!!
.NETのTableAdapterでPostgreSQLに接続したいんですが、
良い方法を知っている方いますか?
要件は
・Win7 64bit
・.NET 2.0
・DataGridViewや各種コントロールにPostgreSQLのデータ(複数テーブル)を以下のように簡単にバインドしたい
(1)Visual Studioのデータソース構築ウィザードでDataSetを自動生成できる。
(2)その時、テーブル間の参照制約に従って、DataSet内にリレーションが自動生成される。
(3)自動生成されたDataSetを、データソース構築ウィザードで編集できる。
というものです。
SQLServer2005 Express(SqlClient)やmdb(OleDb)ではできています。
Npgsqlでは、ウィザードのデータソースの選択肢の中に出てこないため、(1)の時点で挫折しました。
NpgsqlはTableAdapterに対応していない、といった記述も見かけました。
pgODBC経由では、(1)はうまくいったのですが、
(2)リレーションが生成されず、
(3)データソース構築ウィザードで再編集しようとすると、
「データセットの要素[テーブル名]は、データベースにない列を参照しています。」と出て、うまくいきません。
pgODBCに限らず、ODBC経由だとmdbなどでもそうなってしまうようです。
941 :
NAME IS NULL:2011/01/02(日) 22:46:38 ID:pX9o7PmA
>>940 初めてC#で開発しましたが
期待を裏切らず、ほぼウィザードは使用できません
・Win7 32bit
・.NET 2.0
・DataGridViewや各種コントロールにPostgreSQLのデータ(複数テーブル)を以下のように簡単にバインドしたい
(1)ウィザードなんて使えないでしょう
private NpgsqlDataAdapter da = new NpgsqlDataAdapter();
private DataSet ds = new DataSet();
private void FormNumbers_Load(object sender, EventArgs e)
{
da.SelectCommand = new NpgsqlCommand
{
da.SelectCommand = new NpgsqlCommand
(
"select"
+ " id"
+ ", name"
+ " from"
+ " users",
m_conn
);
da.Fill(ds, "users");
手書きでどうぞ。
(2)自動生成されません。
データセット.Relations.Add
(
new DataRelation
(
"リレーション名","データセット.キーカラム名","データセット.キーカラム名"
)
);
(3)自動生成されたDataSetを、データソース構築ウィザードで編集できる。
上記のとおりで×
あるレコードが存在するときは、そのレコードをUPDATE
レコードが存在しないときはINSERT
をしたいです。
SELECTして、結果セットがあればUPDATE、なければINSERT
をすればよいのですが、もっとスマートに行う方法は
ありますでしょうか?
1つのSQLでこれが実現できれば、TRANSACTIONでロックする必要が
なくなるため、アプリのコードが単純化され非常にありがたいのですが・・・
よろしくお願いします。
SELECT で特定できるなら、いきなり UPDATE に WHERE つけて実行すればいいんじゃない?
それで存在しない場合は単に UPDATE 0 ってなるだけだから、それを検出して INSERT。
これを 1回で実行できる手順があるなら、俺も知りたいw
いい加減 MERGE INTO を正式SQLに採用して欲しいもんだ
最近の規格(SQL:2003?)で採用されてるよ。3大商用DBMSは対応済み。
insert update postgresql で検索するとストアドプロシージャがでてくるな
こういうプレゼンに書かれるってことは経験的に実装は早くて5年ごってとこだなw
951 :
942:2011/01/04(火) 18:17:02 ID:???
>>943-950 レスありがとうございました。
SQL規格にMERGEコマンドというのがあるんですね!
PostgreSQL 9.1α4に実装されるとのことですが、PostgreSQL 9.1正式版までは
本番には使いたくないので、ストアドで実装することにします。
皆様ありがとうございました。
>>940-941 Npgsqlって、DbAdapter.Update()のとき
.NET側でDateTime型(PostgreSQL側ではdateやtimestamp型)
の列があって、かつ、値が入っているときは
InvalidCastExceptionで実行エラーになるね。
それだけでもうNpgsqlは使えないという結論になりました。
>>952 da.UpdateCommand = new NpgsqlCommand
(
"update table set"
+ " id=:id"
+ ", time_stamp=current_timestamp"
+ " where"
+ " id=:id",
m_conn
);
da.UpdateCommand.Parameters.Add(new NpgsqlParameter(
"id", NpgsqlTypes.NpgsqlDbType.Integer, 0,
"id", ParameterDirection.Input, false, 0, 0,
DataRowVersion.Current, DBNull.Value));
da.UpdateCommand.Parameters.Add(new NpgsqlParameter(
"time_stamp", NpgsqlTypes.NpgsqlDbType.Timestamp, 0,
"current_timestamp", ParameterDirection.Input, false, 0, 0,
DataRowVersion.Original, DBNull.Value));
955 :
952:2011/01/05(水) 17:20:05 ID:???
あ、いい忘れたけど、DataSetを使ってDbAdapter.Update(dt)って
した時の話ね。つまりDbCommandBuilderに更新系のコマンドを
自動作成させた場合のNpgsqlのバグの話です。
>>955 もしかしてNpgsqlのせいではないのではないだろうか?
957 :
952:2011/01/05(水) 23:23:39 ID:???
>>956 データプロバイダを Npgsql から dotConnect にかえたら
エラーは出なくなりました。
他のDBとプロバイダの組み合わせでも
例えば、
OracleClient と Oracle
SqlClient と SQL Server
とかでも出ないですね。
次スレよろ
Slony-I 2.0.6 ってPostgreSQL9.xで使えるよね?
スタックビルダでインストールできないけど@Windows
ほす
埋めずに保守なのか
うめしゅ
梅酒
でわ、わたしが!
いやいや、おれが!
いや わたしが
ここは、おいどんが
どうぞ!どうぞ!どうぞ!
ええっ〜!
971 :
NAME IS NULL:2011/01/19(水) 20:33:42 ID:Axy8UdDb
なんでこんなに
加曾利杉
そんなに安定してるのか。
MySQLも同じくらいに過疎ってるの?
974 :
NAME IS NULL:2011/01/27(木) 11:07:19 ID:OcfKbA07
安定してるよ。ほかのはしらんが。
そろそろゼンリンうざいぞ。
何でもかんでも聞かずに、自分で調べろや。
まぁ、そう言うなって・・・
977 :
NAME IS NULL:2011/02/05(土) 04:45:39 ID:WW9mb35q
ビューってデータの実体を持たないって言うけど
その仮想表の記憶領域を結局要するから実体持つじゃん
ペテンだ
それとも閲覧しようとする度に元になったSQL発行して必要な部分だけ見せてるの?違うでしょ
しっかりシステムに記録してるじゃん
要は他のテーブルに依存するテーブルの事じゃん
978 :
NAME IS NULL:2011/02/05(土) 05:40:52 ID:wBvA7A3P
>>977 実装のしかたはRDBMSによってどうなるかは異なると思うけど
実体は
>それとも閲覧しようとする度に元になったSQL発行して必要な部分だけ見せてるの?
だよ
979 :
NAME IS NULL:2011/02/05(土) 06:24:42 ID:WW9mb35q
>>978 マジで?
じゃあビューって一般にテーブルより重いのね
そうだよ。
だからマテリアライズドビューとかが生まれたわけで。
982 :
NAME IS NULL:2011/02/06(日) 10:08:19 ID:eJZDeFPi
Windows版をインストールすると作成されるpostgresアカウントって
何に使うの?
サービス開始と停止はAdministratorアカウントじゃないとどうせ駄目だし
開発者アカウントでもデータベースの閲覧は可能にするし
よくしらんけど、サービスを postgres アカウントで動かしてるんじゃね。
必要なければ root や Administrator では動作させないと言うのは今時普通だと思うが。
984 :
NAME IS NULL:2011/02/06(日) 15:58:27 ID:u/f+f7bh
>>982 Windowsネィティブ環境でのPostgreSQLのインストールと実行についてのよくある質問とその回答
http://www.postgresql.jp/wg/jpugdoc/faq_windows-ja.html#2.3 > 2.3) なぜPostgreSQLを実行するために管理者以外のアカウントが必要なのですか?
> ハッカーがパッケージ内のソフトウェアの不具合を使用してコンピュータへの取っ掛かりを持った場合、
> ハッカーはそのサービスを稼動しているユーザアカウントの権限を持つことになります。
> PostgreSQLではこうした不具合はまだありませんが、
> ハッカーがPostgreSQLの不具合を見つけ、 それを悪用してシステムをハックしたとしても、
> 損害が最小となるように管理者以外のサービスアカウントの使用を強制しています。
986 :
NAME IS NULL:2011/02/06(日) 20:46:09 ID:eJZDeFPi
>>983-985 あ!なんだ管理者権限でログインして
変な小細工せずに普通にサービス開始すれば
勝手にpostgresアカウントで実行されるんですね
今解りました
プロパティのタブをいじくり回せば良かったんだ
パフォーマンスでプロセスを監視に入れてインスタンスの欄に
ちゃんとpostgresって表示されてました
あり^^
じゃあpostgresアカウントってログインするような物じゃないんですね
このアカウントとデータベースの接続パスワードが同じって
良くない事ですか?
>>986 > じゃあpostgresアカウントってログインするような物じゃないんですね
基本的にはそう言うこと。
> このアカウントとデータベースの接続パスワードが同じって良くない事ですか?
セキュリティ的には別にする方が望ましい。
一緒だと、接続パスワード知っててそのサーバーにアクセスできる人はそのアカウントで
ログインできてしまうことになるから。
ただ、そのリスクがどれぐらいあるかはケースバイケースだから一概に駄目とは言い切れ
ない。
もしリスクが高いなら、パスワードは言うに及ばす postgres アカウントの名前を含め
Administrator, Guest 等の既知の名前も類推されにくい名称に変更すべき。