テンプレはコピペだがよかったかな?
>>前スレ1000 構文解析が済んでいるからって、処理順をすべて無視して良いとは限らないでしょう。 つーか、なぜあなたは自分レス>>前スレ978の不都合さを無視するの?
そこは、内部的にそう展開されても問題ないといいたいんだろう
みなさん、ま、まさか case文とか countとか、sumとかの集約関数さえも知らん奴を相手にしてたのでは ウンチクを語るならSQLの基本的な仕様を理解してからにして欲しいですな
それを抜きにしても(抜いちゃいかんけど)、 言語設計(概念レイヤとでも言うか)と実装レイヤがごっちゃなのよね、あの子。
言語仕様あっての実装であって、 そのための字句解析、意味解析なのに、 その仕様である実行順も各句の役割も無視してる 具体例に対してちゃんと検証しようともしてない。まあSQL知らないからしょうがないのかも知れないが、それならそれなりの応対があるだろうに。
いちおつ
SQL信者の必死さに涙が止まらない
>>4 >>>前スレ1000
>
>構文解析が済んでいるからって、処理順をすべて無視して良いとは限らないでしょう。
処理順を無視してなんかないですよ。where句から処理が始まったとして、それより前に別名を展開する処理を追加しただけですね。
どこをどうみたら、処理順をすべて無視したと感じたのでしょうか。
>つーか、なぜあなたは自分レス>>前スレ978の不都合さを無視するの?
978ってこれ?
978> > 例えば、初心者が何故以下のような文でエラーが起きるか理解できなくなる。
978> > SELECT COUNT(foo) AS cnt FROM hoge WHERE cnt > 2 GROUP BY bar;
978> この例だと WHERE COUNT(foo) > 2 としたところで何の違いもない。
これについてなら、すでに983にあるとおり。
983> 何の違いもなくエラーが出るよってことでいいのかな
WHERE cnt > 2 も WHERE COUNT(foo) > 2 も同じようにエラーになる。それだけ。「不都合」って言ってるけど何が不都合?
技術的に可能ならそのまま仕様にすれば良いと思ってるのか?
>>10 信者ってw
丁寧に汚い言葉を使わずに、丁寧に返信していたつもりだが、
もう、そう言うようにしかとっていただけないのなら、勝手にしてください。
あ、最後に
>>983 > 何の違いもなくエラーが出るよってことでいいのかな
>>WHERE cnt > 2 も WHERE COUNT(foo) > 2 も同じようにエラーになる。それだけ。「不都合」って言ってるけど何が不都合?
そういう意味ね。失礼、取り違えてました。
闇雲に否定はしないけど、難しいだろうなと思うのはこういうの。 select a as b, b <- selectで別名解決はしないままでよい? from tableA where b = 3; <- 別名と、本来のカラム名との区別はどうやってつける?
select rand()*3::integer as id ,val from a where id < 100 これは?aテーブルにid列があったらどうする? selectは、物理テーブルと関係のないを作り出したり、 複数列から一つの列を作り出したり出来る。上の人のエイリアスがかぶる場合ってのもそうだし、人間様がどれが欲しいのか理解できるのか? それとも全部エラーにしちゃうのか?現在の標準仕様ならばなんの不都合もなく実行できるのだが。
すまんpostgresだとrandom()だな select floor(random()*1000)とかと読み替えてくれ
もし、前スレ
>>990 で書いてたようにもとのカラム見ないで
エイリアス優先とかルール作っちゃうと意図したことができなくなるよ
case文で例を、
念のために、aテーブルの構成は
id | subid1 | subid2 | val1 | val2
select
case
when val2 > 100 then subid1
else subid2
end as id
,val1
from
a
when
id > 50
aテーブルのidが50以上の行を抽出して、その行に対してだけcaseの条件文から新しいid列、val1列を導きたいんだけど、
勝手にselect句のcaseが適用されちゃう、どう解決しよう?
>>10 >それより前に別名を展開する処理を追加しただけですね。
正しく動作させるには「前」じゃなくて「スコープの外側」な
from
{
@
where
{
A
select
{
B
}
}
}
「別名を展開」する命令を@〜Bのどこに書けばいいか分かるだろ?
C言語なんかだとどんな馬鹿でも「前」に書けば自動的にスコープ内に入るから
君みたいなプログラミング初心者ほど「前」に書けばいいという固定観念に縛られて
こういうミスをやってしまうんだよ
君はもっと勉強して脳みそを鍛えたらSQLを使いこなせるんじゃないかなあ
ちょっと訂正 君はもっと勉強して脳みそを鍛えたらSQL「も」使いこなせるんじゃないかなあ
SQLにスコープという概念が存在するとは思わなかった。
>>19 SELECT table1.column1, table2.column2 FROM table1 INNER JOIN table2 ON ・・・
テーブル名で修飾してるのはスコープの概念そのものなんだが理解できるかい?
処理順無視してないとか言って SELECT COUNT(foo) AS cnt FROM hoge WHERE cnt > 2 GROUP BY bar; これを WHERE COUNT(foo) > 2 こんな展開したら明らかに処理順無視してるじゃねーか・・・ WHEREの方が先に動くっていってんだからよう たまたまWHERE句でcount関数が使えないだけだろ
>>21 彼は、そういうのはエラーになればいいだろ、展開して問題ないものだけ動けばいいんだという言い分だと思う。
展開して問題ないものの判断ができない場面があることに気づいてないみたいよ。
>>10 は非手続き型言語をまったく理解してない
そもそも 列名 AS 別名 とはselect句の出力の属性を宣言しているのであって、プロシージャ(手続き)を宣言しているわけではない
それにも関わらず「それより前に別名を展開する処理を追加しただけですね。」というのはプロシージャを追加したということになり
もはや非手続き型言語ではない
そんな基本的な矛盾に気がつかないようではプログラマとして致命的だ
なんだ、楽しみにして帰ってきたのにもう来ないのか?なかなか強烈だったから振り返ってみよう。
いつも過疎で平穏な、DB板のPostgreSQLスレに彼は来た。
「試したところ、エラーになりました。
psql=> select id as ticket_id from tickets where ticket_id < 10;
ERROR: column "ticket_id" does not exist」
どうにもこのエラーが受け入れられないらしい。
思えば初めから他人の話にはほぼ全て否定的であった。
前スレ
>>957 ,968,971,975,978
(そもそもやつがsqlに対して無知だからおかしてる間違いだろ?
字句解析・意味解析の知識はあるか知らんが(ほんとか?評価順の重要さも分かっていないようだが)、
SQLの知識が無いという自覚なしに、誰もsqlを持ち上げたりしてる訳じゃなく仕様を読めって言ってるだけなのに)そう俺は思った。
>SQL信者の必死さに涙が止まらない
あとからこんな言葉が吐かれることになるとは、
この時はまだ思いもしなかった。この言葉は、俺の今後の人生をきっと豊かにしてくれるだろう。
前スレ
>>990 >構文解析や意味解析についての、簡単でもいいので基礎知識があれば、
>別名をwhere句で使えるようにするのが特に困難なことではないはずだ、
>というのがすぐにわかるんだけど。
>たぶん構文解析についての基礎知識がないやつが、SQLの仕様書がどうのこうの
>いっているのだろう。
>なぜそういう仕様になっているのかが聞かれているのに、SQLの仕様を読めと
>答えてるのは滑稽すぎる。
最高に恥ずかしい!!!この晩はこれをつまみに一杯やった。
評価順があると、具体例挙げてどう動くか考えろと、言っても無駄だった。
前スレ
>>1000 >だーかーら、そのまえにSQLの構文解析と意味解析をしてるでしょうが。
>構文解析 → 意味解析 → FROM句→WHERE句→SELECT句・・・
> ^^
> ここで構文解析木を操作して別名を展開すればいいだけ。
>なんでwhere句やselect句の順番にこだわるの。whereやselectの処理に入るまえに別名を展開すればいいだけなのに、なんでこんなことがわからないの。
>なんで結果が変わると思ったの?
とか頓珍漢なこと言っちゃって結局クエリの内容見ないのだ。
(なんで順番にこだわんないの?)よいこのみんなは思ったはずだ。
その後も同じような主張を繰り返した。
(自信満々なのはいいが、人の話をちゃんと聞かないようじゃ何のために質問しに来たんだか…
何かもっと面白い提案でもでるのかと思ってたのに…まぁこんな日も有るか)
大変ワイルドな出来事でした。
なっが。 てか、元質問者と同一認定していいのか?
気付いて、顔から火吹いて逃げちゃったんだろうか。 正直なところどう感じたのかをお伺いしたい。
あれほど自信満々だったら、標準化してるISOなり pgsql-jpで石井さんに詰め寄るくらいして頂きたかった。
ここで復讐を果たす為に専門的知識を必死に習得してるのではなかろうか
いや、きっとmysqlスレで同じ事を質問する 「試したらエラーになりました。簡単なことなんですけど、どうしたらできますか?」ってね もはや何かの陰謀に違いない
mysqlだったらあの程度の出鱈目仕様、もう実装してんじゃね?
死者に鞭打つ真似はおよしなされ
叩くほうがここまで必死なのにはわけがあるんだろ。
9.2 32コアまでスケールは凄いな。 index only scanも導入されるし、 カスケードレプリケーション、range型とかも。 もうあれだな。
客にバージョン上げようぜっていいやすくなるな
やっぱりポスグレは最先端なのですね! マイエスキューエラーに馬鹿にされなくて済みます
ちょっと前までMySQL使ってて、ポスグレちょぼちょぼ使い出したとこやけど、 WITHが便利過ぎてワロタ。 とあるテーブルAから、条件に合うレコード削除して その内容を「削除済み」用のテーブルBに書いて、 ついでにテーブルCの該当レコードのフラグカラムを書き換え。 これが一文一発で出来て、明示的なトランザクション制御要らず。 気持ち良過ぎやろ。
writableCTEはpostgres独自だから意識して使うんだぞ
Windowsの32bit版と64bit版のベンチマーク比較の資料ってどこかにあるんでしょうか?
CentOS5.8とPostgreSQL8.4を使っています logファイルにSQLが出力されるのを抑止し たいのですが、どのようにすればよいで しょうか?
postgresql.confをいじれ 見てわかんなかったらマニュアルを読め
いやまあ、log_statement だと思うけど わざわざ設定しないと出ないはずだが。
うん、デフォだと出ないよね
alter table テーブル名 add column カラム名 するときに、場所って指定できますか。 たとえばカラム「age」をカラム「name」と「gender」のあいだに追加したいとか。
>>46 普通はテーブル作りなおさないとできないんじゃなかったかな。
RDBはもともとカラムの位置を気にしないものだし。
SELECT時に順番決めるしね。 *指定したくて気になるならView作ればいいし、 DROPして作りなおすのもありっちゃあり
並べ替えが出来るdbもあるのよね postgresの場合は出来たら便利なのは分かってるけど他に優先度が高いのがあって、手掛ける人がいないってどこかで読んだような
1・2・3
順番が気になる人は、ほとんど初心者しかいないから 対応するのもアホくさいと思うがなあ
>>52 変更コストがどうかと言う問題はあるけれど。
20列のテーブルで3-5列に処理区分1,処理区分2,処理区分3とあり、
処理区分4だけが21列目。しかも、20列目の入力時刻の後になるというのは
いろいろな意味で好ましいことではない。
その考えの先には、 : 予備1 varchar(100) : 予備2 varchar(100) : があったりして。
>>53 すべてのユーザがviewを通してすべてのテーブルを管理しているという訳では
ないからね。やはり列の並び順も少なくとも管理しやすさには大きく関係する。
一般にはね。
pg9.1.4のpg_trgmを使った全文検索の速度について CREATE TABLE documents ( id serial NOT NULL, document text, CONSTRAINT pky PRIMARY KEY (id ) ); CREATE INDEX idx ON documents USING gin (document COLLATE pg_catalog."default" gin_trgm_ops) documentカラムには、 平均1000文字の英文が100万行格納されています。 上記の状態のテーブルに次のSQLを実行しました。 --「keyword etc」が含まれているかどうか確認 SELECT EXISTS( SELECT * FROM documents WHERE document_text like E'%keyword etc%' ); 実行した結果は、0.5秒〜300秒を超えてタイムアウトするものまで様々です。 (「keyword etc」の場合10.8秒でした。) 設定ファイルの編集やSQLの改善でもう少し早くすることはできないでしょうか。 ちなみに、実行している間は、実行しているコアのCPU使用率が100%になっています。
速度改善とは関係ないけど、EXISTS使うと、1件見つかった時点で切り上げそうな気がする。
pg_trgmを使いたいのは複数の単語からなる語句を文章中から検索したいから? トリグラムを使わずに CREATE INDEX idx ON documents USING gin(to_tsvector(document)); として、 SELECT EXISTS( SELECT * FROM documents WHERE document @@ ts_query('keyword & etc') and document like E'%keyword etc%' ); としたらどうなる?
SELECT EXISTS( SELECT * FROM documents WHERE to_tsvector(document) @@ ts_query('keyword & etc') and document like E'%keyword etc%' ); のまちがいだった。
60 :
56 :2012/06/20(水) 18:55:08.87 ID:???
>57 ありがとうございます。 1件(1行)でもキーワードがあるかどうかを確認したいので、 そのように1件見つかった瞬間に処理を切り上げてもらえるのが助かります。 >58 ご提案ありがとうございます。 なるほど、一度vector検索してから 連語があるか確認するのですね。 一度テストしてから、またお返事させていただきます。
1000文字英文100万行くらいなら全然対したことなさそうだけどな
trgrm自体の検索は大体そこそこ早いんだよ
でもインデックスでヒットした後に実テーブル確認しに行ったりするとそこで速度が落ちる。
だからヒット数が多ければ多いほど遅くなるよ。 特にメモリに実テーブルがのっていない場合。
そんな感じじゃない?
>>56 そうであれば、差し支えなければそもそもginでヒットする件数をgin_fuzzy_search_limitで抑えちゃうことができるのでそれを検討してみては?ここに書いてあるよ
www.postgresql.jp/document/9.1/html/gin-tips.html
56です。返答が遅くなって済みません。
>>58-59 いくつか検証してみましたが、
今より高速になるものもあれば、むしろ速度が落ちるものもありました。
原因としては、
to_tsvector(document) @@ ts_query('keyword & etc')
の段階で該当する行が大量にあった場合、
そこからは、シーケンシャルなlike検索が行われているような気がします。
(ただ、実行計画では、BITMAP HEAP SCANとなっていますので、
インデックスを使ってなお遅いということなのかも知れません。)
>61
gin_fuzzy_search_limitを1に設定して実行してみました。
確かに実行速度は、早くなったのですが、有るはずの文字列がないと判断されるようになりました。
gin_fuzzy_search_limitを0、または9999999等の十分大きな値に設定すれば、
>56のクエリで[True]が帰ってくるSQLでも、
gin_fuzzy_search_limitの値を小さく(例えば1や10)にすると
[FALSE]が帰ってきます。
where句でヒットした行数を絞って返すという認識なのですが、
(1000件ヒットしても、gin_fuzzy_search_limitが10ならば、10件しか返さない)
間違っておりますでしょうか?
そこで設定した数字は正確に有効な行数を表す訳じゃないのよ。 なので小さく設定しすぎると、正しい結果が帰らないこともある。 事情を説明するのが面倒(というかソース追う時間が無くて自分も正確に把握してない) なので、興味があれば調べてみて。 ということで、速度(と結果)が妥協できるところで、 小さく設定するのがよし。
あ、たくさんの行がヒットすると遅いってのは、 ginインデックスのみからwhere句条件で探す(これは早い。転置なんで当たり前) →正しいかどうかヒープ(メモリに納められてる実タプル(もちろん無ければディスク読む))をもう一回条件で調べる (bitmapの説明は省いた) て手順だから。プランでrecheckって出てるでしょ? インデックスっていつも正しい情報が入ってるって限らないのよpgは
65 :
NAME IS NULL :2012/06/29(金) 11:17:17.20 ID:Q8TsbVeK
os: CentOS 5.2 locale=C postgresql 9.1.2 locale=C, DBの文字コードはUTF-8 接続クライアント a. WindowsXP上のTeraTerm UTF-8 b. JDBC type4接続 Java文字コードはUTF16BE 2点質問があります。 (1) a.において、psqlが出力するエラーメッセージが文字化けします。 SELECT結果(UTF-8)は問題ありません。 文字化けを解消する、またはメッセージを英語にする方法をご存知であれば教えてください。 (2) b.において、JAVA例外(PSQLException)のメッセージが文字化けします。 ログファイルの文字コードはUTF-8。 SELECT結果(UTF-8)は問題ありません。 こちらも文字化けを解消する、またはメッセージを英語にする方法をご存知であれば教えてください。
66 :
65 :2012/06/29(金) 11:19:28.71 ID:Q8TsbVeK
追記です。 osのタイムゾーンは日本です。 よろしくお願いします。
エラーメッセージの話でしょ? CentOS 5.2 locale=C て言ってるけど、具体的には何で判断して どこに設定されてる?LC_ALL?LANGUAGE?LANG? とりあえずそこら辺を確認して それからpostgresql 9.1.2 locale=Cていってるけど、 postgresqlはソースから入れたんだよね? ちゃんとインストールしたpostgresqlが動いてる? (たまに、インストールしたのにシステムにデフォルトで入ってるpostgresあげてる人とかいるので) 何処に設定したものからCって判断してる? "実際に動いてるpostgresの"postgresql.confで lc_messages = 'C' lc_monetary = 'C' lc_numeric = 'C' lc_time = 'C' になってるかい? psqlでの select name, setting from pg_settings where name like 'lc\_%'; の結果 name | setting -------------+--------- lc_collate | C lc_ctype | C lc_messages | C lc_monetary | C lc_numeric | C lc_time | C みたいにconf(と思っているもの)と一致してるかい? それを確認した上で、 export LANG=C してpsqlコマンド使っても化け文字?
69 :
65 :2012/06/29(金) 21:27:43.37 ID:CwgX9y5+
お二方ありがとうございます。 おかげさまで(1) については解決しました。 原因は、トラブルシュートのテスト用に用意した、意図的に壊した設定ファイルが読まれていました。 正しい設定ファイルに置き換えることで解決しています。 (2) については状況が変わりません。 どうも本体ではなくJDBCドライバの問題のような気がします。
Win7でレプリケーションうまくいかないなぁ。
pg_dumpでデータ以外のみをエクスポートする方法はないでしょうか?
>データ以外のみ schemaのことだね? オプションにあるべ
-s
ありがほー
>>76 ありがとうございます。
いちおう確認ですけど、x86_64ならintが64bitだから、PostgreSQL 64bit版でもintegerとbigintに性能の差はないと考えていいですよね?
CPUのビット数やコンパイラのintの長さと DBのINTに関係は無いよ、環境に寄らずMDBSが決めたサイズになる。
(C)コンパイラのintのサイズにしても、 64bit環境だからって64bitとは限らないし。 というか32bitのままって方が多そう。
Postgres9.1.0をソースコンパイルでOSX山ライオンにインストールしようとした。 が、 configure: error: in `/Users/jiro/Downloads/postgresql-9.1.0': configure: error: C compiler cannot create executables と文句を言われ途中で止まってしまいます。 対処法をご存知のかたがいましたらご教授願います。
81 :
NAME IS NULL :2012/08/15(水) 13:21:08.32 ID:TlE9Z+hr
あげます。
試しに9.1.4ダウンロードしてビルドしてみたけど、問題なかったよ。 Xcodeとコマンドラインツールは入れてるよね?
postgresqlでLEFT OUTER JOINをしたいんだけど 片方のテーブルの型がtextでつなげる方の型がinteger おまけにtextの方が0で頭が埋ってる10桁なんだがどうやるんですか? 教えて下さい偉い人 SELECT * FROM a LEFT OUTER JOIN b ON a.accountcode = to_char(b.id, '0000000000'); これじゃなぜかだめっす
どうだめだったの? a.accountcode::INT とかでいかない?
これでどう? to_char(b.id, 'FM0000000000'); 偉くないので分からないけど、こっちの方が良いかもしれない。 to_char(b.id, 'FM0999999999');
不慣れなplpgでトリガ関数いっぱいつくらにゃあかんのですが、 デバッグのいい方法ないですかね? PgAdminVだと関数のデバッグのみでトリガ関数のデバッグができないようでして
RAISE文を使ってprintfデバッグくらいしか思いつかないなぁ。
そうですかー。んじゃ今日もトリガと格闘してきます。
textsearch_sennaで30個にパーティションに分割したテーブルを selectすると、必ずpostgresのプロセスごと落ちるんだけど、 何か方法ないですか? 分割した個々のテーブルにならselectしても落ちないんですが、 個々のテーブルをselectするSQLを5つくらいunionでつなげてもやっぱり落ちます...
9.2が出たら起こしてくれ
PostgreSQL 9.2 RC1 Available for Testing Posted on 2012-08-27 だいぶ先かな
マイエスキューエラーに虐められた時に言い返す方法教えて
95 :
NAME IS NULL :2012/09/02(日) 11:52:33.57 ID:hfAxyDdY
MySQLだと1つのDBに一人のユーザを閉じ込めるっていう隔離ができるんですが、 PostgreSQLでもできますか? やりかた教えてください><;
initdbで作成するとき、場所変えればいい。 複数作れる。同時に起動するときは、それぞれのpostgresql.confで ポート変えないとならんけどね。
superuserにしなければいいんでは?
>>96 のようにDBクラスタごと分ける
pg_hba.conf でログインできるDBを制限
スキーマ + ロールでアクセス制限
どれでもお好きに。ちなみに、MySQLのDB ≒ Postgresのスキーマ だと思ったほうがよいかも。
idをserialで作ったテーブルがあるんですけど、これをあとからbigserialに変えることはできますか。 alter tableだとsequenceが変わらないような気がします。
>>99 自己レスです。
¥d hogehoge_id_seq
すると、なんとシーケンスはbigintで作られているではあーりませんか。
これなら alter table hogehoge alter column id type bigint だけでいけそうです。
そもそも serial は、なんでデフォルトで bigserial 相当にならないんですかね? 歴史的な経緯?
"int" がデフォルトで32bitみたいなもんじゃないの。64bitはbigintだし。
そうころころ替えられないからだろう。 足りなくて困ってる人数ないだろうし。
相変わらずintが最速だからじゃない?
105 :
NAME IS NULL :2012/09/17(月) 15:26:30.91 ID:fmu2IRis
ん、もうかい? 意外と早いんだな。
range 型キタコレ
109 :
NAME IS NULL :2012/09/17(月) 21:56:19.47 ID:4clxm/pY
はじめまして。postgresqlのことをあまり知らない初心者インフラ担当です。 質問があります。 postgresql8.1を使用しているDBサーバがあり、 毎日3:00からVACUUMとDBバックアップを行っています。 通常ではVACUUMに30分くらいかかっていたのですが、 1週間前あたりからVACUUMに6時間くらいかかるようになってしまいました。 今回、原因究明のため商用機を調査することになったんですけど、 VACUUMが急に時間がかかるようになることに心当たりがある方はいるでしょうか? また、調査する場合はどのあたりから調査していくべきでしょうか。
いくら出す?
111 :
NAME IS NULL :2012/09/18(火) 00:18:25.21 ID:WP7LnWlO
解決しました さーせんw
よかったね
確かjson使えるよな?待ってたよ〜ん。
配列を引数にして、WHERE節で使う関数のWHERE節はどう書きますか? WHERE serial IN ?$1?
WHERE serial = ANY( $1 ) NULLへの対応が必要ならば、別途 調整がいる。
あざっす^^
117 :
NAME IS NULL :2012/09/26(水) 20:42:11.37 ID:wFrvL7PY
db_syntax_diffについて、知っている情報あれば、 教えてください!!
まずは知っている情報を出してくださいよ。
バージョンが9.2になって小文字に変えないとエラーになるコマンドとかあるな・・・。 LANGUAGE 'C'をLANGUAGE 'c'にしないと動かないってとこでハマったわ。'
テスト
9.2の前はいくつ使ってたの? select * from pg_language; でCかcの違いじゃないのかなあ。
>>121 8.4使ってた。そこでインストール済みの拡張言語見れたのか・・・。
20年くらい前から Oracle 使ってて、10年くらい前に全面的にすべてのシステムを PostgreSQL に移行しました。 新規開発も全て PostgreSQL です。現在まで何も問題ありません。 ですが、最近、世界的に MySQL にシェアを奪われ続けており、この先ずっと PostgreSQL を使い続けるべきか、正直、迷っています。 どんなものでしょうか?
MySQL自体が存在しなくなる可能性を考えるべき。
>>124 なるほど。
よく分かりました。吹っ切れました。
ありがとうございます。
やけに納得するのがはえーなw
MySQLがなくなる可能性もPostgreSQLがなくなる可能性も同じようなもんでしょ
だから
>>123 は杞憂だよ
>>126 心情的には PostgreSQL と心中してもいいかな、くらい思ってるので。
今使ってるバージョンがいきなり使えなくなるわけじゃないからな。 無くなってから次考えりゃいい
むしろOracleに買われたMySQLのほうが消える可能性高かったりして。MariaDBが一応あるけどねぇ。
他人が書いたマニュアルをみながら、作業を進めてると壁にぶつかってしまいました。。。 >createdb -U Postgres -O ユーザ名 DB名 と入力すると、"createdb : コマンドライン引数が多すぎます。(始めは"?O") と言われるのですが、何がダメなんでしょうか? バージョンは9.0.4です。 (普段は電気屋さんしてます。)
いっつも $psql -U postgres #create user ユーザ名; #create database DB名 owner ユーザ名; でやってるけど、そんなコマンドあるんだな。
>>133 CREATE DATABAS は、 SQL コマンド
createdb は、CREATE DATABASE の shell スクリプトラッパー
>>131 はい、そうです。全部小文字。
この前にユーザ作成しました。
まず Postgres で蹴られると思うけどな、、、 postgres でやってる?
textsearch_sennaで前文検索するとき、 指定する単語は16個までって決まってる? where col %% '単語1 or 単語2 or 単語3 or .... or 単語16' の検索結果と where col %% '単語1 or 単語2 or 単語3 or .... or 単語16 or 単語17' や where col %% '単語1 or 単語2 or 単語3 or .... or 単語16 -単語17' などの結果が全部同じなんだけど、 postgresの仕様? sennaの仕様? textsearch_sennaの仕様?
>>136 あ、それはこのスレに書き込む時、携帯の自動処理で大文字になってしまったのです。。。
コマンドライン引数が云々、はシェルが出してるんかな 環境はWindows?
>>139 「>」ってなってるからWindowsっしょ
>>137 or検索だからなのでは・・・?
あと、postgresの全文検索はインデックスが壊れる事がちょくちょくあったような。
そもそもsenna使ってる時点でノイズは結構出るから、あまり気にしなくていいのでは?
みなさん、PostgreSQL のメジャーバージョンアップって どうしてます? うちの会社は基本的に24時間365日営業しているので、 ネット(システム)を停止できないです。 事情があれば、顧客に事前に通知して1日とか一斉休業するんですけど、 やっぱ、なかなかバージョンアップだけではそこまでできません。 セキュリティホールとか殆ど無いですからね、PostgreSQL…
psqlで変数って使えないの? $name = 'foobar'; select * from table where name = $name; とかしたい。
>>142 どういうシステムか知らないけど、普通に動いて特に困らないならバージョンアップはしなくていいんじゃない。
さすがに未だ7使ってるなら計画練ってアップデートしたほうがいいと思うけど。
質問者とは別人だけど興味深い質問なのでおれも知りたい。
>>148 それはうまい解決方法がない、ということでいいのかな。
>>149 そういえばこの質問は止めたらマズいシステムで止めずにアップデートするには?だったか。
Slonyとpgpool使えばノンストップでバージョンUPいけるらしいけど、テーブル増えるから俺は使いたくないなー。
1日止めるような要件の時に一緒にやっちゃうのがいいんじゃない。
151 :
NAME IS NULL :2012/10/17(水) 01:34:55.10 ID:I0xYCeC3
化学屋やってます。 PostgreSQL 8.4 です。 時々、大量のレコードを更新や挿入するのですが、 とても時間がかかるため、 BEGIN; DROP TABLE して、 COPY table FROM stdin; .... \. COMMIT; のようにしようと考えています。 この処理の実行中、tableにアクセスされても問題ないのでしょうか? あるいは BEGIN; の直後に LOCK table; は必要なのでしょうか? レベルの低い質問ですみません。
152 :
151 :2012/10/17(水) 01:40:58.77 ID:???
すみません、あまりにもレベルの低い質問で。その心情を吐露すれば、つまり レコードレベルのロックであれば、テーブルそのものはなくなるわけではないので 普段は気にしないでSQLを書いていたのですが、今回初めて テーブルそのものを DROP するため、不安になっているのです。トランザクションってのはつまり、 ROLLBACK さえすれば DROP そのものも無かったことにできるものだろうとは思うし、 DROP してしまう table をLOCK してもしょうがないだろうし・・・。混乱中です。
154 :
151 :2012/10/17(水) 12:09:59.64 ID:???
>>153 ありがとう御座います。
自動的にACCESS EXCLUSIVE LOCKがかけられるのですね。すっきりしました。
ユーザー側からはリードオンリーの巨大なテーブルだったので
挿入や更新の度に
>>152 を行おうと思います。
もっと基本的な部分を見直すと10倍ぐらいは速くなるとかいうパターンじゃないかねぇ。。。
>>155 何千件ものレコードを 更新または挿入するんです・・・。
インデックスをDROPしてからINSERT or UPDATE して、
またインデックスをCREATE するというのもやってみたんですが多勢に無勢でして。
状況としては管理者のみが編集できるマスターテーブルの更新です。
もちろん何千件といっても、実際の変更箇所は全レコードの数%なんですが、
変化したかどうかサーバーに問い合わせるのも時間かかるし、
そのマスターテーブルが Excel という仕様なので、
>>151 に考えが至ったのです。
業務アプリのバッチ系なんかだと、毎日何万件ものデータを (複数の表に対してインサートやアップデートだけじゃなく計算したりして) 処理するというのを分のオーダーでやってるんですけど。。。 まともなプロに見せたら、1時間ぐらいで10倍速くしてくれると思うよ。
UPDATEにINDEXが使われてなくて遅いだけだったりして
たったの数千件なのか。普通のトランザクションかけるだけでいいんじゃないの。
>>157 >>159 いや、挿入更新処理を 遅くとも2〜3秒以内で終わらせたいのです。
>>158 そうなんです。状況によってそれもありえるのが厄介で・・・。
>>160 >いや、挿入更新処理を 遅くとも2〜3秒以内で終わらせたいのです
じゃ今、何秒かかってるの?
>>161 ひどいときだと20〜30秒くらいかかってました。
COPY で書き換えた所、1秒くらいで終わりました。
たぶん更新系のSQLを数千回発行してるから、毎回ディスクをflushしに行って遅くなってるんだと思う。 たとえDELETEとINSERTを使って20〜30秒かかっても、その間も他のユーザーは更新前のテーブルを参照できるんだから、 数秒のテーブルロックをかけるよりもシステムのロックがなくていい気がするけど、 COPY文を使って1秒テーブルがロックする程度のことを許容できるなら、そのやり方も早くて簡単でいいと思う。
>>160 それがわかってるならINDEXが使われるようにしたらいいだけでは?
>>163 おっしゃるとおりなんだと思います。今はまだマスターテーブルの管理者が一人だからいいですが、
そのうち別のキャンパスにもおきたい、とかなってくると話がややこしくなってきそうなので
そのときに備えて今から前任者の「Excelでマスターを編集」という状況から脱したいと思います。
ただ、やっぱ便利なんだな・・・いろいろと。
>>164 更新挿入の時にこちら(管理者)がWHERE句で参照する部分のINDEXはもちろん残しています。
ただ、他にも10以上のINDEXがはってあって、それの更新に時間がかかっているのかな?と
おもい削除してみたりしましたが、たいして変わらなかったんです。
今にして思うと COPY文でインデックスのCREATEもふくめて1秒で完了しているということは
INDEXの更新自体は殆ど関係無かったのでしょうかね。
UPDATEして、できなければ INSERT するという書き方は
なんとかすっきりできないものなのでしょうかねぇ。
MERGEをずっと心待ちにしているのだけど。
>>165 それにしてもインデックスの作成が早すぎて不思議な気分です。
ちょっと気味が悪いくらいです。と思って見直したら幾つかのインデックスを張り忘れていたw
それでもトータルで2〜3秒・・・やっぱ不思議だ・・・。
キャンパスって、、、大学かよ。 まさかパソコン詳しい先生が一人も居ない大学なの? よくわからんが、多分統計情報が古いんだろ。 オラクルみたいなhintを埋め込むことができないのは不便だが、 例えば1000行INSした時点でanalyzeするとかしてみれば改善されるんじゃないか?
雰囲気からアップデートの要否判定とかしてないよね。 それならtruncate->copyでいいと思うわ。 何もdropする必要はないかと。
ひょっとして、SQLをクライアントから発行してるんではないだろうか。 INSERT if not inserted then UPDATE INSERT if not inserted then UPDATE INSERT if not inserted then UPDATE ... みたいな感じでクライアントから数千行INSERT/UPDATEしようとしているんなら遅くて当然だよな。
>>167 そう。大学系。試薬系のデータベスなんですけど、(あまりいうと特定されるのでよしときますが)
前任者の残していったシステムで、この板のみんなが見たらあんまりなテーブル設計で腰を抜かすと思いますよ?
プライマリ以外にインデックスが付いていないというのもビックリ。
素人の自分ですらガンガン高速化できて楽しめましたよ?
式インデックスをつけたときは本気で感動されました。
>>168 明日、早速 truncate で試してみます。
>>169 まさにそんな感じでぶらうざ経由でphpから更新する使い方ですた。
あまりにも遅いので業を煮やしてこないだターミナル経由でアップするように作り変えたという次第です。
>>167 8.4って統計情報の更新、自動じゃないんでしたっけ?
勝手に最適化されているんだと思ってました。
調べてみます、ヒントをありがとうございます。
>>170 PK以外でINDEX付けないのは良くある。
というか、たかが数千行程度ならINDEX要らん。
INDEX付けると、それが効いてるSQLが速くなって感動するかもしれんが、
INSERTやUPDATEが遅くなって、全体でみると却って遅くなってる場合がある。
>>172 なるほど!勉強になります。案外とそういう配慮があったりして・・・。
あと、テーブルが全部メモリに乗っかるようにチューニングした? 規模的に余裕だと思う。
式インデックス付けた??? そりゃINS/UPDが遅くなるわな。。。
開発環境で使っているpostgresqlのデータベースファイルを、ローカルのディスクから NFSマウントしたディレクトリに移動しようとしています。 こんなことして大丈夫でしょうか。本番環境ではないので、負荷は心配しなくていいですが、 DBに不整合が発生するようなことはたとえ開発環境といえど避けたいです。
>>176 良いよ。
バックアップ&リストアなんて基本的にファイルコピーだし。
MERGEってのはUPDATEとINSERTを一つにして速くするって目的でできたものじゃないんだけど。 結果的に呼出しが1回になったからその分速くなっただけで。
>>176 NFSのsyncオプションを有効すれば不整合は起きないかもしれないけど、
更新がとても遅くなるかもしれない。
ユニークキーについて相談です。 こういうテーブルがあったとして、 create table example ( id serial primary key, name varchar(255) not null, created_at datetime not null default current_time ); ここで、名前と日付(nameとdate(created_at))の組み合わせが一意になるように ユニークキーを作ることはできますか。 dateカラムを作るのが簡単ではありますが、それを作らずに済む方法があれば教えてください。
これで作ったユニークキーって、何に使うつもり?
ふつうに CREATE UNIQUE INDEX X ON example (name,created_at); では駄目なのかい?
式インデックスを使って、 CREATE UNIQUE INDEX X ON example (name,date(created_at)); とすればできる。
名前と日付の組み合わせだけで、本当に一意になる?
そりゃdatetimeの精度でも同じ時刻になる可能性は0ではない。
>>184 uniqueにするだけだから、date()する必要ないよ。
「時刻」ではなく、同じ「日付」に同じ名前の人がいないことを保証したいんだと思うよ。 式インデックスでいいんじゃないかな。
同じ日に同姓同名の人は登録できないって意味とは考えにくいな。 むしろ同姓同名の人が登録した時に、それぞれを識別しようとして日付を足しただけに見える。 (なんで連番使わないんだってことになるけど、多分知らないんだろう)。
>>189 人名かどうかなんてかいてないし、実際はユニークな型番かもしれない
まぁあれこれ推測して楽しむのを止めはしないけど
>>184 >CREATE UNIQUE INDEX X ON example (name,date(created_at));
おおっ、すばらしい!ありがとうございます。
どうせできないだろうと思ってたのに、できるんですね。きいてみるもんです。
>>188 >「時刻」ではなく、同じ「日付」に同じ名前の人がいないことを保証したいんだと思うよ。
はい、その通りです。同じ名前が1日に高々1件しか登録されないことを保証したかったので。
psqlコマンドを実行する時に、なぜかperlがらみのエラーがstderrに出てました。 psqlコマンドが内部でperlを呼び出すことはありますか。 なおpsqlコマンドを使って copy (select ...) to stdout as csv を実行しています。
PAGER何にしてる?
create_atを日付だけにすれば良いじゃないか。 なんでdate型じゃなくてdatetime型使うのよ?
そりゃ欲しいからだろ。 dateとtimeに分けておけばよかったかもしれないけどね。
いやいや、date型が別にあるなんて知らないって奴も居るかもしれんよ。 ここでunique indexの作り方聞いてくるぐらいだしな。
>>198 dateカラムってのはdate型という意味?
psqlで、read-onlyモードっつーものはないでしょうか。viのviewモードのようなやつ。 誤ってデータを改変してしまうのを、万が一でも防ぐために。
>>200 psql で最初に SET default_transaction_read_only=on; するとか?
selectだけ実行してる分には改変されることはないはずだが。
んーまーストアドとか
>>202 serialが上がっていくのが気に食わない人もいるかもしれない
最近出たMac miniにCentOS+PostgreSQLをインストールしてpgbenchしてみたんだけど、すごく遅い。 何がいけないのだろうか? Mac mini: Core i7 2.3GHz クアッドコア HDD: 5,400rpm 1TB CentOS release 6.3 (Final) Linux localhost 2.6.32-279.el6.x86_64 #1 SMP Fri Jun 22 12:19:21 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux PostgreSQL: 8.4.13 $ pgbench -i test $ pgbench -c 10 -t 1000 test starting vacuum...end. transaction type: TPC-B (sort of) scaling factor: 1 query mode: simple number of clients: 10 number of transactions per client: 1000 number of transactions actually processed: 10000/10000 tps = 84.380053 (including connections establishing) tps = 84.399439 (excluding connections establishing)
diskが遅いんでは?
5400rpmってことは、90rps(秒)なんだから、commitする度に 律儀にdiskに書き込んでるとするならば、84.4tpsってのは妥当な線なんでは?
TABLEサイズ+INDEXサイズがshared_buffersの設定値を超えている状態で、 あまりアクセスされないデータを検索するSQLでexplain analyzeすると INDEX SCANになってても初回のみ30秒ぐらいかかることがあります。 2回目以降は1秒以内に帰ってきます。これを最初から早くすることは可能ですか? あるいはINDEXだけならshared_buffersに収まるサイズなので、INDEXだけでも 常時キャッシュされるようにすれば、早くなるのかな?とも思ったのですが、 考え方はあってますか?また、そのようなことは可能でしょうか。 postgresql9.1です。
>>209 あってると思うよ。
データを空読みすればいい。
>>210 データを空読みってcount(*)を取れってことでしょうか?
それだとテーブルデータがキャッシュされて、他のINDEXが
キャッシュから押し出されたりはしないのでしょうか?
>>211 INDEXのサイズは何100MB〜何TBぐらい?
数〜数十MB単位じゃないよね。
>>212 全テーブルのINDEXを合わせると3GBぐらいです。
メモリは16GB積んでてshared_buffersは4GBです。
buffer増やせば?
>>214 全テーブル+INDEXがのるだけのshared_buffersが確保できるだけの
メモリを積むことができるのなら最初から質問なんかしていません。
INDEXのみをキャッシュする方法はないということでしょうか。
たぶんない。9.2でやっと INDEX ONLY SCAN が追加された。
217 :
NAME IS NULL :2012/11/05(月) 05:39:19.32 ID:VQaCCwqV
postgreSQLの統計情報ビューの使いどころがわからないです。 ご存知であれば教えてください。
毎日眺めてれば半年もすればわかるようになる。 近道はないよ。
219 :
206 :2012/11/05(月) 11:41:48.75 ID:???
>>207 HDDは速くはないけど、それほど遅いとも思えないんです。
# bonnie++ -d /var/lib/pgsql/data/ -n 256:1024:1024:16 -u root
Version 1.96 ------Sequential Output------ --Sequential Input- --Random-
Concurrency 1 -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP
localhost 7472M 970 97 63074 5 29105 2 4534 90 93805 4 251.2 4
Latency 8409us 395ms 1243ms 34163us 79412us 336ms
Version 1.96 ------Sequential Create------ --------Random Create--------
localhost -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
files:max:min /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP
256:1024:1024/16 10872 21 119910 54 40953 45 11077 22 2487 1 1091 1
Latency 1873ms 492ms 1037ms 1903ms 7695ms 10302ms
Macbook(Core2Duo 2.26GHz)上の仮想環境にインストールしたCentOSだと、tpsは500〜600程度、
さくらのVPS(安いやつ)で試しても、同じくtpsは500〜600程度だったので、ひょっとしたら1000超えるかもと
思っていたので、遅すぎて途方に暮れてます。
HDD環境では、どの程度のtpsが普通なんでしょうか。
220 :
206 :2012/11/05(月) 11:42:43.10 ID:???
ちなみにSelect Onlyだと結構速いです。 $ pgbench -S -c 100 -t 10000 test starting vacuum...end. transaction type: SELECT only scaling factor: 1 query mode: simple number of clients: 100 number of transactions per client: 10000 number of transactions actually processed: 1000000/1000000 tps = 33454.043328 (including connections establishing) tps = 33727.065343 (excluding connections establishing)
222 :
206 :2012/11/05(月) 13:42:57.11 ID:???
>>221 えっと、それは
while (true) {
fputs("abc", fp);
fflush(stdout);
}
が5400rpmのHDDだと、どうあがいても90回程度しかループできないということですか?
15000rpmのHDDに変えてみたらわかるじゃん。
RAM disk で試しても、HDD ネックかどうか位は分かるんじゃね。
>>222 HDDのキャッシュが無効化されていてかつ、fflushじゃなくてfsyncならそうなるかも
227 :
206 :2012/11/06(火) 11:12:51.36 ID:???
みなさま、いろいろな情報ありがとうございました。 今まで、なんとなくなんですが、HDD以外のハードのスペックが上がれば、それなりに更新性能も 上がるんだと思ってたんですが、HDDの性能で頭打ちになるんですね。 5,400rpm程度のHDDだと、最高でも5,400tpmしか出ないということか・・・。
SSDでやってみな
DROP DATABASEでは現在接続中のDBを削除できないので dropdbコマンドを使って削除するとの事なんですが、 ではdropdbコマンドはどうやってDBを削除してるんでしょうか? 内部の動きが知りたいです
231 :
229 :2012/11/07(水) 01:44:58.07 ID:???
>>230 ではテンプレートデータベースも含めた全てのDBを削除することは出来ないってことですかね
ディレクトリごと消せばいいのでは
PostgreSQL8までは以下の正規表現が使用できましたが、PostgreSQL9.2からエラーになってしまいます。 select cast( regexp_replace('123', '(.)(.)(.)*', '\\2') as int) as count ERROR: 型integerの入力構文が無効です: "\2" SQLステート:22P02 \\を\にすることでエラーを回避できました。 select cast( regexp_replace('123', '(.)(.)(.)*', '\2') as int) as count プログラムでこのSQLを動かしているのですが、サーバの設定を変更しないでPostgreSQL8、PostgreSQL9.2両方に対応するには、 if文でいちいち分岐しなければならないのでしょうか?
>>227 いや、、、大抵はカーネルキャッシュ、デバイスのキャッシュがそこをひろうから。。。
書き込みをキャッシュしてしまうとcommitの意味がなくなるだろ。。。 バッテリー内蔵のRAIDカード使ってるとかなら別だが。
書き込みはOSが受け持つんじゃないのかな?
>>236 >書き込みをキャッシュしてしまうとcommitの意味がなくなるだろ。。。
commit ってディスクにデータが書かれることを意味しないぞ。
そういう使い方もあるわな。 普通はディスクにLOGが書き込まれたということが重要なんだが、 同期レプリケーションなんかだとレプリカにデータ送っただけで良しとするのもありだな。 そもそもデータが壊れても気にしないよ、って使い方もあるだろしな。 どっちが普通なのかは議論になるかも知れないな。
ジャーナルファイルシステムを信用しようぜ
デッドロックについて質問。PostgreSQL 9.1。 トランザクションAが、あるテーブルtable1にinsertします (updateではない)。 別のトランザクションBが、table2をupdateします。 そしてtable1とtable2は、どちらもcustomersテーブルへの外部参照をもっています。 このとき、以下のような「customersテーブルにshared lockがかかってデッドロックになった」というエラーが出るんですが、どういうことでしょうか。 DETAIL: Process 30798 waits for ShareLock on transaction 1779489; blocked by process 30802. Process 30802 waits for ShareLock on transaction 1779490; blocked by process 30798. HINT: See server log for query details. CONTEXT: SQL statement "SELECT 1 FROM ONLY "public"."customers" x WHERE "id" OPERATOR(pg_catalog.=) $1 FOR SHARE OF x" 疑問点: ・トランザクションAでもBでもcustomersテーブルは更新されないのに、なぜshared lockが必要なのか? ・shared lockが必要だとして、(exclusive lockではない)shared lockだけでなぜデットロックが発生するのか? ・どう解決すればいいのか?あるいはどう深く調べればいいのか? よろしくお願いします。
よくわかんないけど、ヒントくれてるんだから、その通りにしたら? > HINT: See server log for query details.
>>245 サーバのログには、実行中のSQLが出ているだけでした。
つまり insert into table1 .... と update table2 set .... が表示されているだけで、
ほかに手がかりは載ってなかったので。
>244 shared lock がかからなかった場合、どうなるか考えてみよう。 table1 へ insert しているデータは、当然 customers テーブルを外部参照している関係上、 customers テーブル上に「レコードがある」ことが必要。 仮に customers テーブルにロックをしない場合、 table1 insert → customers delete → table1 commit って順序で処理が起きたら、table1 に、「対応する customers レコードがない」データが作ら れてしまう可能性があるだろ? 従って table1 への insert トランザクションが完了するまでは、customers テーブルを更新 されてはまずい。故に排他ロックがかかる。
長すぎて読む気がしない。。。
>>248 > 仮に customers テーブルにロックをしない場合、
テーブルロックする必要はないですよね。行ロックだけでいいはず。
> customers テーブルを更新されてはまずい。
テーブルの更新はいいのでは?該当行の更新がまずいだけで。
> 故に排他ロックがかかる。
あれ、shared lockって排他ロックのことなんでしょうか。
読み取り用のロックではないのですか?
>>247 ありがとうございます。そこを読む限り、排他ロックではなくshared lockだからデッドロックは起こらないはずなんですよね。
以下引用
> PostgreSQL 8.1では共有ロックによって問題を解決
>
> このような外部キーの問題は、共有行ロックを導入することによって解決できる。
> 共有ロックでは、共有ロックを発行するトランザクションはお互いに相手をブロックしないため、
> 外部キーをめぐってトランザクションがお互いにブロックして並列実行性を損なうこともないし、
> 外部キーが原因のデッドロックをひきおこす心配もなくなる。
結局、原因はわからずじまいか。
>>244 table1かtable2にcustomersを更新or削除するトリガーでも張ってるんじゃない?
Postgresqlの入門書は今読むならどれがいいでしょうか。
新しいシーラカンス本でないねぇ。
>>244 ログにShareLockと書かれているのはデッドロック時のお決まりの文言。
実際に何のロックがかかっているかはpg_locks見ないと分からないよ
OS X上で使用していますが、MySQLのSequel Proの様にGUI上でCSVのエクスポートとインポートができるアプリってありますでしょうか。
phppgadmin
pgAdmin
素のpgAdminではインポートはコマンドベースでしかできない
Navicat
話題は?
9.2どうよ?
Windows7 x64, PostgreSQL 9.2.1.1(x64) でApache,PHP等と連携したデータベース構築を試みています。 UTF-8エンコードとしてdb作成し、そこにテーブルを作り INSERT文を複数列作成したUTF-8文字コードのtextファイルを \i コマンドで読み込ませると 以下の2種類のエラー羅列で埋まります。。 character with byte sequense 0xef 0xbb in encoding "SJIS" has no equivalent in encoding "UTF8" invalid byte sequence for encoding "SJIS": 0x82 0x30 このテキストファイルをSJISに無理やり変換すれば問題無くINSERTされますし(当然化ける文字も有り)、 エラーを吐く行などをペーストしてコマンドプロンプトから直接実行してもうまく行きます(ただし表示させると一部化け有り) UTF-8テキストのまま実行するにはどうしたらよろしいでしょうか・・・助言のほどよろしくお願いします
コマンドプロンプトの文字コードをUTF8にすればいい。chcp 65001 そもそもコマンドプロンプトじゃなくてGUIツールを使いなさい。
266 :
264 :2012/11/30(金) 22:20:00.03 ID:???
レスありがとうございます 取り敢えずCMDの文字コードはchcpで変更してみましたが結果は同じでした まあ、これは入出力・表示文字コードの問題なのでファイル入出力とは関係ないとは思ってましたが(合ってるかな?? GUIツール・・・ということで最初に思い立ったのはpgAdminIIIについてるSQLクエリ実行ツール?でやってみたら上手く行きました!! 今までTeraTermでLinuxのDBサーバにアクセスしてCUIで弄ってたので目から鱗です。 他にもGUIツールってあるんでしょうか。 が、、しかしあまり原因がはっきり解ってない上に pgAdminIII が多機能過ぎてついて行けてない自分がいます。。orz...
コマンドプロンプトの文字コードだけ変えてもフォントの変更もしないと UTF8の日本語はまともに扱えなかったはず。 DBもファイルもプログラムもCUIでの操作も全部同じ文字コードで扱わないと駄目。 >他にもGUIツールってあるんでしょうか。 ちょっと上にも書いてるがフリーでメジャーなのはpgAdminIIIとphpPgAdmin、 商用でもよければNavicatが便利。ただしNavicat Premiumじゃなければ機能的に微妙
>>266 psqlの\iはlinuxで言えばcat ファイル | psql -cと同じこと
クライアントの文字コードに引きずられる
>>266 psqlでログインした後、\iの前に
set client_encoding to 'utf-8';
すればINSERTスクリプトは通るんでは。
その後SELECTしたら文字化けしそうだけど。
話題は?
すいません、今考え中
テーブルの最後の50行だけ頂戴って時はどうしますか?
order 条件逆にして、top 50 順序が重要なら、その結果を元の orderでソート
>>273 あざっす^^
reverseのreverseってパフォーマンス的にどうなんすかね
@PostgreSQLに両方やらせる
APostgreSQLに最初のreverseを、クライアントプログラムで更にreverse
どっちが速いですかね?
※接続は1つだけの個人専用システム
今時 50件程度ならパフォーマンス云々はあまり気にしなくていいんじゃね。
あざっす^^ @でいきます ひょっとしたらよく判らん最適化されるかもしれないし
話題は?
278 :
NAME IS NULL :2012/12/14(金) 01:23:44.44 ID:yD0VPqJ9
すんません、質問です。 testテーブルはこんな感じのとき、 key ver value --- --- ----- CPM 1.4 1000 CPM 1.2 500 OS2 5.0 2000 OS2 4.0 1600 WIN 3.1 50 WIN 95 200 WIN 98 2 --- --- ----- CREATE UNIQUE INDEX test_pkey ON test USING btree (key, ver); 以下の実行結果のように key ごとに、それらの ver が最大の value を選択するSQLを検討中です。 実行結果 key ver value --- --- ----- CPM 1.4 1000 OS2 5.0 2000 WIN 98 2 --- --- ----- いまのところ2つ考えてみましたが、もっと速いSQLってありますか? SQL1:Total runtime: 6.492 ms SELECT key, ver, value FROM (SELECT key, ver, value, rank() OVER (PARTITION BY key ORDER BY ver DESC) AS rnk FROM test) AS temp WHERE rnk=1; SQL2:Total runtime: 3.539 ms SELECT * FROM test AS temp WHERE NOT EXISTS ( SELECT * FROM test WHERE key=temp.key AND ver>temp.ver ); ちなみに、テーブルは key が20種類くらい、keyごとにvalueが20個ぐらいです。
SQLの入門書を最後まで勉強してみると良いよ。 特別PostgreSQL用でなくても大丈夫だよ。
知ってりゃ凄く簡単なことでも、知らない奴は凄く複雑にするんだな。。。
283 :
278 :2012/12/15(土) 10:28:22.52 ID:???
>>281 同じ条件で試してみました。
Total runtime: 3.204 ms
おぉ、僅差かもしれないけど、これが一番速いですね。ありがとう。
>>279 考えてみたらSQLの本なんて1度も読んだことなかった。
自分には一読が向いているような気がしてきたよ。どうもです。
>>282 まさに、それだね。
284 :
NAME IS NULL :2012/12/19(水) 22:48:14.21 ID:/zfe6YaM
質問です。教えてください!!! PostgreSQLの同期レプリケーションで、マスタサーバがダウンした時に、 実行されているトランザクションがスレーブでコミットされたか、 アボートされたかを確認する方法ってありますか? ユーザにはコミット応答がかえって来ませんでしたが、スレーブを昇格させて 新マスタにしたところ、コミットされデータが更新されている事象が発生しています。。。 よろしくお願います。
同期取れてるんだから、コミット済みに決まってるだろ。
bit varying に対する set_bit とか get_bit って無いんですか? PostgreSQL 8.4 です。
overlayとsubstringでやるとかかなあ、使ったこと無いが
そんなところですかねぇ・・・。 bytea だと簡単なのに、そうすると & とか | が使えない・・・。
>>280 英語の質問です
〉Fix the syslogger process to not fail when log_rotation_age exceeds 2^31 milliseconds (about 25 days)
not to じゃないの?
timestamp without time zone の【最遠の未来】を返す定数ってありましたっけ?
>>291 まさにそれでした。使えることを確認しました。ありがとうございます。
未定義をnull にしたくなかったので助かります。
物のついでに INT4 の最大値をあらわすものをググっているがこっちは発見できないな。 使い道は無さそうだから別に無くてもかまわないが。
>>292 だが、その方法を使うと、実際の日付がその値を超えたところで矛盾するから
気をつけたほうがいいな。だいたい2943世紀ごろだが。
のちの2943世紀問題である
どこに質問したらよいかわからなかったのでここに失礼します。 PostgreSQLのテーブル単位のレプリケートが必要になっていろいろと調べているところですが、 slony-Iは、多対一の非同期レプリケート(のようなこと)は設定で出来るか知っている方おります? 具体的には複数のサーバーにレプリケートしたいテーブルがあって、 それらはサーバー同士の間でもユニークなレコードを持っていて、 これらを1つのサーバーに UNION みたいに集めたいのです。 難しいようでしたら自作しようと考えているのですが slonyで可能であれば楽できるなと思っているところです。
>>289 "fix * to not"でググると、良くある言い回しみたいだよ。
てか、not fail when 〜に修正したのでそもそもおかしくない
sysloggerプロセスが25日有効だったlogをrotationしようとするときに、今までは死んでたのを修正したってことじゃないの?
じゃなくて、rotationしそこなうのを修正したのか
Ubuntu12でPostgreSQL使ってるけど、apt-get installするより自前でコンパイルしたほうが速いバイナリができるとか、そういうびっくりなことってないかな。 だれか検証したひとがいたら教えて。
自前でコンパイルする方が速い可能性はある。 コンパイル時に、PCに載ってるCPUに応じたコードを生成させたりできるから。
>>302 速くなる可能性があるのは分かるんですが、実際速くなった人はいるかなと思って。
CentOSだとrpmパッケージがi386でコンパイルしてるから、いまどきのCPUならコンパイルし直したほうが速くなるけど
Ubuntuはdebパッケージがi686でコンパイルされてるようだから、変わらないかもしれない。
でもPostgreSQLのコンパイルはめんどくさいので、だれか試した人がいたら教えてください。
>>303 めんどくさいって、ふつーに configure;make;make install だけだろ
まぁGCC入れたりライブラリ入れたりしなくちゃならんから、面倒くさいというのも理解できる。
9.3出たら起こしてくれ
307 :
NAME IS NULL :2012/12/31(月) 18:53:59.09 ID:vZpLnkOO
通信したら膨大なデータはどういう仕組みで降りてくるの? クライアントが『今はこれだけしか受け取りきれないよ』って時はどうするの? データのポインタみたいなのをコネクション毎に保持しておくて 『ここまで送った』しおり代わりとするの?
どの層の話?TCPレベル?カーソルレベル?プレゼンテーション層でのPostgresのデータ表現がどうなってるかは知らないけど
データベースに限った話じゃないならスレ違い TCPの確認応答とか、ウィンドウ制御の話。
ああじゃあデータベース側は、気にせずいつも通り 最寄りのノードにデータ送る作業するだけで 後はOSI参照モデルを実装した外部システムが巧いことやってくれる算段なんですね
状況がわからんけど ミドルで全部受け取り済みな気がするなあ
313 :
NAME IS NULL :2013/01/06(日) 16:17:39.96 ID:PFtSFSQD
犯罪者個人に対して告訴状を違法派遣・偽装請負・偽装出向・多重派遣の被害者が作成(刑事告訴は無料) or 司法書士が代筆(料金は5万円ぐらい)※コピペ歓迎 ↓ 告訴状を【検察の直告班】に郵便局の内容証明付で送付(疎明資料・証拠にはICレコーダー、スマホによる録音が適しています) ↓ 審査 → 不受理 → 告訴状再提出または刑法 第193条で訴えを起こす ↓ 受理 → 告訴事実を認め示談交渉(↓) →示談成立 → 法廷相場50〜100万円の示談金 ※示談拒否が良い ↓ ↓ 事案化← 前科あり ←示談不成立(↓)→ 示談外交渉→ 犯罪者の年収半額×最大懲役年数の和解金支払い※推奨 ↓ ↓ ↓ 起訴 →公判 → 罰金刑=前科(起訴事実を認めてるため)→追討ち民事訴訟 ↓ 審査 → 起訴(強制捜査・留置場)→ 公判 → 懲役刑などの厳罰(反省が認められないため)→追討ち民事訴訟 ↓ 不起訴、起訴猶予 ↓ 検察審査会法第30条(検察審査会へ申し立て)→ 起訴 → 起訴後は同上 刑法 第193条(公務員職権濫用)で検察事務官を刑事告訴 → 同上 ◎告訴→告訴受理→示談交渉→厳罰を求め示談不成立→示談外交渉→和解金支払い・和解契約(公正証書・即決和解で秘密保持契約) ◎偽装請負・出向・違法派遣事件では派遣・出向先両方の代表者、役員、現場責任者に告訴できます。 前科がついた犯罪者が法人の代表であれば公的な入札からの排除、取引先や顧客との契約解除など社会的制裁・批判に晒されることから辞職または解任が妥当、役員・社員であれば懲戒を想定。 ◎事業者内部の加害関係者による刑事告発(刑事訴訟法239条1項)も可能です。 加害者本人、管理間接部門の社員が刑事告発に踏み切る場合も和解金による解決が妥当です。 注意:告訴が受理されない理由 ●3年間(※)の時効が過ぎたもの ※違法派遣 ●同一事実について過去に告訴取消しがあったもの ●関連する民事訴訟を有利に導く目的の場合 ●証拠が希薄なもの ※被害者が契約時に違法派遣・偽装請負・多重派遣と知っていても刑事告訴は有効です。
>>308 外しているかもしれないが、
ORDER BYして LIMIT で クライアントがほしい分だけSELECT するという話?
テーブルによっては漏らさずとることは出来ないけど。
>>314 膨大なデータを、クライアントが遅延評価で受け取りつつ
クライアント側で専門の重い処理をしていくとき
カーソルでいいじゃん
クライアントの処理に合わせてサーバからデータを数行ずつ取得して行きたいとかならそうだな
318 :
NAME IS NULL :2013/01/08(火) 11:52:03.98 ID:5ntVS72y
告訴の趣旨 被告訴人は、以下に該当すると考えるので、被告訴人の厳重な処罰を求めるため告訴します。 職務経歴書を提示した事前面接を実施 または 偽装請負 または 偽装出向 労働者派遣法第26条(契約の内容等)、職業安定法第44条(労働者供給)に違反 多重派遣・多重出向 労働基準法第6条(中間搾取の禁止)に違反 疎明資料 事前面接日時、場所、出席者、資料のコピー、音声記録 就業場所・就業期間・就業時間 指揮命令 指示を誰が行っているかの記録、音声記録 仕事で使う道具や、資材の負担(所有)のあり方 業務で使用しているパソコン・備品などの所有者 契約書 請負、雇用契約書、出向指示など書面のコピー 刑事告訴ガイダンス ★痴漢も民事でなく刑事事案ですが、裁判所が和解金を被害者に支払わせて解決するのが絶対的過半数です。和解で解決しない事案、つまり公訴までいって判例となる事例を探すほうが難しいことでしょう。 ★録音は一方の当事者が取る限り合法です。※加害者に録音の同意を求める必要はありません。 ★告訴状を検察に提出しても受理されなければ加害者側には知られることはありません。不受理の場合は何事も起きてないように粛々と振る舞ってください。 ★告訴を取り下げるとき検察に提出した資料は全て返却されます。また検察があなたが提出した証拠をあなたの許可なく裁判の証拠として使用はできません。告訴を取り下げたのちの録音資料には当事者の立場が失われるため証拠能力はありません。 ★和解時に告訴した事実は秘匿事項となります。犯罪者が秘密保持契約に違反した場合の損害賠償金は「即決和解」か「公正証書」で最低5000万円〜にしましょう。支払いを拒否すれば強制執行手続きを(裁判不要)してください。 ★派遣会社や事業会社が同業者に貴方の情報をリークしたなら同業者(又は競合他社)に弱みを握られることになります。 余程信用のおける相手でなければ、リークはできないでしょう。信頼のおける方にしても、その方の口が軽ければ、いずれ事実は分かります。 ★リークの情報を得た事業者のなかには、リークの事実を貴方に教えてくれる方がいるかもしれません。その際は損害賠償金で得たお金の3割程度を謝礼金として渡してください。
319 :
NAME IS NULL :2013/01/09(水) 08:16:56.38 ID:4HXcyysT
※コピペ歓迎です。 違法派遣(偽装請負・多重派遣・偽装出向・事前面接等)についての刑事罰 【告訴権者=業務委託、準委任、共同受注、業務請負契約および特定派遣(契約・正規)、一般派遣、正規社員】 @職業安定法第44条の労働者供給事業の禁止規定に違反(1年以下の懲役または20万円以下の罰金) ■偽装請負・多重派遣・偽装出向・多重出向 ■事前面接(顔合わせ・面談・職場見学等)と履歴書・職務経歴書・スキルシート等提出による労働者の特定(※) (音声録音で立証可能) A労働基準法第6条(中間搾取の禁止) (1年以下の懲役又は50万円以下の罰金) ■多重派遣・多重出向 ※違法派遣(派遣労働者の特定)→派遣法で認められた派遣労働者ではない→労働者供給事業→職業安定法44条違反というの が前提となる法解釈となります。派遣法における罰則が軽微なのは法律の不備や労働者軽視などが原因ではありません。 違法派遣は全て職業安定法44条で裁くことが可能なため、刑罰の重複を避けるために派遣法には軽微な罰則(主に裁量行政による)しかないのです。 使用者に有利な民事訴訟や労働関係諸局への通報等の対極にあるのが書面(告訴状)による刑事告訴(※告訴先は検察の直告班)です。 労働関係諸局への通報・斡旋による軽微な「適正化」や監督・指導に対して、法律に定められた刑事罰を問うことになり、 違法派遣業者にとって有罪は考えられる限り最大の処罰となります。同時に刑事罰を受けた 担当者が取引先に与える悪印象を考慮すれば、通常会社側は告訴が受理された時点で告訴取り下げに 動くのが妥当でしょう。懲役、前科がつく刑罰が下される可能性から、告訴取り下げの和解金は高額となることが多いのです。 告訴の流れとしては、 刑事告訴⇒告訴受理⇒告訴取下げ要請⇒取下げ和解金入金⇒告訴取下げ となります。告訴の懲役刑適応は犯罪者個人に対してのみですので、告訴する対象は 派遣先・派遣元 社長 派遣先・派遣元 責任者・管理役員・取締役 派遣先・派遣元 人事管理担当者・人事管理役員・取締役 が妥当です。刑事告訴取り下げの和解金額は犯罪者個人と交渉するとよいでしょう。(告訴状は人数分提出する必要あり)
PostgreSQLで、あるSQLが「条件で絞ってからjoinしている」のか「joinしてから条件で絞っている」のかを調べる方法ってありますか。 あるいはexplainで分かるとして、explainの出力のどれを見ればいいですか。 10個くらいjoinしているけども、条件で絞ってからjoinすれば (レコード数が 少ないので) 大した時間がかからないだろうと思われるSQLがあります。 しかし計測してみるとそれなりの実行時間がかかっていました。joinを外したところ、大幅に高速化できました。 なので、もしかしたら内部では「joinしてから条件で絞っている」のではないかと 疑っています。それを調べたいです。
sql書いてるならexplain見ればだいたい把握できるだろ 理解力・想像力が乏しいのであればpgadminのグラフィカルな奴でも使えば。
>>322 ありがとうございます。
explainで調べたところ、limitより先にjoinされてました。
これだと相当な量のレコードがjoinされてしまい、遅くなって当然でした。
そこで今度は、joinより先にlimitで絞り込む方法について教えてください。
手元で試したところ、副問い合わせを使って先にlimitで絞り込み、
その結果を使って外側でjoinすると、確かに速度は改善されました。
しかし副問い合わせを使うよう変更したSQLは、カラム数が多いこともあって
内側と外側のselect文で重複したカラム名がたくさんでてしまい、
メンテナンス性の悪いSQLになってしまいました。
できればもとの素直なSQLのまま、joinのタイミングだけlimitよりあとにするよう
変更したいです。
そのようなことはPostgreSQL (9.1) でできますか?
一応できると答えておく。 やり方は自分で考えろ。
>>323 ワイルドカード"*"を使えばいいんじゃないかな。
>>324 こういう負け惜しみ回答がつくということは、joinのタイミングを指定することがPostgreSQLではできないということですね。
>>325 いえ、ワイルドカードは使えません。たとえば:
select x.a, x.b bar.name, baz.name
from (select a, b, bar_id, baz_id from maintbl where a>=:var1 and b<=:var2) as x
join bartbl on x.bar_id = bartbl.id
join baztbl on x.baz_id = baztbl.id
ここでワイルドカードを使うと、内側のSQLでのみ必要なカラムが外側にも出てきてしまうので、だめです。
select x.*, bar.name, baz.name
from (select a, b, bar_id, baz_id from maintbl where a>=:var1 and b<=:var2) as x
join bartbl on x.bar_id = bartbl.id
join baztbl on x.baz_id = baztbl.id
>>326 それで、limitをどこに書くって言ってるわけ?
そもそも limit で絞り込んで join するのと、join して limit するんじゃ結果が違うことがあるから、 「joinのタイミングだけlimitよりあとにする」なんてできる DBMS はないと思うが…
>>327 説明不足でしたので、サンプルのSQLで説明します。
-- もとのSQLは、joinしてからlimitで絞るので遅かった
select main.id, main.value, main.foo, main.bar, main.baz,
aaa.name, bbb.name, ccc.name, ddd.name, eee.name
from main
join aaa on main.aaa_id = aaa.id
join bbb on main.bbb_id = bbb.id
join ccc on main.ccc_id = ccc.id
join ddd on main.ddd_id = ddd.id
join eee on main.eee_id = eee.id
where main.value >= :value_from
and main.value <= :value_to
order by main.value
limit 10
offset 0
-- これを、limitで絞ってからjoinするように変更すると速くなった
-- しかしselectで指定するカラム名に重複が多く、メンテしにくくなった
select tmp.id, tmp.value, tmp.foo, tmp.bar, tmp.baz,
aaa.name, bbb.name, ccc.name, ddd.name, eee.name
from (
select main.id, main.value, main.foo, main.bar, main.baz,
main.aaa_id, main.bbb_id, main.ccc_id, main.ddd_id, main.eee_id
from main
where main.value >= :value_from
and main.value <= :value_to
order by main.value
limit 10
offset 0
) as tmp
join aaa on tmp.aaa_id = aaa.id
join bbb on tmp.bbb_id = bbb.id
join ccc on tmp.ccc_id = ccc.id
join ddd on tmp.ddd_id = ddd.id
join eee on tmp.eee_id = eee.id
>>328 >そもそも limit で絞り込んで join するのと、join して limit するんじゃ結果が違うことがある
それはその通りなのですが、結果が同じ場合もあるわけで、その場合は人間が判断してjoinのタイミングを指定できるようにしてくれたほうがうれしいです。
limit以外に絞り込む手段は無いの? 最終結果以外でlimitが入るのは何かがおかしい。
>>331 >limit以外に絞り込む手段は無いの?
where句でも絞ってますよ。
ただwhereで絞っても数百〜数千件くらいまでしか絞れないです。
order+limitでは10件とか20件に絞りこみます。
>最終結果以外でlimitが入るのは何かがおかしい。
そうなんですか?
まあ別に「最終結果以外でlimitを使いたい」というわけではなく、「可能な場合はlimitを先に実行してからjoinを行う」ことをPostgreSQLが自動的にやってくれるくらい賢ければそれでいいです。
今はやってくれないので、仕方なく人間が指定するしかなくて、その方法を質問しています。
>>330 >>329 のクエリが両方常に同じ結果になるというのなら、mainとaaa〜eeeまではすべてn対1対応になっているのだろうから、
left joinの外部結合に書きなおせばいい。
>>326 > ここでワイルドカードを使うと、内側のSQLでのみ必要なカラムが外側にも出てきてしまうので、だめです。
俺は
>>325 じゃないから、
>>325 の本心はわからんが、内側のこと言ってるんじゃないのか
select x.a, x.b bar.name, baz.name
from (select * from maintbl where a>=:var1 and b<=:var2) as x
join bartbl on x.bar_id = bartbl.id
join baztbl on x.baz_id = baztbl.id
>>329 を見る限り駆動表がmainでlimit 10が普通に効きそうなもんだが。
explainの先頭の表がmainでなかったり、nested loop joinじゃなくて
hash joinが出てきたりしたら、統計がとられていないかjoinするテーブルの
idにindexが張られていないことが思いつくが。
あと、joinするテーブル数が12以上だったらgeqoで最適化がはしょられているとか。
>>335 329では「order by main.value」と書いてますが、実際にはここがちょっと複雑な計算式になってます。
そのせいでプランナがうまく効いてくれないのでしょうか。
また副問い合わせにする前のSQLだと、explainの先頭は Limit になってます。
hash joinは出てこずNested LoopとIndex Scanがばかりです。
joinするテーブル数は12まではいかないですし、どれもidはprimary key (sequence) なのでindexは作成されてます。
その複雑な式でインデックス作るとか?
338 :
NAME IS NULL :2013/01/17(木) 19:16:36.78 ID:3WZzA8BL
win8pro 64bit postgres 9.2 の環境でログのローテーションが機能しないんですが 同様の症状の方いませんか? ファイルサイズ指定でローテーションしようとしてます 設定は何度も確認しました win7 postgres8.4では動いてて 同じ設定なのですが
>>338 基本的な問題の切り分けでもやってみたら?
OSかPostgreSQLのバージョンをどちらか合せてやってみてどうなるか
340 :
NAME IS NULL :2013/01/17(木) 19:49:16.56 ID:3WZzA8BL
win8 64bit postgres9.1ではローテーションが機能しました。 9.2のバグ? 9.1に戻すか、次を待つか考えます とりあえず報告まで
341 :
NAME IS NULL :2013/01/17(木) 20:04:12.76 ID:EwS78HY0
パワハラ犯罪にたいする刑事罰(※本投稿のコピペ歓迎です) 人事原則 1 現行法では、社員が仕事を怠けたり、能力不足、就業規則違反、目標を達成できなくても解雇をしたり叱責することは違法です。どんな駄目社員、嘘つき社員、怠け者も定年まで解雇が違法なのが現行の正社員制度です。 2 パワハラは社風にあわない社員、成績の振るわない社員を自主退職に追い込む言わば人事的措置として用いられることが多い。 ※違法な解雇の和解金相場は、労働審判で3ヶ月、通常裁判で1年以上の報酬、さらに社員が和解を拒めば復職が可能です。弁護士への着手金は12〜15万円、和解拒否なら20〜50万円程度。 人事部・ホットライン・御用組合へ直訴 メリット: 一時的緩和や人事異動 デメリット: 役員へ情報筒抜け、危険分子の烙印(情報漏洩がホットライン直訴者に多いのは人事部の常識)、パワハラ放置で自主退職に追い込まれる 民事訴訟・調停・労働審判 メリット: 損害賠償 デメリット: 裁判費用、解雇措置、民事不介入で刑事事案化を阻止、長期係争、パワハラ上司の継続雇用 刑事告訴 メリット: 1パワハラ上司の解雇・懲戒、または2多額の和解金、1と2どちらでも被害者の雇用は維持 デメリット: 人事異動(出世コースから外れる) ◎録音は一方の当事者が取る限り合法です。※加害者に録音の同意を求める必要はありません。 ◎告訴受理後の和解金は加害者の資産・収入に応じて変えてください。犯罪者の昨年の年収の半額程度×最大懲役年数が妥当です。 ◎パワハラの被害についての告訴は1侮辱罪2脅迫罪3強要罪4威力業務妨害罪5傷害罪の順序で行ってください。警察・検察の協力(犯罪者の自宅・職場の強制捜査、留置所勾留)により罪の立証が楽になります。 ◎刑事告訴した社員を解雇したり処遇面で著しい差別を行うことはないでしょうが、出世や管理職以上の昇進の可能性はあきらめるべきでしょう。 ◎刑事告訴は民事訴訟と違って裁判による被害者への2次被害にありません。検察庁が被害者に代わって訴えをおこすので、無料で、時間と手間も告訴状をかくことと音声録音を残すだけです。 ◎和解契約(公正証書・即決和解)では告訴した事実は秘匿事項となります。犯罪者が秘密保持契約を違反した場合の損害賠償金は、最低5000万円〜にしましょう。
342 :
673 :2013/01/18(金) 16:00:00.26 ID:???
すいません。pg_hdaを以下のように設定しているのですが、 外部に対してもリッスンしています。 local all all password host all all 127.0.0.1/32 password あと、postgresql.confのlisten_addressesはコメントアウトしています。 ここ以外に変更しなければならない場所はあるのでしょうか? 宜しくお願いします。
343 :
342 :2013/01/18(金) 16:00:58.58 ID:???
あ、すいません。pg_hdaではなく、pg_hba.confでした。
postgresql.confの設定をミスってるか、外部からアクセスできると勘違いしてるかのどっちかじゃないの?
345 :
673 :2013/01/18(金) 17:58:18.27 ID:???
>> 344 postgresql.confは未設定で、 外部からnmapで見たら開いていて、更にTELNETでもつながる状態です。
>>345 何言ってるのかわかんない。
grep listen_address /path/to/postgresql.con
と
netstat -a | grep postgres
の結果を貼って。
まさか、postgresql.confを変更してから、デーモンを再起動してないとかいうことじゃないだろうな
348 :
673 :2013/01/18(金) 18:12:00.19 ID:???
>> 346 以下のようになりました。 [grep listen_address postgresql.conf] #listen_addresses = 'localhost' # what IP address(es) to listen on; [netstat -a | grep postgres] tcp 0 0 *:postgresql *:* LISTEN tcp 0 0 localhost.localdo:35514 localhost.lo:postgresql TIME_WAIT tcp 0 0 localhost.localdo:35519 localhost.lo:postgresql TIME_WAIT tcp 0 0 localhost.localdo:35517 localhost.lo:postgresql TIME_WAIT tcp 0 0 localhost.localdo:35516 localhost.lo:postgresql TIME_WAIT tcp 0 0 localhost.localdo:35512 localhost.lo:postgresql TIME_WAIT tcp 0 0 localhost.localdo:35513 localhost.lo:postgresql TIME_WAIT tcp6 0 0 [::]:postgresql [::]:* LISTEN 宜しくお願いします。
349 :
342 :2013/01/18(金) 18:13:36.36 ID:???
>>348 確かに、postgresql.confでコメントアウトしていて、*でlistenしてるな。
うーん、わからんわ。ごめん。
PostgreSQLを複数インストールしていて、編集したpostgresql.confが今起動しているサーバのものじゃ
ないのかなぁ。
>>342 > すいません。pg_hdaを以下のように設定しているのですが、
> 外部に対してもリッスンしています。
で、どうしたの? って話なんだけど。何を困ってるのか分からん。
クライアントから接続できないとかなら、各種ログ出せば?
>>351 localhostからのconnectだけを受け付けたいのだが、それができないというのが困ってることだと。
もちろん、Firewallで制限したり、pg_hba.confで制限したりはできるけど、localhostだけでlistenできた方がいいでしょ。
353 :
342 :2013/01/18(金) 18:28:08.04 ID:???
>>350 > PostgreSQLを複数インストールしていて、編集したpostgresql.confが今起動しているサーバのものじゃないのかなぁ。
念の為確認してみます。
>> 351
ローカルからのみの接続にしたいのです。
例えば、VPSでWebアプリが使用する為にPostgreSQLを起動したいんだけど、デフォルトで 全IPアドレスからのconnectを受け付けることしかできないんじゃ困るでしょ。
355 :
342 :2013/01/18(金) 18:30:25.15 ID:???
>>350 今findしてみたらpostgresql.confは1つしか存在しませんでした。
>>355 pg_hda.confに書いてあるのは
>>342 だけで後は全部コメント行なの?
postgresのサービスを再起動して設定を有効にした?
外部からpostgresにアクセスした状態で
netstat -a | grep postgres
とすると結果はどうなる?
348のnetstatの結果を見ると、 ひょっとしてWebアプリとかで内部経由でpostgresにアクセスしようとしてる? postgresのpg_hda.confの設定は認証の許可を設定できるけど、ポートを閉じたりできないし、telnetのアクセスにも関係ないよ。
psqlで接続してSHOW listen_addresses;してみる 起動オプションでパラメータを上書きしてるんじゃね?
359 :
342 :2013/01/18(金) 18:53:53.15 ID:???
色々とありがとうございます。 それぞれ確認してみますので、少し待って下さい。
どのレイヤーで弾かれてるのかまず明らかにしろよ
どのレイヤーで弾かれてるのかまず明らかにしろよ
大事なことなので連投してしまいました すみません
アホが一人いるだけで普段の数倍盛り上がるな。
レコードの有無を調べるSQLは、 SELECT 1 FROM <table_name> WHERE <条件> で良いのでしょうか?
>>365 SELECT 1
じゃ常に1が返るだろう。
SELECT COUNT(1) > 0 FROM ・・・
とか?
って0件で判別するのなら 1 だけでいいか
368 :
365 :2013/01/19(土) 16:20:51.92 ID:???
count使うと遅いですよね。たぶん。 365の方法が最速な気がしないので質問する次第です。 言葉が足りず、すみません。
limitでも付けなきゃcountとたいして変わらんだろ
existsつかってみたら
371 :
365 :2013/01/19(土) 19:19:32.77 ID:???
INDEXありゃ一発だしな exists はlimitあわせればなんとか
>>348 postgresql.conf の listen_address をコメントアウトしてるみたいだけど
逆にコメント外して listen_addresses = 'localhost' にしたらどうなるの?
それでも netstat が変化しなかったら、読まれてないか上書きされてるかのどちらか
localhost 以外にも自分の普通のIPつけるとかしてみたらいいんじゃないかな
あと netstat には -n つけるのがオススメ
で、原因はなんだったの?
NAPTで思ってたのと違うホストにつながってた可能性もあるな
>>356 はその辺も解決できる提案だとおもうけど、結果はられてないし結論は不明だけど。
376 :
NAME IS NULL :2013/01/27(日) 00:41:09.08 ID:wayacMrf
VACUUMが回収できる行だと判断する条件について質問があります。 実行中のトランザクションの最も古いxidの値が、 行のxmaxより大きい場合にVACUUMしてよい行と判断していると考えてよいですか?
377 :
NAME IS NULL :2013/01/27(日) 00:44:44.45 ID:wayacMrf
ストリーミングレプリケーションの、スレーブで実行する参照処理には、トランザクションIDが発行されないようですが、 行の可視性はどのように保証しているのでしょうか? スナップショットを取得して判断している?マニュアルを読んでも、スナップショットについて理解できなかったので、可能であればスナップショットについて教えてください。
ソース読めばエエやん。
スレーブにはトランザクションって概念が無いじゃない。
PostgreSQLのレプリケーションは非同期だから 確実に最新の値を読む必要があるならばマスターを読みにゆくしかないのでは?
datetimeの表示で、秒未満を切り捨てて表示するにはどうしたらいいでしょうか。 たとえば select created_at from exampletable where id = 1; を実行したら 2013-01-01 12:34:56.389940 と表示されます。 これを 2013-01-01 12:34:56 と表示させたいです。
単にピリオド含めて右側を捨てるような文字列操作でいけるんちゃう? 少数以下一位で四捨五入とかしたいならもうちょっとややこしいだろうけど。
そんな定番な質問は調べればすぐに出てくるでしょうに・・・ to_char(created_at, 'YYYY-MM-DD HH24:MI:SS') でいいんでない?
TIMESTAMP(0)でキャストするとかね。 元からテーブル作成時にそうしてしまう手もあるけど。 SELECT NOW()::TIMESTAMP(0); とか CREATE table (t TIMESTAMP(0),・・・・ とかね
おっと、 CREATE TABLE table名・・ね
>>382-383 説明がたりませんでした。
いちいちキャストとか変換とかせずに、一括して秒未満を切り捨てて表示するような方法はないでしょうか。
>>384 テーブルスキーマでそのような指定ができるんですね。なるほど。
うーん、スキーマを変更する権限が自分にあればよかったんですけど。
オプション替えてPostgreSQLをビルドしなおすとか?
というか、君は何ができるの? あれもできない、これもできないって後から言うくらいなら どこまでできるのか先に提示してよ。
VIEWが作れるならVIEWはさめばいいし、UPDATEできるなら 一発で今のデータの小数点以下を消してしまえばいいし
select count(*) と select(id) では前者のほうが速いようなんですが、これはよく知られたことなんでしょうか。 PostgreSQL 9.1で実験したら: select count(id) from users; -- 45ms select count(*) from users; -- 34ms 自分の間違いじゃないかと思うんですが、もし違いがあるなら教えてください。
昔ならともかく、今は同じじゃないかなぁ。 ちなみに順番逆にしても*の方が速い?
>>391 何度か実行してみた結果です。順番変えても変わらず。analyzeしてもそう。
>>392 > 同じだと思うよ。
ですよねー。
> 9.2からはインデックスオンリースキャンが実装されているので事情が違う。
9.2からは count(id) と count(*) のどっちが速くなるんですか?
本来ならインデックスオンリースキャンでも変わらないようにみえます。実験してないけど。
>>394 > 9.2からは count(id) と count(*) のどっちが速くなるんですか?
9.2で何の事情が違うというのは、9.1までのCOUNT(*/id)との動作が違うということで、どちらかが
どうということではないよ。
> 本来ならインデックスオンリースキャンでも変わらないようにみえます。実験してないけど。
そう、インデックスを使えるなら、COUNT(*)もCOUNT(id)も9.1より速くなる。
>>395 > COUNT(*)もCOUNT(id)も9.1より速くなる。
そういうことを聞きたいんじゃなくて、count(*)とcount(id)で速度に違いはあるのかということです。
9.2になっても、違いはないはず -- Yes or No?
どちらが速くなるかと聞かれたので、どちらも速くなるとコメントした。 COUNT(*)とCOUNT(id)は、インデックススキャンが使われるなら、やっぱり同じだろう。
実行計画はどちらも同じなの?
ソースからmakeして、バイナリしか残ってないんだけど configureオプションに何を指定したか、バイナリのオプションで表示できないのかな?
pg_config も無いの?
9.3出たら呼んで
pg_trgm更新遅くなりすぎて使い物にならん
INSERT SELECTした時、SELECT部分で帰ってきたデータを取得する事って出来ますか? テーブルA,B,Cてあって、BはAのIDを、CはBのIDみたいに親子関係に有った時、 テーブルAで採番されたIDを持つコピー後データをBに、テーブルBで採番されたIDを持つコピー後データをCに て感じにしたいんだけど、今のテーブル構造だとコピー元、コピー後のマッピングができなくてどうにも出来ないんだ。 それぞれのテーブルにold_idみたいに、コピー前IDを持つようにしたほうが早い?
バージョン書いてないから対応してるかどうかわからないけど、returningで調べるといいよ
404じゃないけど。 この板、ほんとスキルが高くて親切な人が多いなあ。 Letsの人かな。 感謝してます。
407 :
404 :2013/03/20(水) 15:41:52.97 ID:???
>>405 こんな物が有ったなんて!
バージョンは9.2なので使えそうです
本当に有難うございます!
9.0でラージオブジェクトを含む初期データをpsql -f でファイルから読み込んで作ろうと思っています lo_importで画像を登録するにはpostgresユーザー権限が必要だけど 実際そのDBを使うのはhogeユーザーっていう状況です importした後にalter lrage objectを使ってhogeユーザーに変えようと思っているんですが、 この時lo_importで発行したoidを変数的なものに入れておくことは出来ないでしょうか 今やっている方法としては、lo_import('ファイル', 1); alter lrage object 1 owner on hoge てかんじでIDを直打ちしているんです
lo_create でつくるとか? 一時テーブル作って、INSERT文でlo_import 使えばそのテーブルにid入ることは入るけど そう言う手はどう?
セセセセキュリティホールが見つかったとか聞いて飛んできました! だだだ大丈夫ですかぁあああ!?
認証不要でDB破壊できちゃうみたいだからかなりヤバげ。 外に晒してなくて信頼できるところからしか接続されないようになってるなら それほど影響ないかもしれないけど。
おまいら、ご存じでしたら教えてください。 ストアド(pl/pgsql)の定義を厳密にチェックするように設定出来ますか? lintに相当するチェック機能はありませんか?
元々Cとかに比べるとかなり厳密。
javaのほうから誘導されてきました。 windows7Pro PostgreSQL9.2.1 で開発しています。 教えてください。 javaでsqlのinsert文を発行するとき String str1 = (String) table.getValueAt(row, 1); String str2 = (String) table.getValueAt(row, 2); String str = "insert into test_numbers (number, date) values ('"+ str1 + "', '" + str2 + "')"; (1)str1が'1'でstr2が'20130427'ならinsertできて (2)str1が'1'でstr2が'2013/04/27'ならinsertできないのですが どうしてなのでしょうか? コンソールから上記sqlを発行すると、(1)も(2)も問題なく処理されます。
416 :
NAME IS NULL :2013/04/27(土) 21:59:14.36 ID:jltwdQnB
>>415 コンソールはクライアントのロカールを見て、日付の書式を自動的に年/月/日に
設定してくれている。
Javaからの接続はこの設定を変えないので、サーバ側で指定された書式(たぶん
月/日/年になっている)が使われている。
年/月/日形式の日付書式を使うには、
サーバのpostgresql.confにある設定を
datestyle = 'iso, ymd'
とするか、毎回接続開始時に
set datestyle to 'iso, ymd';
とすればよい。
どのデータベースでも言えることだけど、 商用ソフトとして作ってるなら、日付書式は予めプログラム側でやっとく方が良いよ。
to_date('$str2', 'yyyy/mm/dd') かな。
日本人の払った貴重な血税から ゴキブリ在日朝鮮人に生活保護が支払われている ゴキブリ在日朝鮮人の一家族で年間600万円である ゴキブリ在日朝鮮人の2人に1人は生活保護だ これより安い給料で働いている日本人が 少ない給料から支払った税金が ゴキブリ在日朝鮮人の生活保護になっている ゴキブリ在日朝鮮人は生活保護をもらって 感謝もせず 当然のような顔をして 毎日パチンコをして遊び暮らしている ゴキブリ在日朝鮮人の犯罪者も非常に多い ヤクザの2人に1人はゴキブリ在日朝鮮人だ 日本社会の寄生虫 ゴキブリ在日朝鮮人 日本から出て行け! ゴキブリ在日朝鮮人
421 :
NAME IS NULL :2013/05/12(日) 05:40:49.34 ID:xkZS/dht
PostgreSQL 9.3-beta1
本来の使い方ではないかもしれませんが・・・ integer型1カラムで主キーを設定してテーブルを作成しました。 ここに特定のIDをINSERTできれば、排他ロックを取得、 エラーが起これば、他のクライアントで排他処理中としようかと。 INSERT INTO TESTTABLE SET ID=123 ; とSQLを投げて、エラー(例外)をキャッチしているのですが、 もっとスマートな方法はありませんか? エラーが返ってくるのではなく、INSERTが成功すればTRUE、 失敗すればFALSEを返すようなSQL文ってないでしょうか?
INSERTしないでSELECT FOR UPDATE NOWAITしろよ。
FOR UPDATEを知らなかった・・・ お恥ずかしい。 ちと調べてきます。
beta版だからまだ寝てていいよ。
おれもbetaだからまだいいかと思ってた
単にbetaと付いているだけで気にせず使ってねっていうソフトも結構多いけど、 PostgreSQLはそういうソフトじゃないしねい
betaだからと気にしながらも、どんどん使えってことか。
7.3で、毎日vacuumdbしてんだけど、最近重い。 年に一度くらいは、pg_dumpしてpsqlリストアとかすべき? あんまり関係ないですかね?
何が重いの?vacuum?
参照系全般です。
reindexはしてないの?
なんとreindexを定期実行しなきゃいけないのか。 無知だったわ。 でも止められないシステムだから、気軽にできないなぁ
7.3ならダンプレストアするのが早いかもなー
古いバージョン使い続けている事自体が問題かもな。
もちろんそれは気になるけれど、それ自体が問題というのはちょっとな
止めずに使ってるんだから大したもんだよ。 他所だと止めてない、っていうとパッチ当ててないのか?とか批判されそうだけど。
それは環境によるとしかいえないなぁ 非難すべき状況かもしれないし、そうじゃないかもしれないし
postgresql 9.2でも、textsearch_senna は問題なく使用できますか?
世の中何でも24時間稼働という風潮になってきていて その核となるDBMSは止められないことが多いからなあ… セキュリティ確保のためオンライン自動アップデート系の メンテ方法も採用できないことも多いし… 運用はいつの世でも大変だ
>>441 いまどき運用サイドから見て止められないシステムを作っちゃうのが悪いわ。
443 :
430 :2013/05/18(土) 16:17:51.60 ID:???
孫請けだから、要件通り7.3を止めずに動かしてお金もらうだけだわ。 怖いからFWや別のレイヤーで色々ガチガチには固めてるけど。 トラブっても責任逃れする準備も含めて周到にやってる。 で、ここの人達はみんな9.2とか使ってるのか。裏山
有効に使われているシステムほど、古くなってもバージョンアップが できないですよね。
>>440 9.2どころか8.3でもダメじゃなかったっけ?
え? これだけじゃレプリケーションは勿論駄目だけど一応使えてるよ
>>440 textsearch_jaだけど若干のソースの書き換えと文字コードをutf-8bom無しへの変換でいけたよ。
ソースの書き換えはsqlの大文字を小文字に直した程度だったと思う。
449 :
NAME IS NULL :2013/05/22(水) 08:44:10.45 ID:sZW/XsQO
自動バキュームの恩恵を受けられる8.3以降を使わないのは勿体ない。
更新も検索も常に走るようなシステムだとキツいからずっとoffったままだなauto
もったいないつーても 止められない事情と天秤にかけての判断になるからな 無理矢理止めて入れ替えてトラブったら目も当てられん 現実は厳しいぜ
もとい、朝方だけ落ち着くのでその時間にvacuumするのがやっぱ運用しやすかった いちいち調整するのも大変だし、 autoじゃ拾いきれなくてどっちみち手動vacuumするしかなかった。
9.0ぐらいからかvacuum自体あまりしなくてよくなったんだっけ。
454 :
NAME IS NULL :2013/05/22(水) 15:05:32.48 ID:sZW/XsQO
HOTが有効な更新が多いならバキューム自体あまり気にしなくていいはず。
最近は参照があるたびにcountカラムをインクリメントするような事してるけどデッドタプル結構貯まるんだよなぁ。 まぁ以前のバージョンに比べればデッドタプル多少貯まってもパフォーマンスに影響そんな無いみたいだから気にしてないけど。
8.3よりも前のバージョンの自動バキュームは何がダメなの?
457 :
NAME IS NULL :2013/05/23(木) 14:11:26.77 ID:CmgD6Bce
>>456 たしか自動バキュームのワーカープロセスが1つしかないから
大きいテーブルの自動バキュームが走ると、それが終わるまで
他のテーブルへの自動バキュームが出来なくなるとかだった気がする。
で、8.3からは複数ワーカープロセスが動けるようになった。
>455 一般論で言えば、テーブルにFILLFACTORを設定すれば、そんなにデッドタプルが溜まることはなくなるはず。
テス
460 :
NAME IS NULL :2013/05/31(金) 06:03:46.91 ID:bz/a3XA7
初心者質問で恐縮です。 バージョン9.2です。 例えばwhere id=? and code=? という条件を codeのパラメーターの値が無ければすべて抽出するという書き方はありますか?
あるよ。
462 :
461 :2013/05/31(金) 08:00:38.15 ID:???
ヒントも書いとく。 WHERE ID=? AND ( X ) Xの部分は自分で考えろ。
463 :
NAME IS NULL :2013/05/31(金) 20:54:33.02 ID:laXbRm2m
code = ? or code is nullかなあ
465 :
NAME IS NULL :2013/05/31(金) 23:02:30.51 ID:laXbRm2m
>>464 パラメーター値がある時は抽出できますが
すべて抽出はできませんでした
IF文使えばいけるけど、プログラムで実行するSQL文制御した方がいいよ。
select * from R where id=? and code=? or not exists (select * from R where id=? and code =?)
468 :
NAME IS NULL :2013/06/01(土) 08:49:31.94 ID:gkJE/QhY
書いてくれた方ありがとうございます!
>>467 だとほんとにすべて抽出されます。
私の書き方がまちがっていたようです。
すいません。
例えば
where id=? and code=? という条件で
code=0 の時
where id=?
code=1以上 の時(値があるとき)
where id=? and code=?
と、したいのです。
whereにor使えること知らないの?
ORを知らないんだろ。
>>468 もしパラメータがないことを表す値がcode = 0のようにわかっているなら
select * from R where id=? and (code=0 or code=?)
そうでないなら、467にかっこを加えて
select * from R where id=? and (code=? or not exists (select * from R where id=? and code =?))
うちの会社じゃSQLの新人(中途でも)に1日目に教えるような簡単なことなのに。
474 :
NAME IS NULL :2013/06/01(土) 10:25:06.96 ID:gkJE/QhY
>>472 できました!ありがとうございます。
これって相関サブクエリでcode=?以外を抽出するって意味でしょうか?
475 :
474 :2013/06/01(土) 10:29:08.37 ID:gkJE/QhY
書き忘れましたが、下記のSQLでです。 select * from R where id=? and (code=? or not exists (select * from R where id=? and code =?))
>>473 外野は黙ってろ
そういうくだらない茶々入れが荒れる元になるんだ
お前のところの教育がどうこうなんてこの流れで言うことか
話の流れに沿わない書き込みはするな
そういう口調も荒れる原因になったりするんだけどね。 穏やかに行こうよ。
>>474 いや相関ではない。
手続き的に言えば
最初にサブクエリが実行され、その結果(true/flse)に置き換えて
メインクエリが実行されるというイメージ。
(よっぽど駄目なDBMSでなければ)
479 :
474 :2013/06/01(土) 23:28:51.60 ID:gkJE/QhY
>>478 丁寧な説明とわかりやすい指導ありがとうございます。
ホントにできたのかな…
だけって言うのもあれなので、、 前者は質問者の話の流れで行くと、code=0は常に偽となるだろうから select * from R where id=? and (code=0 or code=?) は select * from R where id=? and (FALSE or code=?) となって select * from R where id=? and code=? と同じかなと。 後者なら回りくどいけど、動きそうか。
わかってる
484 :
460, 474 :2013/06/03(月) 19:14:11.67 ID:2r5NLX9l
>>484 あなたが希望したとおりに動いてるのなら正解
そうじゃないなら間違い
486 :
460, 474 :2013/06/03(月) 20:45:51.67 ID:2r5NLX9l
select * from R where id=? and (code=? or not exists (select * from R where id=? and code =?)) このsqlで、 code=0 すべてのレコードを抽出 code=1 codeが1のレコードを抽出 code=2 codeが2のレコードを抽出 というかたちで希望どうりの動きができています。
code=ナントカって、渡すパラメータのことを言ってたのか? だったらサブクエリなんか使わんでも select * from R where id=? and (code=? or ?=0) でいいんじゃね?
488 :
461 :2013/06/03(月) 23:18:49.53 ID:???
だね。何で回りくどい書き方をしたのか
?
??
文字化けがひどいな。
???
おまいら、質問です。 CREATE FUNCTIONでストアド作る時にフィールドやらテーブルの存在チェックをする方法はありませんか? もしくはビューやストアドに使われてるフィールドやらテーブルの存在チェックを一括で実行する方法はありませんか? デフォルト設定のMacOSX用9.2.4と、Windows版pgAdminIIIの組み合わせでストアドを作っています。 設定変更でチェック出来るなら変更します。 今は1個1個実行してバグ出ししてます。 (命名規則違反が見つかった時とかは修正後ストアドのテストやり直し><;;)
>>495 > CREATE FUNCTIONでストアド作る時にフィールドやらテーブルの存在チェックをする方法はありませんか?
無い。
> もしくはビューやストアドに使われてるフィールドやらテーブルの存在チェックを一括で実行する方法はありませんか?
無い。
> (命名規則違反が見つかった時とかは修正後ストアドのテストやり直し><;;)
自動テストにしておけばいい。
>>496 dクス。VBAのExplicitに慣れすぎた体にはストアドのこの仕様(?)は堪える。orz
質問です pg_restoreでエラーが出るんですが、原因がわかりません。 CentOS 5.3 PostgreSQL 7.3.6 pg_restore -h localhost -p 5432 -U postgres -v -d "mydb" "/home/root/xxx.backup" エラーメッセージ pg_restore: [archiver] unsupported version (1.10) in file header RedHatでバックアップしたやつなんだけど同じ7.3.6のをバックアップしたのに「unsupported version」ってなんで?? Windowsで PostgreSQL8.? を入れてあるやつでバックアップしたんだけどそれが原因? この場合、無理やりリストアする事はできない?
>>498 そのエラーメッセージでググると
それっぽいQ&A記事が引っかかるよ
501 :
498 :2013/06/12(水) 09:04:13.53 ID:???
>>500 ググったんだけどそもそも日本語の結果がほとんどヒットしなくて、
違うバージョンのにリストアする方法しか見つからなかった
因みに諸事情によりdumpのオプション変えて取り直しとかは不可な状況です
>>498 > pg_restore: [archiver] unsupported version (1.10) in file header
>
> RedHatでバックアップしたやつなんだけど同じ7.3.6のをバックアップしたのに「unsupported version」ってなんで??
> Windowsで PostgreSQL8.? を入れてあるやつでバックアップしたんだけどそれが原因?
1.10になってるということはPostgreSQL 8.0以降のpg_dumpを使ってしまったみたいだね
> この場合、無理やりリストアする事はできない?
PostgreSQL 8.0以降の版でいったんリストアしてからテキストダンプして古い方に取り込むとか
>>499 LANGUAGE SQL の時はね。
LANGUAGE plpgsq lの時は出ない。
どっち準拠に従うべき?
PostgreSQLだけしか使えない奴って居るの?
何の意味があんのその質問
全くだな 質問にもそれなりの仕方・手順というものがある 聞かれた方が「何でそんなこと聞くの?」って 目を白黒させるようなものはいただけない
いたところで、どうすんのって思うわけで。
喧嘩はやめて!(´;ω;)
ふたりをを止めて!(´;ω;)
サーバーも止めて!
私のために争わないで! ヌルかナルかなんてどっちだっていいじゃない!
もぉ、こ〜れ〜い〜じょお〜♪ てか、古いな
(forever love…?)
実行計画が同じなのに実行時間が倍以上違うのは何が原因? キャッシュなどはすべてクリア済みっす
キャッシュのクリアって具体的にどうやってんの? カーネルが持ってるキャッシュもあるし、OS再起動後に計ってるってこと? マシンのスペック、postgresql.confは全く一緒なの?
519 :
517 :2013/06/18(火) 14:31:42.81 ID:???
>>518 キャッシュクリアの方法ですがOS再起動しています。
以下、作業手順になります。
1.測定
2.OS再起動
3.SQLで使用しているテーブルに対して、VACUUM ANALYZEとREINDEXを実施
4.測定
このとき、1と4の結果で実行計画が同じなのに、処理時間は倍以上あったりします。
ちなみに、4のあとOSを再起動して、
再度、VACUUM ANALYZEとREINDEXを実施後に測定すると、
実行計画や処理時間が1の結果と同じになったりします。(ならないときもあり)
何が原因でここまで不安定になるのでっしょう?
同じとか倍とか言うけど、それは10msのオーダーなのか100秒のオーダーなのかわからん。 あと、他のプロセスが忙しかったりはしないのか?
あと、vmstat, iostat, ifstat, netstat, dstat, top, htop, sarとかを駆使して、実行環境に違いがないか確認しろ。
おっと、そういやOSは何なんだ?
523 :
517 :2013/06/18(火) 15:16:20.98 ID:???
>>520 >>521 測定時間は速いときは約30分、遅い時は約1時間です。
測定時裏で動いている各プロセスの動きとかは確認していないので確認してみます。
>>522 OS は CentOS5.6 てす。
あとPostgresSQLのバージョンは 9.2.4.1 です。
30分と1時間っていうのは、1つのSQLの1回の実行時間じゃないだろ! ディスクアクセスの所要時間(待ち時間)の差だけでも30分ぐらいになるんだろう。
一回かもしれないじゃないか(ガクガク
まさかクライアントとかから同じSQLを何万回も呼び出したりしてるのかしら? connectして、execして、disconnectしてたりして。
うむ、OLTP系とOLAP系の人ではタイムスケールが合わないな
なるほど、同じマシンでってことか まさかとは思うが、autovacuumが動いてて影響してるとか…
>>519 1. の方が早いのかな?
当てずっぽうだけど4. の方は、ヒープのヒット率が低くてディスクI/Oが増えてるとか。
つか、俺らがそのPCの前に行けば、多分5分もあれば原因わかるようなことだろうな。
こじれてる初心者質問はどの分野でもそうだけどなw
>>533 MLに入ってなかったんじゃないの?
2chに慣れてしまっているせいかメールクライアントやMLのスレッド表示はなんか見づらい
MLって初心者には敷居が高いしな。
9.2でまともに使えるN-gram系の全部検索ライブラリとかあったら教えて欲しい ※標準で入ってるN-gram検索は2文字以下では使い物にならないのでそれ以外で
537 :
536 :2013/06/22(土) 16:51:43.46 ID:???
自己解決した Ludiaで終わってたと思ってたNTTデータがやってくれてました ありがたやありがたや これで、MySQLからPostgreSQLに戻ってくることができる
>>534 レプリケーションしてるかどうかも確認できないレベルで運用してたってスゴくね?
ド素人がなんでレプリケーション組んだんだろ?
故障してから24時間、どこから手をつけていいか全然見当つかなかったようだし、
監視ツールも使ってないみたいだし。
>>538 世の中のシステム管理者のレベルってそういうのが結構多いよ。
この前、お客さんところ行ってサーバー見たらさ、
RAIDの管理ツールも入ってるのに、SATAのHDDが1台入ってるだけなんだよ。
そこの会社のサーバー数十台全部そういう状態。
担当者は、RAID組んであるはずなのになぁ、、、って言ってたわ。
構築する人と運用する人は別だったりするしな。
>>539 それ、最初からRAIDになってなかった臭いな。
刑事事件に発展しそうな案件だな。
RAIDマネージャー入れたらOKと思ってただけなんじゃないの?
嘘でしょ
ちゃんと入れたほうが金になるから業者もちゃんと入れるだろうに、、、 思いっきり安い見積もりでオプションのHDD入れてないとかかな
>>537 pg_bigrm?
標準のginってfastupdateでもやっぱちょっと遅くない?(更新が)
そう言えば9.2でamが追加になってたけど、txtsearchsennaって9.2いけんのけ?
発注する時に総務が一番安いモデルにしたとか。 昔勤めていた会社ならやりそうだ。
>>545 textsearchsennaはインスコでこける
あぁやっぱり。 多分追加になったamを書き足せばいけるだろ。 帰ったらやってみるかな。
書いたままクエリを実行する(gccの-O0のような)隠しオプションはないのかな 自分でソース書き換えるしかない?
意味不明すぎる。
俺も十回読んだが理解できなかった 俺の理解力が足らないのかと少し悩んだ
クエリを最適化せずに(書いてある通りに)実行するオプションってことじゃないの
join_collapse_limitとかの話?
確かそれを1にしても選択と結合の交換などは止められなかったはず
"クエリ最適化なし"の定義が分からん
コストベースじゃなくてルールベースってことかも。
実行計画を自分で決めたいってことか? でも、「書いたまま」ってのがイミフだな・・・・・・。
結合順とか絞り込み順とか、そのままの順番で動いてほしいんじゃないの 結合に関しては()使えば強制できるんだっけ?
本人の説明なしにあれこれ推論してもあんま意味ないな
大方の見方は一致してるようだけどね
説明不足ですみません。 書いたままというのは select A from R1,R2 where F みたいな形の式を「R1,R2を結合(直積)して条件Fで選択してAで射影」という素朴な順序で評価する という意味です。 RDBMSは通常ここから、関係代数式の等価規則を使って演算順序を組み替えるとか、 統計情報をもとにハイパーグラフのリダクションや動的計画法で効率的な順序を決める といった最適化をして実行計画を作るわけですが、その効果をみる上でもベースとなる 素朴な評価順序での計測ができないかなと思って質問しました。
DBMSの比較表でもつくんのかな
素朴な順序じゃないだろ。 漢字で表現するなら「愚直な順序」の方が適切だな。
というかな、その程度のことなら、SQL3回流せば終わりだろ。 @SELECT R1.*,R2.* FROM R1,R2; ASELECT R1.*,R2.* FROM R1,R2 WHERE F; BSELECT A FROM R1,R2 WHERE F; これで561の計測したいことは全部計測できるだろ。
結合方法も比較したいかもなぁ。 enable_hashjoin とか使うといいかもね。そこまでの強制力はなかったと思うけど。
>>564 これは各段階に常にMaterializeを入れた結果になるから駄目だろ。
>>563 select文をパースして最初にできる問い合わせ木の順序と考えると
「素朴」でもいいんじゃない。
pg_hint_plan使えば試したいプランを実行できんじゃないの? よく知らんけど。
そういやそんなんあったな
>>561 >>RDBMSは通常ここから、関係代数式の等価規則を使って演算順序を組み替えるとか、
>>統計情報をもとにハイパーグラフのリダクションや動的計画法で効率的な順序を決める
>>といった最適化をして実行計画を作るわけですが、
ポスグレのプランナとオプティマイザは不可分で、最初っからダイナミックプログラミングで
ごりごりプランツリーをつくってくから、「後から最適化」って概念がないんじゃないの。
因みにポスグレはプラン処理の前処理で"1+1"を2にしたり、可能ならサブクエリをJOINにするとかの最適化を行うらしい。
某書籍の受け売り。
プランニングの前処理で既にクエリ書き換えちゃうよ 主にやってること ■スカラー表現の簡素化 主に定数たたみ込み( 2 + 2 -> 4 CASE WHEN 2+2 = 4 THEN x+1 ELSE 1/0 END -> ERROR: division by zero にはなりませんように・・・ はい。なりません。 ->x+1です。 ■簡単なSQL関数の展開 CREATE FUNCTION incr(int) RETURNS int AS 'SELECT $1 + 1' LANGUAGE SQL; SELECT incr(col) FROM table; -> SELECT col + 1 FROM table; ■ジョイン木の簡素化 ・フラット化("pull up")タイプのサブSELECTs 出来るだけ 出来なければ、サブプランを再帰的に生成する。 ・UNION ALLをフラット化する、継承木を展開する ・ジョインの長さを削減する(outer join -> inner join) ・IN、EXISTS サブSELECTsをセミジョインに変換する ・非joinを識別する ■簡単なviewのフラット化 CREATE VIEW v AS SELECT a, b+c AS d FROM t WHERE x > 0; SELECT v.a, v.d FROM v WHERE v.a = 42; Rewriterによる生成: SELECT v.a, v.d FROM (SELECT a, b+c AS d FROM t WHERE x > 0) v WHERE v.a = 42; サブSELECTフラット化による生成: SELECT t.a, t.b+t.c FROM t WHERE t.x > 0 AND t.a =42;
間抜けな質問がないと、盛り上がらんな。
>>541 刑事事件じゃなくて、民事だろ!
って、おもってから、数秒後・・・あぁ、なるほど、刑事事件か。と納得した。
単に管理ソフト入れたらRAIDになると勘違いしてただけだろ。
すみません。初心者です。 update文で教えてください。 顧客情報のテーブル→t_client 注文内容のテーブル→t_orderがあります。 注文内容と顧客情報を合体させて、 顧客情報にカートIDを入れたいです。 ご教授よろしくお願いします。
これは酷いw
>>576 SQLの基礎さえできていないようだけど
どういう経緯でそんなことをやる羽目になったの?
もし業務でやらされているのならば
明日朝一番にギブアップ報告しろと言いたくなるレベル。
これはレスした方が負けだろ。
メアドといい、怪し過ぎる レスしたら負けだ
up pu
>>576 あなたが設計したの?
他の人が設計したんじゃなきゃもう一度勉強してやり直した方がいいよ
過去に構築したPostgreSQL 7.4.16がRedhatで稼働しています。 この度、ハードウェア更新することになり、Linuxもバージョンアップします。 その際に過去のDBを移行するのですが、7.4.xxをインストールするのが 最も作業量ミニマムでしょうか?
まあそうかもね ダンプ→りストアでだいたい済むけど 7->8はキャストしてないと通らなかったりするからなあ って同じサーバに複数のバージョンのpostgreSQL入れて試してみりゃいいじゃん
新しいハードにESXi入れて、VMWare Converterで古いハードをP2Vするのが 一番作業量が少ないと思う。
7 を入れるなんて、恐ろしいからやめてくれ。 こないだ重大な脆弱性に対する緊急アプデがあったばかりで 7とかはアプデ対象外だというに。
脆弱性なんて、他の手段でなんとかなるだろ。
表にそのまま出すケースのが少ないしな
新しいものに移行することに労力を割くか、 古いものを運用し続けることに労力を割くか、
ま、ポート変えりゃいろんなバージョン同時にいくつも動かせるんだから 検証しながらやればいいよなあ
>>591 アホなH社に全プログラムをタダで再検証させられたぜよ。
H社のDBのスペシャリストが本番と違うバージョンでテストしてたくせに。
Hって国産DBやってるとこ? あそこのオープンソース系の連中、腐ってるだろ なんのアウトプットも無い
>>593 オープンソース?
そんなんやってたっけ?
昔、S○ がちょっとやってたぐらいしか知らない
オープンアーキテクチャ (と、彼らがほざいてる) のことなら、同意
やるのは構わんが自分とこのミスを他所に押し付けるのが困る。
責任転嫁する為に外注するんじゃないの?
まあそのために金出してるんだしなw
つまり、まともな客じゃねぇんだな。
ちょっとしたソーシャルゲームをつくろうとおもっています。 1000ビットくらいあるフラグのアレイを bit varying型 で格納するべきか、 それとも1フラグ1レコードで記憶すべきか・・・。 bit varying の nビット目が 0か1か調べたり、0や1を直接書き込む効率的な関数ってありましたっけ?
両方試した方が早いよ。
603 :
NAME IS NULL :2013/07/16(火) NY:AN:NY.AN ID:/QqZF5MJ
>>602 なるほど、もっともです。ありがとう。
>>603 どうも無さそうなので、PL/pgSQLの関数を作ってみました。
ただ、自分の方法はすごく頭の悪い方法かもしれないです。
5ビット目とか6ビット目ならシフトで気にならないですが、
800ビット目とか900ビット目とかになると、
その回数シフトさせるオーバーヘッドが気持ち悪いです。
もっとも、EXPLAIN ANALYSE で見るボトルネックはもっと他にあるようで、
5ビットも900ビットも大差なかったです。
そして、1フィールドに全フラグを押し込める方式も、フラグごとに1レコード用意する方式も、
全体のデータが少ない現在の試験環境では処理コストそのものに大差ないようです。
というわけで、今後は
・複数のフラグを(たとえば10個や20個を)まとめて処理する状況が頻発するのか
・フラグごとに集計する必要があるのか
・1レコード1フラグにしてメモリーにのりきるのかどうか
このあたりから熟考してみます。
>>602-603 ありがとう。
.NETサポートまだですか
Npgsqlとかじゃなくて公式でってこと?
607 :
1/3 :2013/07/18(木) NY:AN:NY.AN ID:???
はじめまして。よろしければ、何点かお教えいただきたいことがございます。 イレギュラーな質問が多くて恐縮なのですが。 1/3 64bitサーバで32bit版のPostgreSQLは動作するのか 具体的には、x86_64のサーバ(CentOS5)で、32bit版のPostgreSQL8.2のRPMは正 常に動作できるのでしょうか? x86_64の仮想サーバ(CentOS5)で試したところ、32bit版のPostgreSQL8.2の postgresql, postgresql-lib, postgresql-server をインストール、動作させることができました。 どうやら動作自体はするもののようです。 ただ、原理的に正常に動くものなのか、どなたかお教えいただけないでしょう か。
608 :
2/3 :2013/07/18(木) NY:AN:NY.AN ID:???
2/3 PostgreSQLの8.2と9.1のRPM版は共存できるか。
具体的には、32bit版の8.2と、64bit版の9.1のです。
RPMで複数バージョンのPostgreSQLをインストールしてみよう ? Let's Postgres
http://lets.postgresql.jp/documents/tutorial/new_rpm この記事は9.0以降のRPM同士についてのようですが、インストール先ディレクトリが
/usr/pgsql-<メジャーバージョン>
となっているなら、それより前のバージョンのRPMもひとつは共存できるかと思い
試してみました。
先に8.2(32bit)をインストールした環境に、9.1(64bit)の
postgresql, postgresql-lib, postgresql-server
のRPMをインストールすると、
> エラー: 依存性の欠如:
> postgresql < 7.4 は postgresql-server-8.2.22-1PGDG.rhel5.i386 と競合します。
というエラーが出ました。
そこで、 --force --nodeps というオプションをつけるとインストールでき、
9.1のポート番号を変えると、8.2, 9.1のどちらも動作しました。
update-alternatives が設定されるので /usr/bin/psql などは9.1系になって
しまうかと思いましたが、実際には8.2系のままでした。
rpm -ql でファイルのインストール先を確認したところ、どれもかぶってはい
ませんでした。
ただ、これもかなり変則的な使い方のようなので、原理的に動作するものなのか
お伺いしたいのです。
609 :
3/3 :2013/07/18(木) NY:AN:NY.AN ID:???
3/3 OpenJDKを使う場合、RPMファイル postgresql-jdbc のインストールは必要か
これだけは変則的でない質問かもしれません。
postgresql-jdbc の内容を見たところ、JDBCのjarファイルの他は、GCJのライ
ブラリだけのようでした。これならこのRPMはインストールする必要がなく、
Download
http://jdbc.postgresql.org/download.html からJARファイルを取得するだけで良いのではないかと思うのですが、いかがで
しょうか?
実は、8.2(32bit)のpostgresql-jdbcのインストールに失敗しました。
> エラー: 依存性の欠如:
> libgcj_bc.so.1 は postgresql-jdbc-8.2.512-1PGDG.rhel5.i386 に必要とされています
32bit版のgcjとの依存関係があったのです。使わないGCJ(32bit)をサー
バに入れずに済ませたくて、質問させて頂きました。
以上です。変則的な質問が多くて恐縮ですが、どうかよろしくお願いいたします。
質問するまでも無いことまで質問してるな。
9.4出たら起こして
9.3はいいのかw
>>607 いいんじゃない?
>>608 いや、ポート番号を変えるのが常道であって、それで正解だと思うが?
マテビューってすごく待ってたんだけどよく考えたら使い道無かった。 自動更新とか無いと一時テーブルと何も変わらんよなあ… マテビュー(ポスグレの)リフレッシュするときって排他ロック掛かるよね?
616 :
607 :2013/07/21(日) NY:AN:NY.AN ID:???
答えるまでも無いと思われてるか、ここで質問されてるからいいやと思われたのか。
9.2のMVって、一体どういう風に使われるのを想定してるんだろうか? triggerなんかで更新が必要なら、実表とそう変わらん気がする。
619 :
NAME IS NULL :2013/07/22(月) NY:AN:NY.AN ID:QpLqH1LE
参照の高速化じゃない? 今のところ自動リフレッシュがなさそうに見えるので用途は限定されるかも
正直、9.1で十分だと思う。
インデックスオンリースキャンはガチ
正直8.1で十分だと思う そうほざいてた時期が俺にもありました
ポスグレってオラクルの何パーセントくらい凄いの?
624 :
NAME IS NULL :2013/07/27(土) NY:AN:NY.AN ID:EswCpdfC
それを知ってどうしたいのかにもよるけど、たぶん3%ぐらいって答えておくのがいいパターンだと思う
そっかー(´・ェ・)ちなみにMySQLはポスグレの何%ぐらい凄いのー?
まちがったー(´・ェ・)MySQLはオラクルの何%ぐらい凄いのー?
過疎ってると思ったら、突然馬鹿が二人現れたな
(´・ェ・)
>>627 一人はぼくだとして(´・ェ・)もう一人は誰ー?
(・3・)アルェー
>>630 なんだー(´・ェ・)ぼくは一人じゃなかったのかー
話題は?
634 :
NAME IS NULL :2013/08/24(土) NY:AN:NY.AN ID:83q6fySG
最近ちょっと太った。
今ままでOracle、SQL Serverをやってきたんだけど、日本語DBだったんだ だから、ポスグレはちゃんと英単語を使いたいと思ってる 項目名どうやって決定してるよ?
日本語で問題ないよ。テーブル名はさすがに英語にしてるけど。
全て日本語で問題なし ソフトが対応していないならともかく 日本人なのにわざわざ英語を使う必要はない
>>636 さすがに、ってどういう意味で言ってるの?
マルチバイトサポートしてるだろ?
>>638 カラム名だけを日本語にするのとテーブル名も日本語にするのでは、心理的障壁の高さが違うんでしょう。
すみません。 slony-iの導入について、教えていただけませんでしょうか。 Windows2008R2にPostgreSQL(32bit) 9.0.13をインストールし、 さらに、スタックビルダを使ってslony-I 2.0.7-1をインストールしました。 C:\Program Files (x86)\PostgreSQL\9.0\bin 内に slon.exeが追加されたのはいいのですが、 コマンドプロンプトでslon.exeをたたくと、 「コンピューターに MSVCR90.dll がないため、プログラムを開始できません。 この問題を解決するには、プログラムを再インストールしてみてください。」 というエラーメッセージが表示されます。 ※VC++ランタイムは、2003〜2013まで入っています。 そこで、参照がうまくいっていないのだと思い、 システムフォルダから「MSVCR90.dll」を上記binフォルダに入れてみましたところ、 下記のようなエラーとなりました。 「Microsoft Visual C++ Runtime Library Runtime Error! Program: C:\Program Files (x86)\PostgreSQL\9.0\bin\slon.exe R6034 An application has made an attempt to load the C runtime library incorrectly. Please contact the application's support team for more information.」 導入方法や検証方法に誤りがあれば、ご指摘いただきたく思います。 よろしくお願いします。
Windows自体が 64bit で、32bit の dll 持ってないとかじゃないの? システムフォルダからコピーしてくる、ってのは割と悪手な気がする…
ところで2ちゃんねるが閉鎖された場合の避難所ってどうなってるの? オープンソースなPostgreSQLなら、やっぱ、おーぷん2ちゃんねる?
644 :
640 :2013/08/28(水) NY:AN:NY.AN ID:???
>641 何度も入れなおしてみましたが、結果は同じでした。 >642 Winは64bitです。 ただ、641が張ってくれてるリンクがx86用だから、 それをインストールしたら、32bitのdllを持ってるって事ですよね...?
Winが64bitなのは >C:\Program Files (x86) これでわかるって。 実行してるものは32なのか64なのか
646 :
640 :2013/08/28(水) NY:AN:NY.AN ID:???
>645 PostgreSQLは32bitです。 slonも、スタックビルだでインストールしたので、32bitだと思います。 一応64bit用の「msvcr90.dll」もbinフォルダに入れて見ましたが、 以下のようなエラーが出ました。 ※640のエラーはx86の「msvcr90.dll」を入れた際のエラーです。 「アプリケーションを正しく起動できませんでした (0xc000007b)。 [OK] をクリックしてアプリケーションを閉じてください。 」 ランタイムエラーが出てる->DLLを読み込めてはいる? だと思うので、Slonも32bit用だと思います。 勘違いしてて、レスにあっていない返答になってたらすみません。
Dependency Walker で見てみたらどうなるかなあ、MSVCRT90だけかな?
おっと、MSVCR90か
649 :
640 :2013/08/28(水) NY:AN:NY.AN ID:???
>647
Dependency Walkerで見てみると、
「LIBEAY32.DLL」も足りないといわれたので、
http://slproweb.com/products/Win32OpenSSL.html から、「Win32 OpenSSL v1.0.1e」と「Win64 OpenSSL v1.0.1e」を
インストールしてみようとしましたが、
両方とも次のエラーが出ました。
「The Windows OpenSSL Installation Project setup has detected that the following critical component is missing:
Microsoft Visual C++ 2008 Redistributables」
どうにもこうにもVC++2008ランタイムが、正しくインストールされていないようです。
もう少し試行錯誤してみます。
話題は?
$ postgres --version 見せてほしい。
7.3.4
>>653 ちょっと安心した
postgres (PostgreSQL) 8.4.12
1.2.3
Lotusかよ
9.2.4
Porscheかよ
252
ウリは?
Windowsに先んじてversion 9.3になりました。
ウリって売りかw 9.3 はビューに直接UPDATEかけられるとか
SUMしたVIEWにもUPDATEかけれるのか?
ttps://wiki.postgresql.org/wiki/What 's_new_in_PostgreSQL_9.3#Updatable_Views
Simple views can now be updated in the same way as regular tables.
The view can only reference one table (or another updatable view)
and must not contain more complex operators, join types etc.
>>666 ようやくOracle 8i並みになったってことか?
pgpool2使ってんだけどさ、障害時はもちろん、復旧時も完全にノンストップってのは出来るもんなの? postgre鯖とpgpool2鯖はそれぞれ複数台づつあって、全部同時に壊れる事は無いとして。 pgpool2が1台にpostgre複数台ならまだ少し情報あるけど pgpool2も複数台の構成は全然情報見つからない
イミフ。ハートビートがあるじゃん。
PostgreSQLは、そのへんのtoolが不安定というか、雑魚っぽいのが何種類もあるのが ネガティブイメージなんだよな。 Replicationみたいに、どれかを本体に組み込んで欲しいよな。
なんでピジプーを本体のフロントエンドに入れないかねぇ。 インストール時に選択できるようにすればいいのに。
そんな怪しいプログラムが好きなのは、日本人のなかのごく一部だからなんじゃないの? あの会社や、その会社の関係者だけだろ。
674 :
NAME IS NULL :2013/09/15(日) 04:30:46.50 ID:KpcWKA8r
あの会社だけ〜とかほんま性格悪いわ〜、引くわ〜。 ど〜せゾウさん関係にたいした知識もなく言ってんだろ〜?老害だわ〜。
みんなひどいわ
データベーサー同士仲良くやりたまえ
ダースベイダー?
こー こー こー
679 :
NAME IS NULL :2013/09/19(木) 09:23:20.82 ID:+7crO47r
postgresqlのGIN検索が2文字だとインデックス使ってくれない問題って治ってます? textsearch-ja使ってるんだけど2文字検索遅すぎなんだがぁ
680 :
NAME IS NULL :2013/09/23(月) 04:16:05.35 ID:e8g5Zb/W
NoSQL使わずこれ使う理由ある?
基本的に目指す方向性が違うだろ 用途によるとしかいえない
682 :
NAME IS NULL :2013/09/23(月) 08:11:55.49 ID:e8g5Zb/W
すまん初めて使ってみるんだデーターベース オンラインゲーを作りたいんだけど、保存するのはユーザー情報と各種ゲーム内パラメーター Postgresじゃ厳しいよね?
うん、かなり厳しい。 Postgres じゃなくて、君の方が
KVSで済むならまあそれでいいんじゃない? 実はデータベースが本体で、サーバの提供する機能とか ゲームクライアントはそのデータベースのデータを書き換える 補助ツールにすぎない、と考えることもできる。
>>684 おーまさにそんな感じだ
とりあえずmongodbでやってみるよ
>>682 バンバン稼ぐつもりなら、俺なら最初からオラクル使っとくな。
最初の内はXE使って、順調に行けばAmazonのRDSとかを使う前提で。
稼げるかどうかわからないなら、PostgreSQLにしとく。
687 :
NAME IS NULL :2013/09/23(月) 18:20:01.49 ID:e8g5Zb/W
SQLは使いこなせる人にとっては実に便利だからな。 使いこなせねー奴は、流行りの言語やツール使っとけば良いよ。
話題は?
690 :
NAME IS NULL :2013/10/01(火) 17:41:02.14 ID:QrPbc1sj
PostgresQL + Redis が最強だと思う今日この頃
691 :
NAME IS NULL :2013/10/07(月) 13:46:31.99 ID:m7Wu6fio
CentOS5で、yumから8.1をインストールしてあります。 デフォルトでpg_dumpがインストールされていると思ったのですが、入っていませんでした。 pg_dumpだけをインストールするにはどうすればいいでしょうか?
>>691 たぶんpostgresql-serverパッケージしかインストールされていないから
yum install postgresql
としてクライアントのパッケージをインストールする必要がある
693 :
NAME IS NULL :2013/10/07(月) 17:28:22.73 ID:ANQ3Kcai
>>692 ありがとうございます。
解決しました!
>>693 蛇足だけど、あるファイルをどのパッケージが持ってるか検索するには、
yum provides "*/pg_dump"
とかするといいよ。
postgresql-8.4.13-1.el6_3.x86_64 : PostgreSQL client programs
postgresql92-9.2.3-2PGDG.rhel6.x86_64 : PostgreSQL client programs and libraries
...
みたいに検索してくれる。
蛇足だ スレッドの疎結合を徹底させろ yumの話はyumのスレでやらせろ
データフォルダをサブバージョンのリポジトリに入れるのはナンセンスですか?
>>696 別にそれで要求を満たしてるなら、それでいいよ。
データに破損など何かあったとき 同じ環境ならサブバージョンで元に戻せるのですか?
いつコミットするんだ WALログ管理するだけでいいだろ
ファイルシステムのスナップショット使えよ。
ありがとうございました
psql -v で変数渡しながらsqlを流し込んだら ローカルホストだとうまくいくんだけど リモートホストだと2バイト文字がうまく流れませぬ。 対処方法とかない??
>>703 client_encoding合ってる?
705 :
703 :2013/10/10(木) 13:13:07.67 ID:???
>>704 ローカル、リモート共に同じ環境なので特に設定変更してませんが…
どこか設定した方がいい場所とかありますか?
ワラタ
ネタなの?本気だとしたら(ry
709 :
707 :2013/10/11(金) 14:17:57.55 ID:???
>>708 ひょっとして俺のこと?
何かおかしい?
>>707 707氏はまともだろ?俺もそうしてるけど。。。
SET client_encoding TO 'SJIS'; みたいに。
711 :
NAME IS NULL :2013/10/12(土) 06:34:56.97 ID:9bkwkB92
>>690 hstoreじゃRedisの代替はやっぱり厳しいかな?
知らん。Redisしか使ってない
Visual Studio 2010 のデータベースエクスプローラで PostgreSQL にOLE DB接続する 方法を教えてください。 (ODBCは、PCに設定が必要なのでOLE DBで) Npgsqlを使用してOLE DB接続しようとすると、 複数ステップのOLE DB の操作でエラーが発生しました。 と表示されてしまうのです。 宜しくお願いします。
PCに設定しろよ
Npgsqlを使用すんならクライアント個々のPCの設定なんていらないが
716 :
NAME IS NULL :2013/11/03(日) 21:40:27.09 ID:WS2i8ToB
psqlコマンドで、たとえば次のような内容のスクリプトを実行します。 begin; create table tbl ....; insert into tbl ...; update tbl set ...; commit; ここで、どれかのSQL文が失敗したときに、後続のSQL文をスキップする機能はありませんか。 今だと、たとえば create table 文が失敗したときに、後続のinsert文やupdate文も実行されようとして、エラー出力が増えてしまいます。こんなかんじで。 $ psql < foobar.sql ERROR: current transaction is aborted, commands ignored until end of transaction block ERROR: current transaction is aborted, commands ignored until end of transaction block 希望としては、SQLがエラーになった時点でメッセージを出してpsqlコマンドが終了してほしいです。 こういうことはできますか。よろしくお願いします。
>>719 多少迷ったけどバージョンが分からんかったから古いの出しとけばええやろ的な。
>>720 しかし、なんぼなんでも 7.2 はないわなw
>>718 ,719
そのページはいろんな制御構文があるのでどれを使えばいいのでしょうか。
・エラーがあったらreturnする
・エラーがあるかどうかif文でたしかめる
実行する環境は? pgbashとか使えそうな気が
>>722 どれを使えばいいのかは作ってる本人にしか分からんよ。
例えば1つ目の処理を行ってエラーが出たらreturnするとか、もしくは別の処理するのかとか、そんなの仕様次第。
分からんなりに一つ一つ試していけばいいんじゃね?
>>721 実行環境が7.2かもしれんし(震え声
一番上のほうに出したgoogle先生が悪いということで一つ。
え? それって、PL/pgSQL の説明だよね psql コマンドで 一連のSQL 流し込む時に どうやったら その場で中止できるか、が元の質問でしょう? たぶん ON_ERROR_STOP 環境変数を (適当に) 設定すればいいんじゃないかな
>>724 えー?
ちゃんと>717で
> ここで、どれかのSQL文が失敗したときに、後続のSQL文をスキップする機能はありませんか。
> 希望としては、SQLがエラーになった時点でメッセージを出してpsqlコマンドが終了してほしいです。
って書いてますよね?これで伝わらないのかよ…
730 :
sage :2013/11/05(火) 19:52:33.00 ID:yhatM0Qn
今週末のPostgreSQL Conferenceに行く奴いる?
postgresqlでクラスタ組むならpgpool2が安定?
クラスタってなにができればクラスタなの? レプリケーションなら本体だけでできるし
733 :
NAME IS NULL :2013/11/12(火) 17:10:06.33 ID:g6OOuhKa
クラスタの種類によるよ
ちょっとしたExcel製の社内システムをDB化したい →Oracleは高いし、無償版は容量制限がねぇ… →Postgresにしよう、でも壊れたら業務が止まるんでしょ? →じゃあ多重化しよう、ググったらpgpool2ってのがいいらしいぞ ←イマココ 社内システムだから切り替えは手動でも構わないので、 標準のストリーミングレプリケーションを使っての Active-Standbyでも十分っぽいですね。
そのくらいの規模だと、多重化よりもむしろバックアップのほうが大事な気がする。 停止時間よりも、ハードディスク故障かアプリ側のバグでの論理的なデータ破壊が怖そう。 レプリケーションを使うにしろ、そのあたりも考えたほうがいいよ。
「ちょっとしたExcel製の社内システム」なのに、Oracle無償版の容量制限(11GB)に引っかかるのか?
>>734 前提が全ておかしい
「壊れたら業務が止まる」のはどのDBでもいっしょ
ちょっとしたExcel製の社内システムなんかどうでもいいわ
Oracleでも壊れるときは壊れるし
休日や夜に誰も使ってないシステムだとしても 自分が有休取ってる時に止まって電話がかかってこない程度には しておいたほうがいいな
ひょっとしてすごい Excel マスターがいて、複数の Excel が互いに連動することでフォールトトレラントになっているシステムかもしれない (w
壊れたらExcelでやればいいじゃん って気はしたけど、どうでもいい
734ですが、1個1〜5MBくらいのExcelファイル100個/1日を 日次トランザクションデータのフォルダに置いて、 プログラムからそれをテーブルっぽく参照・更新している と言う画期的?なシステムなので、RDB化したいのです…。 色々皆さんのおっしゃるとおりおかしなシステムなので、 もうちょっと前提条件から詰めなおしてきます。
その腐海はそっとしておくべき 下手にいじると大海嘯が起きるぞ
745 :
NAME IS NULL :2013/11/13(水) 23:08:34.25 ID:+r/WxRJl
確かにデータベースとしての側面はあるけどさ。。 前任?はそこまでの規模になる前にどうにかすべきだったね。 まぁ、一回でRDBMSに移行しようとせずに、部分的にはじめるのが吉。
ポスグレにしてexcelみるfdwをつくるw
>>736 プロが作れば100MBぐらいで収まるものでも、
アホが作ると11GBぐらいすぐに無くなっちゃうんだよ。
748 :
NAME IS NULL :2013/11/15(金) 23:03:11.62 ID:6G3KwFUp
9.3.1はインストールすら出来んorz XPでも7でも結果は同じ、\dataの中のポスグレconfが見つからないってさ・・・ ググリまくって丸1日やったけどもう疲れたあきらめて寝ますzzz あ・・・上のほうに何か書いてあるっぼい?けどもう眠いやw明日見ヨット
>>748 > \dataの中のポスグレconfが見つからないってさ・・・
これ某システムのポスグレで発生して困ってる
750 :
NAME IS NULL :2013/11/16(土) 20:04:38.45 ID:C6OwC7TP
よっぽど切羽詰ってるんだろうけど、まぁあきらめて寝てるといいよ。 もしくは情報を出そう
>>750 ああ、すまん
普通に動作してたんだが、ちょっと不注意でディスクフルにしてからおかしくなったんよ
仮想マシンでスナップショットとってて、そこまで巻き戻して今は正常に動作してるから切羽詰まってる訳じゃないんだが、再発するとやだから誰か似たような経験した奴いないかなぁって
postgresql.conf はちゃんとあるし、権限も問題ないし、原因が全く特定できない
PostgreSQLのSUBSTR関数のstart,lengthって、バイト数ですか? それか、文字セットに応じた文字数をカウントしてくれてますか?
>>752 文字数。EUCでもUTF8でも「あ」は長さ1としてカウントされる
>>753 ありがとうございます。安心しました。
やっぱりPostgresは日本語(マルチバイト?)対応最強ですね。
心強いです
どこに質問しようか迷ったんですが、ここが一番まとも?で初心者を蔑んだりされないんで、ここで質問させめ下さい。 PostgreSQLとPHPで私が組んだ業務システムがあります。 この度、多言語化(とりあえず中文)してくれとの要望が出てきたのですが、今、OS(Linux)もPostgresもPHPも全て文字セットはEUC-JPで統一してます。 やはり全てをUTF-8とかに変換する必要がありますか? 現在のEUCで格納されてるPostgresのデータをUTFに変換することは可能ですか?
DB止められるなら、ダンプ-リストアでいけるよ クライアントの文字コード指定できるしね。 pg_upgradeとかリカバリーとかは使えない 何かとあるからUTF8に統一した方がいいと思うよ
>>755 必要性はちとわからんが
変換方法は
pg_dumpでエンコーディング指定してダンプを取ってリストアすればいけるよ
758 :
757 :2013/11/25(月) 15:53:05.91 ID:???
すまん被った
>>756 >>757 pg_dump の ーE オプションで encoding を指定して出力できることを確認しました。
ありがとうございます。
話はそれますが、私は1.0未満のバージョン時代から Linux を利用してきた経緯から、ずっと EUC-JP で通してきたのですが、いまでは端末が Mac、サーバが Linux になってしまい、けっこう苦労してます(笑)
途中何度も UTF に移行しようと思ってたんですが、のびのびになってました。
こんな大規模で国際的なシステム(笑)になる前に移行しておけば良かった…
申し遅れました。私
>>755 ,
>>752 です。
760 :
NAME IS NULL :2013/11/25(月) 23:00:07.84 ID:1RY9W7N4
kernel 1.0 未満?
へぇぇ。大先輩だ。 まぁ、なぜEUC-JPで通してしまうようなことをしてしまったかは、過ぎたことなので置いといて、 ちょこちょこリフレッシュしたほうが何かと苦労せずに済むと思います。
スレチになってしまい申し訳ありませんが、 当時、Linux 上で日本語を使う場合は、JE というものを別途インストールする必要があり、それが EUC-JP 前提だったんですよ。 けっこう長くそういう時代が続きました。
>>763 LinuxがFreeBSDにだいぶ劣っていた時代だな。
日経にネガキャンされてJEがない=日本語が使えないと誤解をばらまかれたのは
FreeBSD陣営としてはかなりの痛手だった。
PostgreSQL 使いは、FreeBSD 使いが多い気がする
俺 linux 好きですけどぉ
最近ポスグレの案件増えてきた感あるけど、海外で流行ってるのが遅れて来てるのかな。
>>768 海外で流行ってるの?
いまだに日本だけだと思ってた
ただ、やっぱりなんか注目されてきた気はする。
MySqlを使い続けることへの問題に気がついたのかな?
海外で流行ってるのは知らなかったけど、いいことだね。 コミュニティが活性化するのは偉大な進化をもたらすかもしれない。
今のでも全く不満はないけどね オラクルと性能比較とかさせられたよ、蔵に 全く問題なかった 誰もがしってる世界的な通信キャリアに導入した。 まぁ、ある一部門だけど
MySQLはいろいろ逆風で PostgreSQLはいろいろ順風だな
ネガキャンが酷かったからね ある陣営からの
プロプライエタリなソフト以外で本当に尊敬できるプロジェクトの一つってか筆頭だな、Postgres
DB関係は何検索しても似たり寄ったりな気がw
2005年ごろより下って事はないと思うけど
AWSのpostgresサポートで検索数上がったはずなんだけど、トレンドに反映されてないね。
>>777 傾向はMySQLも同じだね。
ちなみにHadoopは激増してる。
しかし、postgresもMySQLもCubaが一番興味持ってるつうのは
どういう事なんだろ?
>>779 アメリカの輸出管理規制でOracleとかが使えないからかな?
そうゆうこと
>>781 表向き輸出できないけど、実際は入ってるよ。
ウィンドウズもバリバリ使ってるし。
ウィンドウズは違法コピー版やな Oracleも?
>>783 そんな当たり前のことをドヤ顔で言われても…
>>785 そんな当たり前のことを知らずに
781 名前:NAME IS NULL :2013/11/29(金) 22:59:22.38 ID:???
>>779 アメリカの輸出管理規制でOracleとかが使えないからかな?
782 名前:NAME IS NULL :2013/11/29(金) 23:07:48.47 ID:???
そうゆうこと
なんて書く奴もいるし
そりゃシリアでもOracle売ってたぐらいだしな。
たとえシリアだろうとオラ来るで
北朝鮮でも
北は案件が無いだろう、、、オラ来ない
>>790 あるでしょ?普通に
いまどきDBMSを使わないデータ処理って考えられない
てか、ネタ?
ロケット発射の様子見ても、、あれじゃあねえw
南朝鮮なんてロケット自体あげられないじゃん 北のほうがずっとマシだよ
南は軍でも違法コピー版使ってたし、北も南も著作権に関しては同レベルだね(笑)
ほんの50レスほど前にRDBMS使って無い業務システムの例が上がってるわけですが。。。
>>796 ww おめーこそ、で?なにがしたいの?w
>>795 RDBMSに移行するタイミングを逃した業務システムの例じゃないですかー!
はぁ?9.3とかいつ出たんだよと思ったら、9/10に出てたのか。 俺情報に疎すぎ。
8.4から9.1にアップグレードしたいんだけど、この年末年始に8時間しか停止できない。 失敗は絶対に許されないから怖い。 ちなみにDBもアプリも全てソースからビルドしてます。 過去、8.1から8.4に更新した経験が一度あるだけ
>>802 pg_upgradeあるから前より楽よ
805 :
NAME IS NULL :2013/12/06(金) 21:03:59.54 ID:b4kCe0hp
>>679 N-gram系ならpg_bigm使えばいいかも。
今日、1.1がリリースされたよ。
あわわ昨日待ちきれずに9.3.1にMLで流れてたパッチ当ててリリースしたばっかなのに!
8.1から9.3やったよ ちゃんとテストして問題点潰せば大丈夫 8.4からならそんなに大きな問題ないでしょ
DB容量によるよな 8.1から8.4のときどれくらいかかったんかね
これWindows2000で使いたいだけど、どのバージョンが使える?
ロール(ユーザー)の権限設定に関して、 以下のような場合、 ----------- データベース: testdb1 testdb2 testdb3 ----------- ユーザ(ロール): postgres user1 user2 user3 ----------- 権限を ----------- ユーザ(ロール): postgres:全データベース user1:testdb1のみ user2:testdb2のみ user3:testdb3のみ というような設定をpgAdminVで、したいのですが、 うまく行きません。 user1 でログインできても、 ERROR; permission denied for relation testdb1 となります。 できれば、WindowsのpgAdminVからLinuxのDBへ設定したいのですが、 Linuxでコマンドによる設定でも、実現できれば構いませんが、 どうしたら設定できますでしょうか?
813 :
810 :2013/12/07(土) 14:41:35.00 ID:???
検索してみたら。 8.2.0は、あったけど。 信頼できる先かどうかは、不明。 postgresql-8.2.0-1.zip 8.2.4 は、自分の手元にあるかな、たぶん。
815 :
810 :2013/12/07(土) 16:07:59.00 ID:???
>>815 8.3からは、Win2000はダメなのかもね。
ちなみに、
v8.2.23 がそうだったか、どうか忘れたけど、
ODBCにバグがあるバージョンがあった。
v8.1.5 あたりにODBCのバグみたいだね。 8.2は大丈夫でしょう。
さすがに先進ユーザが多いだけあって、 Windows 2000とか使ってるんだな。
わかりにくいボケなのかマジなのか判断しかねる
うちはまだWindows7。 100が出たら変えようと思うんだけど、なかなかでないから98で妥協でもいいのかな。
>>818 XP以降のライセンス縛りが無いから、
W2Kは仮想マシン上での評価/学習用途で未だに活躍中
ちなみにW2Kが実機インストールできるPCはすべて引退した
だから、この8.2情報は個人的にとても嬉しかったりする
PgはLinix/OSX上ばかりで動かしていたけど、
Winでも試してみようかなぁ....
>>821 どこの世界の話だろう。
評価するなら評価版使えばいいのに、不思議なことをいうなぁ。
>>821 Windows2000をいまごろ評価/学習ってどうゆうこと?
評価してどうすんの
学習してどうすんの
そもそもライセンス違反している可能性が高いレスだよな。 普通に評価するならライセンス縛りなんて言葉は出てこない。 …ちなみにライセンス縛りってアクティベーションのことであってる?(ここがもう不安)
2000のメリットはとにかく軽いこと XPは重い VMwareではその差があまりにも大きい
古いPC+Win2000で運用するってことじゃないの。 評価用なら、今どき、WinXP以降を、持ってない人はそういないだろうし。
vt-xないならそうかもしんないけど、VMwareがかわいそうだ
>>812 ですが、言葉が足りなかったようです
>>822 ,823
W2Kを評価/学習ではなく、W2K上で動くアプリの評価/学習でした
軽くてアクチの面倒が無いので、W2Kが便利という意味です
>>824 ライセンス的にグレーなのは理解しているのですが、自宅での趣味の範囲なので....
W2Kそのものは(ワレではなく)W98マシンのアプグレ用に購入した正規品です
で、W2Kの話題は板違いなので、この辺で失礼します
お騒がせしました
もうすぐ2014年だよな?
>>825 の書き込み見てると、2005年ぐらいに思えてくる。。。
VMWareの仕組みを知らないで言ってるんだろ。 VM上のXPが重いんだったら実機だってまともに稼働しないよ
>>831 仕組みは知ってても、その仕組みがどういうときに発揮されるかを知らないとこうなるんだなぁ。。
たとえばNorthwoodならXPは快適に動作するが、仮想マシンは重いよね。
いや、もう、今時VM使ってないなんて本当にあるの? 俺の棲息範囲だと、開発もテストも本番も全部VMなんだけど。。。
windowsじゃないだろ
>>833 VMはI/Oの性能や信頼性が怪しいって話も以前は良く聞いたけど、最近は大丈夫なん?
それとも、I/Oがそれほど絡まない用途にお住まい?
ストレージは外に出してるから、ストレージやネットワークの組み方次第では 実機よりよっぽど速いよ。
すげえー
あー、お金をかけられるVMは良いよね 金が無い理由でのVMには嫌な記憶しかないわ。特にDBを置く場合は。
>>838 今は大抵物理HDDを丸ごとマウントできるようになってるよ。
あと、仮想HDDが丸ごとOSのキャッシュに乗っかるサイズに収まるなら、実機より速い。
>>802 うちの本番DBは無理
FusionIOのノード3台でも結構ぎりなのに
仮想化する利点が全く見あたりません
自分の環境がすべてだと思うなよ
オンプレで物理なんてまだまだ普通にある
意味不明なアンカになってもうた
>>840 だれも、全部 VM になってるなんて言ってないぞ
開発する人と運用する人が違うと、I/Oが厳しいシステムになりがちだわな。 うちは運用する時のI/Oまで考えて実装しているから、 普通に実装した他所のシステムに比べるとI/Oは1/10以下で済んでいるじゃないかと思う。 実装中やテスト中でもテーブル定義やプログラムを変更してチューンしてるからな。 1から作り直しは無いけど、2から作り直しぐらいなら時々ある。 受託開発や人月契約じゃありえないだろうけど。
うちのとこ以外性能テストはしない、うちは優秀だから仕事くれ、てか
>>843 > うちは運用する時のI/Oまで考えて実装しているから、
普通でしょ
お前らだけだろ。 普通は動けばOKで納品して、1年経ってからチューニングで金取るもんだろ。
>>846 類は友を呼ぶってやつだね。
君の周りはそんなのばっかりなんだね。
だれだ WHERE expression = FALSE の代わりに WHERE NOT expression とか書いたやつ 気持ち悪い
>>848 > WHERE expression = FALSE
この方が気持ち悪いわ
I井とかまだユーザー会にいんの
Postgresにチューニングなんて大げさなもんあるの? メモリの割当てくらいでしょ
SQLの改善ぐらいしとけよ。
つれませんねー
つれないのぅ
まじめに聞いてるだけだと思う
Npgsql ( .net C# ) 絡みは、ここで聞いてもいいんでしょうか? Npgsqlだけではないと思いますが、 DataReaderを閉じる前に、別のDataReaderを使うと、 There is already an open DataReader associated with this Command which must be closed first. というエラーが返ってきます。 これを回避するには、接続文字列に Preload Reader = true を追加ということでしたが、この指定をすることによる弊害はないですか? デフォルトでPreload Reader = true ではないところを見ると、 なにか影響があるのかなと、多少気になります。 ちなみにDataReaderが重なってしまうのは、LISTENとNOTIFYを使用していて、 DataReaderで、あるデータを読み込もうとした瞬間にメッセージをひろってしまい、 そのNotificationイベントでまた別のテーブルデータをDataReaderを使用して、 読み込みなおそうとするためです。
都度都度読むか、最初にまとめて読み込むかの違いだろ。 まとめて読むのは、時間もかかるし、メモリも食う。
質問です。 Integer型のフィールドを、ビット単位に 0 か 1 かで判定して select する方法はありませんか? Postgres8.4 です。
普通に思いつくビット演算をそのまま記述できると思うよ
思いつかないんだろう。
思いつくも何もマニュアル見れば演算子も何もかも全部書いてあるのに
マニュアルを読むという発想に思い至れないんだろ
マニュアルなんかあるのけ?
オートマしかないよ
ATなんて嫌いだな
バッチは有用だろう
勝手に再起動かかるのは嫌
9.1 を使っています。upsertをやりたいな、と、
http://lets.postgresql.jp/documents/technical/9.1/1#syntax を参考に
テーブル定義:t_tbl
id int
dataA int DEFAULT 0
dataB int DEFAULT -1
modDate timestamp
WITH
val AS (SELECT((1001, 0, -1, '2014-01-23 23:59:59')::t_tbl).*),
upd AS (UPDATE t_tbl SET modDate = val.modDate FROM val
WHERE t_tbl.id = val.id
RETURNING t_tbl._id )
INSERT INTO t_tbl SELECT * FROM val WHERE id NOT IN (SELECT id FROM upd)
というようにして、とりあえず望みは達せられました。
ただ
val AS (SELECT...., 0, -1, .....),
のデフォルト値を入れてる"0, -1"の部分を、こういう具体的な値ではなく
何かデフォルト値であることを示すもの(INSERTでのDEFAULTみたいなもの)が
何か使えないでしょうか。
SQLを生成する(ホスト)プログラムもデフォルト値の具体的な値を知らねば
ならない(定数定義しなければならない)ということを避けたいと思っています。
何が不満なのか分からない。 たぶん何かを勘違いしているだけで、実際不満はないんじゃないかと思う。
>>869 難しいと思う。システムカタログの pg_attrdef でも見に行けば
デフォルト値のハードコードは回避できるかもしれないけど。
(DEFAULT)::row_type をしたいってことなんだろうけど、
ここの row_type はテーブルじゃなくて、複合型という扱いなんだよね。
テーブルの列はデフォルト値を持てるけど、複合型の段階では持てないから
スマートにはいかないな。なんちゃって MERGE での限界なのでは。
872 :
NAME IS NULL :2014/01/22(水) 20:42:29.92 ID:5ZLJW5ib
>>864 PostgreSQLのオンラインマニュアルは
DBMSの中では屈指のわかりやすさだと思う。
日本語文書がすぐに出てくるのもいいところ。
あれがあるから本が出なくなったという噂 ソースおれ
874 :
869 :2014/01/22(水) 22:37:41.08 ID:???
>(DEFAULT)::row_type をしたいってことなんだろうけど、 そう、そんな感じの何かの手段が有れば、変更に対しての弱さを 一種類減らせるので、手段が有れば…と検索したりしましたが…でした。 ありがとうございました。>871
どういうときにそれが欲しくなるんでしょう。 insert → defaultが使われるから問題ない(ですよね?) upadte → 更新したい値を設定するから、default値は関係ない(ですよね?) どっちかがはずれなんだと思うんですけど、分からないです。
あ、もしかして全カラムを書いて、::t_tblってしなければカラム名参照できないって話? なわけもないですよね…orz
>>876 ::t_tblってするときに、全カラムの「値」を書きたくないってことだと思う。
ただ
>>869 の書いたSQLを見ると、UPDATE では modDate しか触ってないんだよね。
これって、これを書く担当も dataA や dataB は更新しない (= デフォルト値がある) って
知っているってことなんじゃないか? それなら、最後も
INSERT INTO t_tbl(id, modDate) SELECT id, modDate FROM val ...
と普通に列リストを書けば、デフォルト値は使われる気はする。
最初の行構築の時には dataA, dataB には NULL でも入れておくか、
そもそも t_tbl にキャストせず、単に (int, timestamp) のペアだけを作ってもいい。
878 :
869 :2014/01/23(木) 14:24:53.24 ID:???
>>877 を参考に、やってみたらできた\(^o^)/
WITH
val AS (SELECT 1001::int AS id, '2014-01-23 23:59:59'::timestamp AS mod),
upd AS (UPDATE t_tbl SET modDate = val.mod
FROM val
WHERE t_tbl.id = val.id
RETURNING t_tbl.id )
INSERT INTO t_tbl (id, modDate) SELECT id, mod FROM val WHERE id NOT IN (SELECT id FROM upd)
これでプログラム側でSQL生成のときに、
いちいちデフォルト値を書かせなくともよくなりました。
ありがとうございました >みなさま
>>875 単に定義はなるべく一ヶ所にしたい。そうでないと仮に仕様が変わったときに…
というようなことです。
ただまあ、データ受け取ったプログラム側で「このカラムがデフォルト値だったら…」
なんて処理があったら、結局同じことではありますが。
879 :
NAME IS NULL :2014/01/23(木) 17:52:38.46 ID:2Sh6JlGf
質問なんですがsearch_pathをスーパーユーザーで一般ユーザーを 設定しても効いてないのとスーパーユーザーのsearch_pathがサーバー 再起動でpublicに戻ってしまうのは何がおかしいのでしょう? =#ALTER USER testuser SET search_path TO testschema; みたいな感じでやったんですが全然testschemaを見てないみたいです 明示的にtestschema.testtableみたいな感じだと見れます 環境はPostgreSQL9.3.2 Ubuntu14.04-AMD64です
880 :
NAME IS NULL :2014/01/23(木) 18:08:26.87 ID:2Sh6JlGf
スーパーユーザーで戻っちゃうのは自己解決しました postgresql.confで設定してやらないと戻っちゃうんですね
一意制約(UNIQUE制約)について質問です。 次のようなテーブルが有ります。 テーブル "支払伝票" カラム | 型 --------------------------- 番号 | serial 支払先 | integer 金額 | integer 支払日 | date デフォルト now() 同じ月に同一の支払先を重複させないようにしたいです。 例えばこんな感じで… # ALTER TABLE 支払伝票 ADD constraint 支払月 unique(女子番号,to_char(支払日,'YYYYMM')); もちろんエラーになりますが。 支払月に相当する列を追加するしか方法はないですか?
>>881 誤記です
× ALTER TABLE 支払伝票 ADD constraint 支払月 unique(女子番号,to_char(支払日,'YYYYMM'));
◯ ALTER TABLE 支払伝票 ADD constraint 支払月 unique(支払先,to_char(支払日,'YYYYMM'));
>>881 それ以前に、1歴月に1回しか支払えないってのは、仕様上のバグだと思うんだが。
実際の支払日を使ってしまうと、月末締めなら、例えば今月なら1/4, 1/31の2回支払日があるから駄目だろ。
>>883 ありがとうございます。
実際には末締めで翌月10日(以降)の支払いなので1歴月に2回支払うことはないんです。
支払先が多くて複数の担当者が店頭で現金払いしているので、間違い(二重払い)が多くて困ってます。
支払月 フィールドを増やす 値はトリガーとかでセットすればいいんじゃね
>>885 そうですね、
変な小細工を考えるよりそれが一番良さそうです
ありがとうございました
>> 881 ALTER TABLE の構文上の制約だから、 CREATE UNIQUE INDEX ならいける。 CREATE UNIQUE INDEX ON 支払伝票 ( 支払先, CAST(extract('year' from 支払日) AS smallint), CAST(extract('month' from 支払日) AS smallint) ); to_char は IMMUTABLE 違反でエラーになるので extract で。
>>887 ありがとうございます
すばらしい!
新しく列、支払月を追加すること無く、以下のUNIQUE INDEXで見事に出来ました。
CREATE UNIQUE INDEX 支払月 ON 支払伝票 (
支払先,
CAST(extract('year' from 支払日) AS smallint),
CAST(extract('month' from 支払日) AS smallint));
PostgreSQL 奥が深いです。まだまだ勉強します。
ありがとうございました。
>>884 そんなところで、支払日から年月抽出してUNIQUE INDEX作っても、使えるシステムにはならないと思うんだ。
>>889 わからんけど、店頭のスタッフにタブレットでも持たせるんじゃない?
会社の数だけ仕事のやり方があって、それぞれみんな違うんだから、 そんなこと言ってもしょうがないだろ だいたい SQL や Postgres と関係ないし 余計なお世話だわな
892 :
NAME IS NULL :2014/01/26(日) 14:52:42.20 ID:kqHC0R1i
【社会】厚労省の中で男が刃物取り出す 銃刀法違反の現行犯で逮捕
http://uni.2ch.net/test/read.cgi/newsplus/1389346716/ 今後の犯罪傾向の予測と考察
事前面接の犯罪に憤りをもつ派遣社員や失業者が比較的警備の薄い厚労省、労働局、
労基署にいく可能性がある。しかし他の可能性を考えてみた。
事前面接中に派遣先と派遣元の担当者をターゲットにしたテロである。
派遣社員の事前面接は違法であり、事前面接中に派遣社員が暴れだした場合は
警察に通報できない状況となる。つまり通報すれば労基法6条違反、
職安法44条違反などの犯罪事実が報道で日本中に周知され、グッドウィル事件の再現となる可能性
が出てくる。そのため被害者である派遣先・派遣元が隠蔽しようとする奇妙なテロがおきうるのだ。
(※グッドウィル摘発のきっかけとなった事故は、現場の派遣スタッフの意図的な自傷事故だったとする説がある。)
事前面接
http://ja.wikipedia.org/wiki/%E4%BA%8B%E5%89%8D%E9%9D%A2%E6%8E%A5 事前面接等の違法行為の被害者として憲法において保全されるはずの権利
である給料が中間搾取され、労働契約も不安定なものとなり、派遣社員の
なかでは法治国家への不信が増大しているとの議論が存在する。
略〜過去・現在に事前面接下の派遣による中間搾取の損害を受
けた被害者は数百万人にのぼり、憲政史上、類をみない数の中間搾取による
犯罪被害者が創出され、それらの犯罪行為が放置されたことになる。犯罪
被害者も20〜40歳程度の若年・中年層が過半数を占めており、人口構成上、
公共の治安への影響力はきわめて強いといえる。被害者のなかで国(厚生
労働省・労働局・労働基準監督署)および司法(検察庁・警察)に対しての
不信や怒りが高まれば、大きな社会不安をおこす可能性はある。
893 :
まんちゃん ◆SYZTEPEAHI :2014/01/28(火) 18:16:49.01 ID:W220JcwH
;
お世話になります。 create temp table で作ったテーブルなんですが、明示的に drop table しなくてもセッションが切れたら自動的に drop されるんですよね? PHP から扱ってるんですが、どうもログを見ると drop されてないケースがたまにあるみたいで、なんで?って思ってます。 セッション毎に create temp table する前に drop table したほうがいいんですか? warning はでますけど
>>894 セッション切れてないんじゃない?
pg_pconnect使ってるとか。
postgreはよく知らんのだが、postgreのtemporary tableって、勝手にdropしてくれるの?
むしろtemporary tableを接続終了時、勝手にdropしないDBってなに?
え?
えっ、え?!
>>895 遅くなりましたが、ありがとうございました。
ひょっとしてそれが原因かも知れないです。
pg_pconnect使ってます。
明日(月曜日)試して報告します
>>897 dropしないDBMSあったと思う。
テーブルの定義は事前に用意しておくんだけど、内容はセッションごとに空からはじまるようなの。
oracleぐらいしかしらないな
>>901 事前に用意しておくって、そんなのだったら、一時テーブルじゃないじゃん。
そっか、oracleか。
>>902 postgresqlはレコードにとどまらず、テーブル定義自体が一時的。
>>904 内容が一時的かつセッション独立なので、目的は果たせるかと。
改修でレイアウト変更するときにクエリの変更だけで解決できないのは不便な気もするけどね。
>>903 つーことは、それがデファクト・スタンダードだろ。
>>904 事前に用意しないで毎回CREATE TABLEして使う???
CREATE TABLEしている時点で、事前に用意してるという意味だろ?
CREATE TABLEしたにも関わらずメタデータが見えないなら欠陥だろ。
>>908 create temp table だろ?
あるセッション中でだけ有効なテーブルを作成するってこと
セッション終了で自動削除
意味わかってんのかいな?
あほなんかいな?
>>909 Oracle使ってる人間からすると909の書き込みは、こいつアホ?って思っちゃうわ。
CREATE (TEMP) TABLEしたものが存在しないという点に違和感感じない時点で麻痺してるんだろうけど。
>>910 やっぱあほやったか
CREATE TEMP TABLEしたものが存在しないってどうゆうことだ?
CREATE したのにw
おまえだけがオラクル使ってるわけじゃねぇよ、ボケ
ここOracle版でもDBMS版でもないんだ Oracleの話は別でやってもらって良いかな
まぁそうですね。 postgresでは一時テーブルはセッション終了時に自動的にdropされるって前提で 894 さんも訊いてるのに、Oracleは〜とか言い出す奴がいるから話がややこしくなるw
>>910 セッション中は存在するよ。
oracleでもwithあるでしょ。ああいうのだと思えばいい。
いまだに「オラクル使ってる俺偉い」とか思ってる奴いるのかなぁ? 学習者は別としてだけどね。 かく言う俺もゴールド取得のためだけに無駄な勉強したなぁ
現実にはPostgreはOracle代替用途が多いだろ。 開発もOracleに実装されているのと同じような機能を載せて行ってるし。
だからといって、PostgreSQLは独立したRDBMSプロダクトだし、
ましてやOracle互換品などではない
それを実装仕様の差異について、Oracleの実装仕様が正しいことが
当然であるかのような思考しかできない
>>910 は、
アホと言われてもしかたないだろう
>>910 ×Oracle使ってる人間からすると
○Oracleしか知らない人間からすると
ところで、PostgreSQLのトランザクションって、CREATE TABLEとかで勝手にコミットされる?
>>917 > 開発もOracleに実装されているのと同じような機能を載せて行ってるし。
ずいぶん偏った見方をするもんだね。
そういう部分もあるし、そうじゃない部分もある。
たとえば、RDBMSとしてそれはどうなのよというmysqlの機能を取り込んだりなど。
>>919 DDLもrollbackできる。
PostgreSQLにも狂信的な信者って居てるんだな。 Oracleとの互換性が高いというのはPostgreSQLが使われるきっかけとして無視できないものだし、 Oracleとの互換性の高さを求めているユーザーも多い。 だからこそEnterpriseDBってものがあるわけだしな。 PostgreSQLの良さは、Oracleの機能も含めて色んな機能を貪欲に取り込んでいるところなのに、 Oracleの実装仕様は間違いだみたいな考え方の奴が多くなると せっかくメジャーになりかけてるのに、またマイナーDBに逆戻りするよ。 もっとも、PostgreSQLに対するOracleとの互換性は、最近はあまり求められなくなってきているから Oracleを否定してPostgreSQL独自仕様をどんどん増やせば良いんじゃないかな。
誰もそんなこと言ってないけど
>>923 被るところだったw
SQL標準が一般的でないって書いてるしね
>>921 突然何を?しかも内容が途中でひっくり返ってるから意図がわからない。
意趣返しのつもりなんだろ 小器だなw
燃料の一種ですよ
PostgresSQLのプロジェクトに寄付とかするにはどうしたらいいのでしょうか? 英語に強くないので本家のサイトにはあまり行きません。 PostgresSQLプロジェクトにはいくら感謝しても感謝しきれないです。 尊敬に近い気持ちがあります。
日本に受付窓口があればいいのにね。 10%ぐらい手数料取ってもいいから。
>>929 なんで PayPal で寄付できないの?
得体の知れない企業・団体にクレジットカード番号を渡したくないんだけど
ユーザー会当たりが窓口やればいいのでわ?
100ドルからってのが個人ではちょっと痛いですね。 アメリカと違って寄付は税金面で控除にもならないし せめて一口千円くらいに設定したら日本でも個人で寄付する人は多いと思うんですが MySQLには寄付は不要でしょうけど
ははは
日本にも寄付金控除制度はあるんだけどね。 MySQLには不要だろうけど。
この規模までくるとお金周りも細かいな
各国の支部の運営用のお金は支部でやってるんね
日本は会員制度でお金集めてるんだな
本体は10ドルからのクレカでの寄付か
支部だとPaypal使えるところもあるんな
企業スポンサーが結構多くて
本体のお金はあまり苦労してないらしいけどな
>>932 あっちの国の人はそういう感覚ないからな
>>937 >企業スポンサーが結構多くて
>本体のお金はあまり苦労してないらしいけどな
これは何の情報?
ソースはあるんだろうね?
>>937 >あっちの国の人はそういう感覚ないから
なことねぇわw
おまえ、知ったかばっかだな、全部
喧嘩か
まあカードの不正利用はカード会社が補償してくれるし なじみの店だとカード見せないでもカード決済してくれちゃうくらい おおらかだよな、向こうはw
企業スポンサーってどれくらいのお金払っているの?
はいはい、行ったこともないやつが自分の感覚だけで何を語るのやらw
>>944 こいつ、ほんまアホやなwww
ほんじゃ、おまえ、俺の「なじみの店」行ってみ?
>>932 おれに聞かれtも、寄付する気がなければやめれば
はなから・・・
>>947 おまえに聞いてねぇよ
ひっこんでろ、ぼけなす
950 :
NAME IS NULL :2014/02/14(金) 18:52:39.30 ID:/dUFM7gI
ヘルプです。 今、postgreSQLの入っているサーバーに、phpPGAdminをインストールし、GUIからデータベースをエクスポートしたいのですが、 以下のエラーが出て、サーバー内のデータベースが取得できません。 --------------------------------- SQLエラー: ERROR: database with OID XXXXX(ここはOIDの値) does not exist 文: SELECT pdb.datname AS datname, pr.rolname AS datowner, pg_encoding_to_char(encoding) AS datencoding, (SELECT description FROM pg_catalog.pg_description pd WHERE pdb.oid=pd.objoid) AS datcomment, (SELECT spcname FROM pg_catalog.pg_tablespace pt WHERE pt.oid=pdb.dattablespace) AS tablespace, pg_catalog.pg_database_size(pdb.oid) as dbsize FROM pg_catalog.pg_database pdb LEFT JOIN pg_catalog.pg_roles pr ON (pdb.datdba = pr.oid) WHERE true AND NOT pdb.datistemplate ORDER BY pdb.datname Fatal error: Call to a member function recordCount() on a non-object in /usr/local/apache2/htdocs/phpPgAdmin/classes/Misc.php on line 1897 --------------------------------- ちなみに、環境は以下の通りです。 --------------------------------- postgreSQL ver : 8.1.5 php ver : 5.2.5 phpPgAdmin ver : 5.0.5 --------------------------------- どなたか、解決方法やアドバイスございましたら、ご教示下さい。
OIDがぶっ壊れてるんかな? なおるかどうか分からんけど、Vacuum Fullしてみたら?
なんで psql では確認してみないの?
なんでそんなツールを使おうと思うんだろう? 色んなグラフィカル?なツールがあるみたいだけど、DBシステムの変更やメンテナンスとかのレベルで便利だとはとても思えない
954 :
NAME IS NULL :2014/02/15(土) 18:33:46.15 ID:w0wORzUI
>951さん ご助言ありがとうございます。 Vacuum Fullしましたが、依然変わらずです。 >952さん psqlでは、きちんとデータベースやテーブル、またそのレコードは見えています。
ググったらpg_dumpへのパスの設定をミスってるとかなんとか 直接pg_dump呼んだらいいのに、、と思ってしまうが。
RETURNING句って凄く便利で使い勝手があるね。 PostgresSQLの拡張、最高だわ
うん、すごく便利だね。 知ってからの使用頻度たるやかなりのものだわ。
参考までにどう使ってるの? writable cteとして? それとも削除した行をとっておくとか削除した行に対する処理?
一番多いのはシリアルの値を取得だな
>>960 それが俺も一番便利と思ったところ。
それ以外にも実際に色々と使い勝手が多くて、RETURNING句覚えてから使いまくってるけど、
恥ずかしいからここには書けないw
例えば、insert/update したときの更新日時なんかの default now() のフィールドとかをRETURNING句で取得とかね、 さらに to_char で文字列に変換したりしたうえで
便利だけど むかーし RETURNING や DROP TABLE の IF EXISTS のためだけに postgresql 8.2 or later を require されて発狂した記憶があるのであまり賛同できない 使う側としては便利だけど。。。
↓のようなことがやりたいのですが良い方法無いでしょうか? subqueryでマルチカラム取得はダメだよと怒られちゃいます create table tbl_a (id varchar, cn varchar, ou varchar); insert into tbl_a values (select id from tbl_b), (select cn, ou from tbl_c);
>>964 tbl_b と tbl_c を結合というわけにはいかない状況?
select 1つだけで出るようにJOINしたうえで values 外せばいい
だいたいbとcの結合関係も分からんから何とも言いようがないじゃん
>>963 なんで発狂するわけ?
で、完治したの?
'2014-01-01 27:30:00' を '2014-01-02 03:30:00' に変換したいのですが、どうするのがスマートでしょうか。 (PostgreSQL 9.3)
>>973 select to_timestamp('2014-01-01 27:30:00','YYYY-MM-DD HH24:MI:SS');
>>974 で示してるように、
'2014-01-01 27:30:00' みたいなのだって日付/時刻型書式としてちゃんと受け入れてくれるから特段変換とか考えなくていいよ。
日付/時刻型書式の文字列をtimestamp型に変換してるだけだから
'2014-02-31 00:00:00' だって問題ない
ERROR: date/time field value out of range
時刻計算について質問です。 psql=> select '2014-02-24 01:30:00'::timestamp - '2014-02-23 00:00:00'::timestamp; -[ RECORD 1 ]------------ ?column? | 1 day 01:30:00 これを、「25:30:00」のように表示させたいのですが、どうすればいいでしょうか。 to_char('HH:MI') を使っても、01:30 のような表示になってしまいます。
select ( extract( epoch from '2014-02-24 01:30:00.123'::timestamp ) - extract( epoch from '2014-02-23 00:00:00'::timestamp ) )::text::interval;
983 :
横から :
2014/02/24(月) 17:20:29.69 ID:??? >>981 ::text::interval の発想は無かった
便利だね