PostgreSQL Part.9

このエントリーをはてなブックマークに追加
1NAME IS NULL
PostgreSQL (ぽすとぐれすきゅーえる, ぽすとぐれす) について語るスレです。

●関連サイト
PostgreSQL 本家
http://www.postgresql.org/
日本PostgreSQLユーザ会
http://www.postgresql.jp/
ドキュメント
http://www.postgresql.jp/document/current/html/
ダウンロード
http://www.postgresql.jp/PostgreSQL
Let's Postgres (ポータルサイト)
http://lets.postgresql.jp/
pgFoundry
http://pgfoundry.org/

●前スレ
PostgreSQL Part.8
http://toro.2ch.net/test/read.cgi/db/1294641578/
2NAME IS NULL:2012/05/26(土) 22:58:50.47 ID:???
●過去スレ
PostgreSQL 2テーブル目 (WebProgから派生)
http://pc8.2ch.net/test/read.cgi/db/1056944337/
PostgreSQL & pgsql-jp ML 3テーブル目
http://pc11.2ch.net/test/read.cgi/db/1079771059/
【Windows】 PostgreSQL8 Part.1 【対応】 (実質part4)
http://pc11.2ch.net/test/read.cgi/db/1102247223/
PostgreSQL Part.5
http://pc11.2ch.net/test/read.cgi/db/1196512717/
PostgreSQL Part.6
http://pc11.2ch.net/test/read.cgi/db/1224318817/
PostgreSQL Part.7
http://hibari.2ch.net/test/read.cgi/db/1256300618/
PostgreSQL Part.8
http://toro.2ch.net/test/read.cgi/db/1294641578/

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

●関連スレ
2ch検索
http://find.2ch.net/index.php?STR=PostgreSQL
WebProg/PostgreSQL 2テーブル目
http://pc11.2ch.net/test/read.cgi/php/1047317680/
3NAME IS NULL:2012/05/26(土) 23:00:27.17 ID:???
テンプレはコピペだがよかったかな?
4NAME IS NULL:2012/05/26(土) 23:16:14.38 ID:???
>>前スレ1000

構文解析が済んでいるからって、処理順をすべて無視して良いとは限らないでしょう。
つーか、なぜあなたは自分レス>>前スレ978の不都合さを無視するの?
5NAME IS NULL:2012/05/27(日) 03:30:16.07 ID:???
そこは、内部的にそう展開されても問題ないといいたいんだろう
6NAME IS NULL:2012/05/27(日) 03:35:07.11 ID:???
みなさん、ま、まさか
case文とか
countとか、sumとかの集約関数さえも知らん奴を相手にしてたのでは

ウンチクを語るならSQLの基本的な仕様を理解してからにして欲しいですな
7NAME IS NULL:2012/05/27(日) 11:49:56.28 ID:???
それを抜きにしても(抜いちゃいかんけど)、
言語設計(概念レイヤとでも言うか)と実装レイヤがごっちゃなのよね、あの子。
8NAME IS NULL:2012/05/27(日) 13:58:50.33 ID:???
言語仕様あっての実装であって、
そのための字句解析、意味解析なのに、
その仕様である実行順も各句の役割も無視してる

具体例に対してちゃんと検証しようともしてない。まあSQL知らないからしょうがないのかも知れないが、それならそれなりの応対があるだろうに。
9NAME IS NULL:2012/05/27(日) 15:53:45.14 ID:???
いちおつ
10NAME IS NULL:2012/05/27(日) 17:45:00.71 ID:???
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 も同じようにエラーになる。それだけ。「不都合」って言ってるけど何が不都合?
11NAME IS NULL:2012/05/27(日) 18:52:48.69 ID:???
技術的に可能ならそのまま仕様にすれば良いと思ってるのか?
12NAME IS NULL:2012/05/27(日) 21:28:57.34 ID:???
>>10
信者ってw
丁寧に汚い言葉を使わずに、丁寧に返信していたつもりだが、
もう、そう言うようにしかとっていただけないのなら、勝手にしてください。

あ、最後に

>>983> 何の違いもなくエラーが出るよってことでいいのかな
>>WHERE cnt > 2 も WHERE COUNT(foo) > 2 も同じようにエラーになる。それだけ。「不都合」って言ってるけど何が不都合?

そういう意味ね。失礼、取り違えてました。
13NAME IS NULL:2012/05/28(月) 02:19:09.68 ID:???
闇雲に否定はしないけど、難しいだろうなと思うのはこういうの。

select
a as b,
b <- selectで別名解決はしないままでよい?
from tableA
where b = 3; <- 別名と、本来のカラム名との区別はどうやってつける?
14NAME IS NULL:2012/05/28(月) 03:24:14.95 ID:???
select
rand()*3::integer as id
,val
from
a
where
id < 100
これは?aテーブルにid列があったらどうする?
selectは、物理テーブルと関係のないを作り出したり、
複数列から一つの列を作り出したり出来る。上の人のエイリアスがかぶる場合ってのもそうだし、人間様がどれが欲しいのか理解できるのか?
それとも全部エラーにしちゃうのか?現在の標準仕様ならばなんの不都合もなく実行できるのだが。
15NAME IS NULL:2012/05/28(月) 03:32:53.32 ID:???
すまんpostgresだとrandom()だな
select floor(random()*1000)とかと読み替えてくれ
16NAME IS NULL:2012/05/28(月) 04:16:41.22 ID:???
もし、前スレ>>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が適用されちゃう、どう解決しよう?
17NAME IS NULL:2012/05/28(月) 10:58:24.31 ID:???
>>10
>それより前に別名を展開する処理を追加しただけですね。
正しく動作させるには「前」じゃなくて「スコープの外側」な

from
{
  @
  where
  {
    A
    select
    {
      B
    }
  }
}

「別名を展開」する命令を@〜Bのどこに書けばいいか分かるだろ?

C言語なんかだとどんな馬鹿でも「前」に書けば自動的にスコープ内に入るから
君みたいなプログラミング初心者ほど「前」に書けばいいという固定観念に縛られて
こういうミスをやってしまうんだよ
君はもっと勉強して脳みそを鍛えたらSQLを使いこなせるんじゃないかなあ
18NAME IS NULL:2012/05/28(月) 11:51:04.41 ID:???
ちょっと訂正
君はもっと勉強して脳みそを鍛えたらSQL「も」使いこなせるんじゃないかなあ
19NAME IS NULL:2012/05/28(月) 15:29:32.54 ID:???
SQLにスコープという概念が存在するとは思わなかった。
20NAME IS NULL:2012/05/28(月) 16:18:18.30 ID:???
>>19

SELECT table1.column1, table2.column2 FROM table1 INNER JOIN table2 ON ・・・

テーブル名で修飾してるのはスコープの概念そのものなんだが理解できるかい?
21NAME IS NULL:2012/05/28(月) 17:57:59.12 ID:???
処理順無視してないとか言って
SELECT COUNT(foo) AS cnt FROM hoge WHERE cnt > 2 GROUP BY bar;
これを
WHERE COUNT(foo) > 2
こんな展開したら明らかに処理順無視してるじゃねーか・・・
WHEREの方が先に動くっていってんだからよう
たまたまWHERE句でcount関数が使えないだけだろ
22NAME IS NULL:2012/05/28(月) 19:29:41.44 ID:???
>>19
サブクエリとか分かりやすいスコープ
23NAME IS NULL:2012/05/28(月) 19:31:34.32 ID:???
>>21
彼は、そういうのはエラーになればいいだろ、展開して問題ないものだけ動けばいいんだという言い分だと思う。
展開して問題ないものの判断ができない場面があることに気づいてないみたいよ。
24NAME IS NULL:2012/05/28(月) 20:12:30.91 ID:???
>>10は非手続き型言語をまったく理解してない
そもそも 列名 AS 別名 とはselect句の出力の属性を宣言しているのであって、プロシージャ(手続き)を宣言しているわけではない
それにも関わらず「それより前に別名を展開する処理を追加しただけですね。」というのはプロシージャを追加したということになり
もはや非手続き型言語ではない
そんな基本的な矛盾に気がつかないようではプログラマとして致命的だ
25NAME IS NULL:2012/05/28(月) 22:24:55.48 ID:???
なんだ、楽しみにして帰ってきたのにもう来ないのか?なかなか強烈だったから振り返ってみよう。
いつも過疎で平穏な、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の処理に入るまえに別名を展開すればいいだけなのに、なんでこんなことがわからないの。
>なんで結果が変わると思ったの?
とか頓珍漢なこと言っちゃって結局クエリの内容見ないのだ。
(なんで順番にこだわんないの?)よいこのみんなは思ったはずだ。
その後も同じような主張を繰り返した。
(自信満々なのはいいが、人の話をちゃんと聞かないようじゃ何のために質問しに来たんだか…
何かもっと面白い提案でもでるのかと思ってたのに…まぁこんな日も有るか)
大変ワイルドな出来事でした。
26NAME IS NULL:2012/05/28(月) 23:23:23.59 ID:???
なっが。
てか、元質問者と同一認定していいのか?
27NAME IS NULL:2012/05/29(火) 19:56:25.45 ID:???
気付いて、顔から火吹いて逃げちゃったんだろうか。
正直なところどう感じたのかをお伺いしたい。
28NAME IS NULL:2012/05/29(火) 20:33:19.53 ID:???
あれほど自信満々だったら、標準化してるISOなり
pgsql-jpで石井さんに詰め寄るくらいして頂きたかった。
29NAME IS NULL:2012/05/29(火) 20:42:50.92 ID:???
ここで復讐を果たす為に専門的知識を必死に習得してるのではなかろうか
30NAME IS NULL:2012/05/29(火) 21:34:53.21 ID:???
いや、きっとmysqlスレで同じ事を質問する
「試したらエラーになりました。簡単なことなんですけど、どうしたらできますか?」ってね
もはや何かの陰謀に違いない
31NAME IS NULL:2012/05/29(火) 23:11:12.20 ID:???
mysqlだったらあの程度の出鱈目仕様、もう実装してんじゃね?
32NAME IS NULL:2012/05/30(水) 15:16:04.86 ID:???
死者に鞭打つ真似はおよしなされ
33NAME IS NULL:2012/05/30(水) 16:47:44.19 ID:???
叩くほうがここまで必死なのにはわけがあるんだろ。
34NAME IS NULL:2012/06/01(金) 14:48:03.25 ID:???
9.2 32コアまでスケールは凄いな。
index only scanも導入されるし、
カスケードレプリケーション、range型とかも。
もうあれだな。
35NAME IS NULL:2012/06/01(金) 14:53:46.91 ID:???
客にバージョン上げようぜっていいやすくなるな
36NAME IS NULL:2012/06/02(土) 00:17:26.28 ID:???
やっぱりポスグレは最先端なのですね!
マイエスキューエラーに馬鹿にされなくて済みます
37NAME IS NULL:2012/06/03(日) 00:11:20.77 ID:???
ちょっと前までMySQL使ってて、ポスグレちょぼちょぼ使い出したとこやけど、
WITHが便利過ぎてワロタ。

とあるテーブルAから、条件に合うレコード削除して
その内容を「削除済み」用のテーブルBに書いて、
ついでにテーブルCの該当レコードのフラグカラムを書き換え。

これが一文一発で出来て、明示的なトランザクション制御要らず。
気持ち良過ぎやろ。
38NAME IS NULL:2012/06/03(日) 08:31:40.10 ID:???
writableCTEはpostgres独自だから意識して使うんだぞ
39NAME IS NULL:2012/06/06(水) 17:49:32.07 ID:???
40NAME IS NULL:2012/06/08(金) 07:38:08.88 ID:???
Windowsの32bit版と64bit版のベンチマーク比較の資料ってどこかにあるんでしょうか?
41NAME IS NULL:2012/06/13(水) 07:34:48.22 ID:???
CentOS5.8とPostgreSQL8.4を使っています
logファイルにSQLが出力されるのを抑止し
たいのですが、どのようにすればよいで
しょうか?
42NAME IS NULL:2012/06/13(水) 09:42:39.93 ID:???
postgresql.confをいじれ
見てわかんなかったらマニュアルを読め
43NAME IS NULL:2012/06/13(水) 12:13:08.03 ID:???
44NAME IS NULL:2012/06/13(水) 14:14:10.20 ID:???
いやまあ、log_statement だと思うけど
わざわざ設定しないと出ないはずだが。
45NAME IS NULL:2012/06/13(水) 18:19:53.31 ID:???
うん、デフォだと出ないよね
46NAME IS NULL:2012/06/14(木) 17:11:51.92 ID:???
alter table テーブル名 add column カラム名
するときに、場所って指定できますか。
たとえばカラム「age」をカラム「name」と「gender」のあいだに追加したいとか。
47NAME IS NULL:2012/06/14(木) 18:24:58.88 ID:???
>>46
普通はテーブル作りなおさないとできないんじゃなかったかな。
RDBはもともとカラムの位置を気にしないものだし。
48NAME IS NULL:2012/06/14(木) 18:56:18.06 ID:???
SELECT時に順番決めるしね。
*指定したくて気になるならView作ればいいし、
DROPして作りなおすのもありっちゃあり
49NAME IS NULL:2012/06/14(木) 21:01:55.02 ID:???
並べ替えが出来るdbもあるのよね
postgresの場合は出来たら便利なのは分かってるけど他に優先度が高いのがあって、手掛ける人がいないってどこかで読んだような
50NAME IS NULL:2012/06/14(木) 21:03:48.39 ID:???
51NAME IS NULL:2012/06/14(木) 22:10:32.27 ID:???
1・2・3
52NAME IS NULL:2012/06/17(日) 14:29:53.21 ID:???
順番が気になる人は、ほとんど初心者しかいないから
対応するのもアホくさいと思うがなあ
53NAME IS NULL:2012/06/17(日) 14:54:04.60 ID:???
>>52
変更コストがどうかと言う問題はあるけれど。
20列のテーブルで3-5列に処理区分1,処理区分2,処理区分3とあり、
処理区分4だけが21列目。しかも、20列目の入力時刻の後になるというのは
いろいろな意味で好ましいことではない。
54NAME IS NULL:2012/06/17(日) 15:44:40.84 ID:???
その考えの先には、
  :
 予備1  varchar(100)
  :
 予備2  varchar(100)
  :
があったりして。
55NAME IS NULL:2012/06/17(日) 17:29:01.34 ID:???
>>53
すべてのユーザがviewを通してすべてのテーブルを管理しているという訳では
ないからね。やはり列の並び順も少なくとも管理しやすさには大きく関係する。
一般にはね。
56NAME IS NULL:2012/06/20(水) 15:38:39.38 ID:???
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%になっています。
57NAME IS NULL:2012/06/20(水) 16:54:48.99 ID:???
速度改善とは関係ないけど、EXISTS使うと、1件見つかった時点で切り上げそうな気がする。
58NAME IS NULL:2012/06/20(水) 18:34:00.40 ID:???
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%'
);
としたらどうなる?
59NAME IS NULL:2012/06/20(水) 18:35:40.85 ID:???

SELECT EXISTS(
SELECT * FROM documents WHERE to_tsvector(document) @@ ts_query('keyword & etc') and document like E'%keyword etc%'
);
のまちがいだった。
6056:2012/06/20(水) 18:55:08.87 ID:???
>57
ありがとうございます。

1件(1行)でもキーワードがあるかどうかを確認したいので、
そのように1件見つかった瞬間に処理を切り上げてもらえるのが助かります。

>58
ご提案ありがとうございます。
なるほど、一度vector検索してから
連語があるか確認するのですね。

一度テストしてから、またお返事させていただきます。
61NAME IS NULL:2012/06/21(木) 20:53:06.34 ID:???
1000文字英文100万行くらいなら全然対したことなさそうだけどな

trgrm自体の検索は大体そこそこ早いんだよ
でもインデックスでヒットした後に実テーブル確認しに行ったりするとそこで速度が落ちる。
だからヒット数が多ければ多いほど遅くなるよ。 特にメモリに実テーブルがのっていない場合。
そんな感じじゃない?>>56
そうであれば、差し支えなければそもそもginでヒットする件数をgin_fuzzy_search_limitで抑えちゃうことができるのでそれを検討してみては?ここに書いてあるよ
www.postgresql.jp/document/9.1/html/gin-tips.html
62NAME IS NULL:2012/06/27(水) 17:48:43.01 ID:???
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件しか返さない)
間違っておりますでしょうか?
63NAME IS NULL:2012/06/28(木) 20:49:09.44 ID:???
そこで設定した数字は正確に有効な行数を表す訳じゃないのよ。
なので小さく設定しすぎると、正しい結果が帰らないこともある。
事情を説明するのが面倒(というかソース追う時間が無くて自分も正確に把握してない)
なので、興味があれば調べてみて。

ということで、速度(と結果)が妥協できるところで、
小さく設定するのがよし。
64NAME IS NULL:2012/06/28(木) 21:19:43.23 ID:???
あ、たくさんの行がヒットすると遅いってのは、

 ginインデックスのみからwhere句条件で探す(これは早い。転置なんで当たり前)
 →正しいかどうかヒープ(メモリに納められてる実タプル(もちろん無ければディスク読む))をもう一回条件で調べる
(bitmapの説明は省いた)

て手順だから。プランでrecheckって出てるでしょ?
インデックスっていつも正しい情報が入ってるって限らないのよpgは
65NAME 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)は問題ありません。
こちらも文字化けを解消する、またはメッセージを英語にする方法をご存知であれば教えてください。
6665:2012/06/29(金) 11:19:28.71 ID:Q8TsbVeK
追記です。
osのタイムゾーンは日本です。

よろしくお願いします。
67NAME IS NULL:2012/06/29(金) 16:30:32.16 ID:???
http://www.postgresql.jp/document/current/html/multibyte.html#AEN24155
を参照して文字コードを指定する必要があるのかもしれない。
68NAME IS NULL:2012/06/29(金) 18:04:40.36 ID:???
エラーメッセージの話でしょ?
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コマンド使っても化け文字?

6965:2012/06/29(金) 21:27:43.37 ID:CwgX9y5+
お二方ありがとうございます。
おかげさまで(1) については解決しました。
原因は、トラブルシュートのテスト用に用意した、意図的に壊した設定ファイルが読まれていました。
正しい設定ファイルに置き換えることで解決しています。

(2) については状況が変わりません。
どうも本体ではなくJDBCドライバの問題のような気がします。

70NAME IS NULL:2012/07/07(土) 15:32:17.19 ID:???
Win7でレプリケーションうまくいかないなぁ。
71NAME IS NULL:2012/07/24(火) 13:30:06.59 ID:???
pg_dumpでデータ以外のみをエクスポートする方法はないでしょうか?
72NAME IS NULL:2012/07/24(火) 19:06:10.69 ID:???
>データ以外のみ
schemaのことだね?
オプションにあるべ
73NAME IS NULL:2012/07/24(火) 21:01:08.03 ID:???
-s
74NAME IS NULL:2012/07/24(火) 21:07:44.77 ID:???
ありがほー
75NAME IS NULL:2012/08/03(金) 16:19:20.68 ID:???
http://www.postgresql.jp/document/pg823doc/html/datatype-numeric.html
ここに
integer 4バイト
bigint 8バイト
とありますが、これは64bit版でもそうなのでしょうか。
76NAME IS NULL:2012/08/04(土) 16:42:13.17 ID:???
>>75
YES. 32/64bitで差はない。
77NAME IS NULL:2012/08/07(火) 10:10:03.88 ID:???
>>76
ありがとうございます。
いちおう確認ですけど、x86_64ならintが64bitだから、PostgreSQL 64bit版でもintegerとbigintに性能の差はないと考えていいですよね?
78NAME IS NULL:2012/08/07(火) 11:13:07.24 ID:???
CPUのビット数やコンパイラのintの長さと
DBのINTに関係は無いよ、環境に寄らずMDBSが決めたサイズになる。
79NAME IS NULL:2012/08/07(火) 16:56:07.46 ID:???
(C)コンパイラのintのサイズにしても、
64bit環境だからって64bitとは限らないし。
というか32bitのままって方が多そう。
80NAME IS NULL:2012/08/15(水) 12:46:09.78 ID:???
Postgres9.1.0をソースコンパイルでOSX山ライオンにインストールしようとした。
が、

configure: error: in `/Users/jiro/Downloads/postgresql-9.1.0':
configure: error: C compiler cannot create executables

と文句を言われ途中で止まってしまいます。
対処法をご存知のかたがいましたらご教授願います。
81NAME IS NULL:2012/08/15(水) 13:21:08.32 ID:TlE9Z+hr
あげます。
82NAME IS NULL:2012/08/15(水) 14:06:21.38 ID:???
試しに9.1.4ダウンロードしてビルドしてみたけど、問題なかったよ。
Xcodeとコマンドラインツールは入れてるよね?
83NAME IS NULL:2012/08/16(木) 12:45:21.74 ID:???
postgresqlでLEFT OUTER JOINをしたいんだけど
片方のテーブルの型がtextでつなげる方の型がinteger
おまけにtextの方が0で頭が埋ってる10桁なんだがどうやるんですか?
教えて下さい偉い人

SELECT * FROM a LEFT OUTER JOIN b ON a.accountcode = to_char(b.id, '0000000000');
これじゃなぜかだめっす
84NAME IS NULL:2012/08/16(木) 13:48:01.64 ID:???
どうだめだったの?
a.accountcode::INT とかでいかない?
85NAME IS NULL:2012/08/16(木) 19:01:32.33 ID:???
これでどう?
to_char(b.id, 'FM0000000000');

偉くないので分からないけど、こっちの方が良いかもしれない。
to_char(b.id, 'FM0999999999');
86NAME IS NULL:2012/08/22(水) 01:02:20.86 ID:???
不慣れなplpgでトリガ関数いっぱいつくらにゃあかんのですが、
デバッグのいい方法ないですかね?
PgAdminVだと関数のデバッグのみでトリガ関数のデバッグができないようでして
87NAME IS NULL:2012/08/22(水) 02:06:49.47 ID:???
RAISE文を使ってprintfデバッグくらいしか思いつかないなぁ。
88NAME IS NULL:2012/08/22(水) 08:02:55.65 ID:???
そうですかー。んじゃ今日もトリガと格闘してきます。
89NAME IS NULL:2012/08/23(木) 16:35:57.98 ID:???
textsearch_sennaで30個にパーティションに分割したテーブルを
selectすると、必ずpostgresのプロセスごと落ちるんだけど、
何か方法ないですか?

分割した個々のテーブルにならselectしても落ちないんですが、
個々のテーブルをselectするSQLを5つくらいunionでつなげてもやっぱり落ちます...
90NAME IS NULL:2012/08/29(水) 02:04:44.97 ID:???
9.2が出たら起こしてくれ
91NAME IS NULL:2012/08/29(水) 10:19:16.67 ID:???
PostgreSQL 9.2 RC1 Available for Testing
Posted on 2012-08-27

だいぶ先かな
92NAME IS NULL:2012/08/31(金) 08:57:08.31 ID:???
マイエスキューエラーに虐められた時に言い返す方法教えて
93NAME IS NULL:2012/08/31(金) 13:07:04.38 ID:???
>>92
比較スレへどうぞ。

MySQL vs PostgreSQL Part2
http://toro.2ch.net/test/read.cgi/db/1123011800/
94NAME IS NULL:2012/09/01(土) 19:25:06.73 ID:???
>>92
飼い殺し乙

とか言ってやれ。事実だし。
95NAME IS NULL:2012/09/02(日) 11:52:33.57 ID:hfAxyDdY
MySQLだと1つのDBに一人のユーザを閉じ込めるっていう隔離ができるんですが、
PostgreSQLでもできますか?
やりかた教えてください><;
96NAME IS NULL:2012/09/02(日) 11:59:14.43 ID:???
initdbで作成するとき、場所変えればいい。
複数作れる。同時に起動するときは、それぞれのpostgresql.confで
ポート変えないとならんけどね。
97NAME IS NULL:2012/09/02(日) 12:31:47.63 ID:???
superuserにしなければいいんでは?
98NAME IS NULL:2012/09/03(月) 00:12:18.97 ID:???
>>96 のようにDBクラスタごと分ける
pg_hba.conf でログインできるDBを制限
スキーマ + ロールでアクセス制限

どれでもお好きに。ちなみに、MySQLのDB ≒ Postgresのスキーマ だと思ったほうがよいかも。
99NAME IS NULL:2012/09/06(木) 11:36:17.07 ID:???
idをserialで作ったテーブルがあるんですけど、これをあとからbigserialに変えることはできますか。
alter tableだとsequenceが変わらないような気がします。
100NAME IS NULL:2012/09/06(木) 12:09:39.64 ID:???
>>99
自己レスです。
¥d hogehoge_id_seq
すると、なんとシーケンスはbigintで作られているではあーりませんか。
これなら alter table hogehoge alter column id type bigint だけでいけそうです。
101NAME IS NULL:2012/09/06(木) 22:35:39.12 ID:???
そもそも serial は、なんでデフォルトで bigserial 相当にならないんですかね?
歴史的な経緯?
102NAME IS NULL:2012/09/07(金) 05:15:46.93 ID:???
"int" がデフォルトで32bitみたいなもんじゃないの。64bitはbigintだし。
103NAME IS NULL:2012/09/07(金) 12:01:00.99 ID:???
そうころころ替えられないからだろう。
足りなくて困ってる人数ないだろうし。
104NAME IS NULL:2012/09/07(金) 17:04:23.71 ID:???
相変わらずintが最速だからじゃない?
105NAME IS NULL:2012/09/17(月) 15:26:30.91 ID:fmu2IRis
PostgreSQL 9.2 has been released!
http://www.postgresql.org/
106NAME IS NULL:2012/09/17(月) 15:49:57.08 ID:???
>>90
おい、起きろ
107NAME IS NULL:2012/09/17(月) 19:18:56.82 ID:???
ん、もうかい?
意外と早いんだな。
108NAME IS NULL:2012/09/17(月) 19:56:17.28 ID:???
range 型キタコレ
109NAME 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が急に時間がかかるようになることに心当たりがある方はいるでしょうか?
また、調査する場合はどのあたりから調査していくべきでしょうか。
110NAME IS NULL:2012/09/17(月) 23:45:11.49 ID:???
いくら出す?
111NAME IS NULL:2012/09/18(火) 00:18:25.21 ID:WP7LnWlO
解決しました
さーせんw
112NAME IS NULL:2012/09/18(火) 08:00:41.75 ID:???
よかったね
113NAME IS NULL:2012/09/18(火) 11:13:20.04 ID:???
確かjson使えるよな?待ってたよ〜ん。
114NAME IS NULL:2012/09/24(月) 03:06:22.66 ID:???
配列を引数にして、WHERE節で使う関数のWHERE節はどう書きますか?

WHERE serial IN ?$1?
115NAME IS NULL:2012/09/24(月) 03:12:50.60 ID:???
WHERE serial = ANY( $1 )
NULLへの対応が必要ならば、別途 調整がいる。
116NAME IS NULL:2012/09/24(月) 03:45:22.40 ID:???
あざっす^^
117NAME IS NULL:2012/09/26(水) 20:42:11.37 ID:wFrvL7PY
db_syntax_diffについて、知っている情報あれば、
教えてください!!
118NAME IS NULL:2012/09/28(金) 03:21:24.92 ID:???
まずは知っている情報を出してくださいよ。
119NAME IS NULL:2012/09/30(日) 15:47:01.67 ID:???
バージョンが9.2になって小文字に変えないとエラーになるコマンドとかあるな・・・。
LANGUAGE 'C'をLANGUAGE 'c'にしないと動かないってとこでハマったわ。'
120NAME IS NULL:2012/09/30(日) 19:58:41.68 ID:???
テスト
121NAME IS NULL:2012/10/01(月) 10:52:13.58 ID:???
9.2の前はいくつ使ってたの?
select * from pg_language; でCかcの違いじゃないのかなあ。
122NAME IS NULL:2012/10/01(月) 11:32:18.61 ID:???
>>121
8.4使ってた。そこでインストール済みの拡張言語見れたのか・・・。
123NAME IS NULL:2012/10/04(木) 01:46:06.95 ID:???
20年くらい前から Oracle 使ってて、10年くらい前に全面的にすべてのシステムを PostgreSQL に移行しました。
新規開発も全て PostgreSQL です。現在まで何も問題ありません。
ですが、最近、世界的に MySQL にシェアを奪われ続けており、この先ずっと PostgreSQL を使い続けるべきか、正直、迷っています。
どんなものでしょうか?
124NAME IS NULL:2012/10/04(木) 02:40:20.37 ID:???
MySQL自体が存在しなくなる可能性を考えるべき。
125NAME IS NULL:2012/10/04(木) 02:53:14.19 ID:???
>>124
なるほど。
よく分かりました。吹っ切れました。
ありがとうございます。
126NAME IS NULL:2012/10/04(木) 06:44:27.97 ID:???
やけに納得するのがはえーなw
127NAME IS NULL:2012/10/04(木) 09:10:57.91 ID:???
MySQLがなくなる可能性もPostgreSQLがなくなる可能性も同じようなもんでしょ
だから>>123は杞憂だよ
128NAME IS NULL:2012/10/04(木) 10:11:08.85 ID:???
>>126
心情的には PostgreSQL と心中してもいいかな、くらい思ってるので。
129NAME IS NULL:2012/10/04(木) 11:38:42.60 ID:???
今使ってるバージョンがいきなり使えなくなるわけじゃないからな。
無くなってから次考えりゃいい
130NAME IS NULL:2012/10/04(木) 13:20:44.90 ID:???
むしろOracleに買われたMySQLのほうが消える可能性高かったりして。MariaDBが一応あるけどねぇ。
131NAME IS NULL:2012/10/04(木) 23:18:24.26 ID:???
他人が書いたマニュアルをみながら、作業を進めてると壁にぶつかってしまいました。。。

>createdb -U Postgres -O ユーザ名 DB名
と入力すると、"createdb : コマンドライン引数が多すぎます。(始めは"?O")

と言われるのですが、何がダメなんでしょうか?
バージョンは9.0.4です。
(普段は電気屋さんしてます。)
132NAME IS NULL:2012/10/04(木) 23:44:33.46 ID:???
>>131
ユーザ名はアルファベットオンリー?
133NAME IS NULL:2012/10/05(金) 01:20:55.65 ID:???
いっつも

$psql -U postgres
#create user ユーザ名;
#create database DB名 owner ユーザ名;

でやってるけど、そんなコマンドあるんだな。
134NAME IS NULL:2012/10/05(金) 02:17:46.03 ID:???
>>133
CREATE DATABAS は、 SQL コマンド
createdb は、CREATE DATABASE の shell スクリプトラッパー
135NAME IS NULL:2012/10/05(金) 08:57:01.29 ID:???
>>131
はい、そうです。全部小文字。
この前にユーザ作成しました。
136NAME IS NULL:2012/10/07(日) 12:03:49.94 ID:???
まず Postgres で蹴られると思うけどな、、、 postgres でやってる?
137NAME IS NULL:2012/10/09(火) 18:00:01.74 ID:???
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の仕様?
138NAME IS NULL:2012/10/10(水) 04:00:10.34 ID:???
>>136
あ、それはこのスレに書き込む時、携帯の自動処理で大文字になってしまったのです。。。
139NAME IS NULL:2012/10/10(水) 10:01:42.30 ID:???
コマンドライン引数が云々、はシェルが出してるんかな
環境はWindows?
140NAME IS NULL:2012/10/10(水) 10:12:43.90 ID:???
>>139
「>」ってなってるからWindowsっしょ
141NAME IS NULL:2012/10/12(金) 14:08:58.85 ID:???
>>137
or検索だからなのでは・・・?
あと、postgresの全文検索はインデックスが壊れる事がちょくちょくあったような。

そもそもsenna使ってる時点でノイズは結構出るから、あまり気にしなくていいのでは?
142NAME IS NULL:2012/10/12(金) 16:43:38.89 ID:???
みなさん、PostgreSQL のメジャーバージョンアップって
どうしてます?
うちの会社は基本的に24時間365日営業しているので、
ネット(システム)を停止できないです。
事情があれば、顧客に事前に通知して1日とか一斉休業するんですけど、
やっぱ、なかなかバージョンアップだけではそこまでできません。
セキュリティホールとか殆ど無いですからね、PostgreSQL…

143NAME IS NULL:2012/10/12(金) 16:48:35.98 ID:???
>>142
そんな装備で大丈夫か?
144NAME IS NULL:2012/10/12(金) 18:25:20.96 ID:???
psqlで変数って使えないの?
$name = 'foobar';
select * from table where name = $name;
とかしたい。
145NAME IS NULL:2012/10/12(金) 19:15:08.39 ID:???
>>144
若干使いづらいところはあるが、 \set と :varname 。
http://www.postgresql.jp/document/9.2/html/app-psql.html#APP-PSQL-VARIABLES
146NAME IS NULL:2012/10/13(土) 00:44:44.96 ID:???
>>145
さんくす
147NAME IS NULL:2012/10/13(土) 01:37:16.87 ID:???
>>143
すいません、「装備」とは?
148NAME IS NULL:2012/10/13(土) 03:02:24.33 ID:???
>>142
どういうシステムか知らないけど、普通に動いて特に困らないならバージョンアップはしなくていいんじゃない。
さすがに未だ7使ってるなら計画練ってアップデートしたほうがいいと思うけど。
149NAME IS NULL:2012/10/13(土) 07:14:23.17 ID:???
質問者とは別人だけど興味深い質問なのでおれも知りたい。
>>148
それはうまい解決方法がない、ということでいいのかな。
150NAME IS NULL:2012/10/13(土) 14:31:39.67 ID:???
>>149
そういえばこの質問は止めたらマズいシステムで止めずにアップデートするには?だったか。
Slonyとpgpool使えばノンストップでバージョンUPいけるらしいけど、テーブル増えるから俺は使いたくないなー。
1日止めるような要件の時に一緒にやっちゃうのがいいんじゃない。
151NAME 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; は必要なのでしょうか?
レベルの低い質問ですみません。
152151:2012/10/17(水) 01:40:58.77 ID:???
すみません、あまりにもレベルの低い質問で。その心情を吐露すれば、つまり
レコードレベルのロックであれば、テーブルそのものはなくなるわけではないので
普段は気にしないでSQLを書いていたのですが、今回初めて テーブルそのものを
DROP するため、不安になっているのです。トランザクションってのはつまり、
ROLLBACK さえすれば DROP そのものも無かったことにできるものだろうとは思うし、
DROP してしまう table をLOCK してもしょうがないだろうし・・・。混乱中です。
153NAME IS NULL:2012/10/17(水) 06:47:11.44 ID:???
>>152
PostgresqlだとDROP TABLEやTRUNCATEやCOPYコマンドにもトランザクション制御ができるのはそのとおり。
DROP TABLEやTRUNCATEを実行すると、内部でACCESS EXCLUSIVE LOCKがかけられて、処理中は自分以外が
対象のテーブルにアクセスできなくなる。
http://www.postgresql.jp/document/8.4/html/explicit-locking.html#LOCKING-TABLES
154151:2012/10/17(水) 12:09:59.64 ID:???
>>153
ありがとう御座います。
自動的にACCESS EXCLUSIVE LOCKがかけられるのですね。すっきりしました。
ユーザー側からはリードオンリーの巨大なテーブルだったので
挿入や更新の度に >>152 を行おうと思います。
155NAME IS NULL:2012/10/17(水) 20:16:30.11 ID:???
もっと基本的な部分を見直すと10倍ぐらいは速くなるとかいうパターンじゃないかねぇ。。。
156NAME IS NULL:2012/10/17(水) 23:20:15.92 ID:???
>>155
何千件ものレコードを 更新または挿入するんです・・・。
インデックスをDROPしてからINSERT or UPDATE して、
またインデックスをCREATE するというのもやってみたんですが多勢に無勢でして。

状況としては管理者のみが編集できるマスターテーブルの更新です。
もちろん何千件といっても、実際の変更箇所は全レコードの数%なんですが、
変化したかどうかサーバーに問い合わせるのも時間かかるし、
そのマスターテーブルが Excel という仕様なので、>>151に考えが至ったのです。
157NAME IS NULL:2012/10/17(水) 23:48:10.34 ID:???
業務アプリのバッチ系なんかだと、毎日何万件ものデータを
(複数の表に対してインサートやアップデートだけじゃなく計算したりして)
処理するというのを分のオーダーでやってるんですけど。。。

まともなプロに見せたら、1時間ぐらいで10倍速くしてくれると思うよ。
158NAME IS NULL:2012/10/17(水) 23:59:48.81 ID:???
UPDATEにINDEXが使われてなくて遅いだけだったりして
159NAME IS NULL:2012/10/18(木) 00:02:00.85 ID:???
たったの数千件なのか。普通のトランザクションかけるだけでいいんじゃないの。
160NAME IS NULL:2012/10/18(木) 01:17:19.92 ID:???
>>157 >>159
いや、挿入更新処理を 遅くとも2〜3秒以内で終わらせたいのです。

>>158
そうなんです。状況によってそれもありえるのが厄介で・・・。
161NAME IS NULL:2012/10/18(木) 02:05:42.92 ID:???
>>160
>いや、挿入更新処理を 遅くとも2〜3秒以内で終わらせたいのです
じゃ今、何秒かかってるの?
162NAME IS NULL:2012/10/18(木) 02:09:31.97 ID:???
>>161
ひどいときだと20〜30秒くらいかかってました。
COPY で書き換えた所、1秒くらいで終わりました。
163NAME IS NULL:2012/10/18(木) 06:24:01.99 ID:???
たぶん更新系のSQLを数千回発行してるから、毎回ディスクをflushしに行って遅くなってるんだと思う。
たとえDELETEとINSERTを使って20〜30秒かかっても、その間も他のユーザーは更新前のテーブルを参照できるんだから、
数秒のテーブルロックをかけるよりもシステムのロックがなくていい気がするけど、
COPY文を使って1秒テーブルがロックする程度のことを許容できるなら、そのやり方も早くて簡単でいいと思う。
164NAME IS NULL:2012/10/18(木) 07:43:14.99 ID:???
>>160
それがわかってるならINDEXが使われるようにしたらいいだけでは?
165NAME IS NULL:2012/10/18(木) 13:35:17.43 ID:???
>>163
おっしゃるとおりなんだと思います。今はまだマスターテーブルの管理者が一人だからいいですが、
そのうち別のキャンパスにもおきたい、とかなってくると話がややこしくなってきそうなので
そのときに備えて今から前任者の「Excelでマスターを編集」という状況から脱したいと思います。
ただ、やっぱ便利なんだな・・・いろいろと。

>>164
更新挿入の時にこちら(管理者)がWHERE句で参照する部分のINDEXはもちろん残しています。
ただ、他にも10以上のINDEXがはってあって、それの更新に時間がかかっているのかな?と
おもい削除してみたりしましたが、たいして変わらなかったんです。

今にして思うと COPY文でインデックスのCREATEもふくめて1秒で完了しているということは
INDEXの更新自体は殆ど関係無かったのでしょうかね。
166NAME IS NULL:2012/10/18(木) 14:42:58.91 ID:???
UPDATEして、できなければ INSERT するという書き方は
なんとかすっきりできないものなのでしょうかねぇ。
MERGEをずっと心待ちにしているのだけど。

>>165
それにしてもインデックスの作成が早すぎて不思議な気分です。
ちょっと気味が悪いくらいです。と思って見直したら幾つかのインデックスを張り忘れていたw
それでもトータルで2〜3秒・・・やっぱ不思議だ・・・。
167NAME IS NULL:2012/10/18(木) 16:00:20.14 ID:???
キャンパスって、、、大学かよ。
まさかパソコン詳しい先生が一人も居ない大学なの?

よくわからんが、多分統計情報が古いんだろ。
オラクルみたいなhintを埋め込むことができないのは不便だが、
例えば1000行INSした時点でanalyzeするとかしてみれば改善されるんじゃないか?
168NAME IS NULL:2012/10/18(木) 18:46:19.58 ID:???
雰囲気からアップデートの要否判定とかしてないよね。
それならtruncate->copyでいいと思うわ。
何もdropする必要はないかと。
169NAME IS NULL:2012/10/18(木) 22:54:25.72 ID:???
ひょっとして、SQLをクライアントから発行してるんではないだろうか。
INSERT
if not inserted then UPDATE
INSERT
if not inserted then UPDATE
INSERT
if not inserted then UPDATE
...
みたいな感じでクライアントから数千行INSERT/UPDATEしようとしているんなら遅くて当然だよな。
170NAME IS NULL:2012/10/18(木) 23:18:54.64 ID:???
>>167
そう。大学系。試薬系のデータベスなんですけど、(あまりいうと特定されるのでよしときますが)
前任者の残していったシステムで、この板のみんなが見たらあんまりなテーブル設計で腰を抜かすと思いますよ?
プライマリ以外にインデックスが付いていないというのもビックリ。
素人の自分ですらガンガン高速化できて楽しめましたよ?
式インデックスをつけたときは本気で感動されました。

>>168
明日、早速 truncate で試してみます。

>>169
まさにそんな感じでぶらうざ経由でphpから更新する使い方ですた。
あまりにも遅いので業を煮やしてこないだターミナル経由でアップするように作り変えたという次第です。
171NAME IS NULL:2012/10/18(木) 23:21:11.10 ID:???
>>167
8.4って統計情報の更新、自動じゃないんでしたっけ?
勝手に最適化されているんだと思ってました。
調べてみます、ヒントをありがとうございます。
172NAME IS NULL:2012/10/18(木) 23:27:31.18 ID:???
>>170
PK以外でINDEX付けないのは良くある。
というか、たかが数千行程度ならINDEX要らん。
INDEX付けると、それが効いてるSQLが速くなって感動するかもしれんが、
INSERTやUPDATEが遅くなって、全体でみると却って遅くなってる場合がある。
173NAME IS NULL:2012/10/18(木) 23:40:56.52 ID:???
>>172
なるほど!勉強になります。案外とそういう配慮があったりして・・・。
174NAME IS NULL:2012/10/19(金) 00:05:23.67 ID:???
あと、テーブルが全部メモリに乗っかるようにチューニングした?
規模的に余裕だと思う。
175NAME IS NULL:2012/10/19(金) 06:35:36.65 ID:???
式インデックス付けた???
そりゃINS/UPDが遅くなるわな。。。
176NAME IS NULL:2012/10/19(金) 11:09:05.06 ID:???
開発環境で使っているpostgresqlのデータベースファイルを、ローカルのディスクから
NFSマウントしたディレクトリに移動しようとしています。
こんなことして大丈夫でしょうか。本番環境ではないので、負荷は心配しなくていいですが、
DBに不整合が発生するようなことはたとえ開発環境といえど避けたいです。
177NAME IS NULL:2012/10/19(金) 11:46:43.41 ID:???
>>166
>UPDATEして、できなければ INSERT するという書き方は
>なんとかすっきりできないものなのでしょうかねぇ。
>MERGEをずっと心待ちにしているのだけど。

9.1からこういうことができるようになったらしい。へえー
http://lets.postgresql.jp/documents/technical/9.1/1#syntax
> 例2 : MERGE 文はまだサポートされていませんが、UPDATE できなかったキーを持つ行のみ後から INSERT を行うと、
> 他DBの MERGE や REPLACE 文と同等の機能を実現できます。

178NAME IS NULL:2012/10/19(金) 15:54:35.88 ID:???
>>176
良いよ。
バックアップ&リストアなんて基本的にファイルコピーだし。
179NAME IS NULL:2012/10/19(金) 15:56:08.84 ID:???
MERGEってのはUPDATEとINSERTを一つにして速くするって目的でできたものじゃないんだけど。
結果的に呼出しが1回になったからその分速くなっただけで。
180NAME IS NULL:2012/10/19(金) 19:55:44.50 ID:???
>>176
NFSのsyncオプションを有効すれば不整合は起きないかもしれないけど、
更新がとても遅くなるかもしれない。
181NAME IS NULL:2012/10/22(月) 19:10:59.94 ID:???
ユニークキーについて相談です。
こういうテーブルがあったとして、

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カラムを作るのが簡単ではありますが、それを作らずに済む方法があれば教えてください。
182NAME IS NULL:2012/10/22(月) 19:20:39.09 ID:???
これで作ったユニークキーって、何に使うつもり?
183NAME IS NULL:2012/10/22(月) 19:42:05.69 ID:???
ふつうに
CREATE UNIQUE INDEX X ON example (name,created_at);
では駄目なのかい?
184NAME IS NULL:2012/10/22(月) 19:49:57.08 ID:???
式インデックスを使って、
CREATE UNIQUE INDEX X ON example (name,date(created_at));
とすればできる。
185NAME IS NULL:2012/10/22(月) 20:11:47.91 ID:???
名前と日付の組み合わせだけで、本当に一意になる?
186NAME IS NULL:2012/10/22(月) 20:22:16.56 ID:???
そりゃdatetimeの精度でも同じ時刻になる可能性は0ではない。
187NAME IS NULL:2012/10/22(月) 20:22:50.35 ID:???
>>184
uniqueにするだけだから、date()する必要ないよ。
188NAME IS NULL:2012/10/22(月) 20:39:57.29 ID:???
「時刻」ではなく、同じ「日付」に同じ名前の人がいないことを保証したいんだと思うよ。
式インデックスでいいんじゃないかな。
189NAME IS NULL:2012/10/23(火) 07:05:40.81 ID:???
同じ日に同姓同名の人は登録できないって意味とは考えにくいな。
むしろ同姓同名の人が登録した時に、それぞれを識別しようとして日付を足しただけに見える。
(なんで連番使わないんだってことになるけど、多分知らないんだろう)。
190NAME IS NULL:2012/10/23(火) 07:33:52.11 ID:???
>>188
だね
191NAME IS NULL:2012/10/23(火) 07:36:34.96 ID:???
>>189
人名かどうかなんてかいてないし、実際はユニークな型番かもしれない
まぁあれこれ推測して楽しむのを止めはしないけど
192NAME IS NULL:2012/10/23(火) 10:18:05.21 ID:???
>>184
>CREATE UNIQUE INDEX X ON example (name,date(created_at));

おおっ、すばらしい!ありがとうございます。
どうせできないだろうと思ってたのに、できるんですね。きいてみるもんです。

>>188
>「時刻」ではなく、同じ「日付」に同じ名前の人がいないことを保証したいんだと思うよ。

はい、その通りです。同じ名前が1日に高々1件しか登録されないことを保証したかったので。
193NAME IS NULL:2012/10/23(火) 11:04:57.45 ID:???
psqlコマンドを実行する時に、なぜかperlがらみのエラーがstderrに出てました。
psqlコマンドが内部でperlを呼び出すことはありますか。
なおpsqlコマンドを使って copy (select ...) to stdout as csv を実行しています。
194NAME IS NULL:2012/10/23(火) 11:57:07.21 ID:???
PAGER何にしてる?
195NAME IS NULL:2012/10/23(火) 18:31:21.31 ID:???
create_atを日付だけにすれば良いじゃないか。
なんでdate型じゃなくてdatetime型使うのよ?
196NAME IS NULL:2012/10/23(火) 18:32:53.05 ID:???
そりゃ欲しいからだろ。
dateとtimeに分けておけばよかったかもしれないけどね。
197NAME IS NULL:2012/10/23(火) 18:41:11.89 ID:???
いやいや、date型が別にあるなんて知らないって奴も居るかもしれんよ。
ここでunique indexの作り方聞いてくるぐらいだしな。
198NAME IS NULL:2012/10/23(火) 19:31:26.72 ID:???
>>197
>>181
> dateカラムを作るのが簡単ではありますが
199NAME IS NULL:2012/10/23(火) 20:40:29.59 ID:???
>>198
dateカラムってのはdate型という意味?
200NAME IS NULL:2012/10/29(月) 13:16:15.84 ID:???
psqlで、read-onlyモードっつーものはないでしょうか。viのviewモードのようなやつ。
誤ってデータを改変してしまうのを、万が一でも防ぐために。
201NAME IS NULL:2012/10/29(月) 13:28:56.35 ID:???
>>200
psql で最初に SET default_transaction_read_only=on; するとか?
202NAME IS NULL:2012/10/29(月) 14:41:58.89 ID:???
selectだけ実行してる分には改変されることはないはずだが。
203NAME IS NULL:2012/10/29(月) 15:07:35.69 ID:???
んーまーストアドとか
204NAME IS NULL:2012/10/29(月) 15:57:59.66 ID:???
>>200
read-onlyなユーザを作る
205NAME IS NULL:2012/10/29(月) 15:58:49.54 ID:???
>>202
serialが上がっていくのが気に食わない人もいるかもしれない
206NAME IS NULL:2012/11/02(金) 16:57:02.96 ID:???
最近出た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)
207NAME IS NULL:2012/11/02(金) 18:40:21.67 ID:???
diskが遅いんでは?
208NAME IS NULL:2012/11/02(金) 19:32:05.95 ID:???
5400rpmってことは、90rps(秒)なんだから、commitする度に
律儀にdiskに書き込んでるとするならば、84.4tpsってのは妥当な線なんでは?
209NAME IS NULL:2012/11/04(日) 21:16:06.80 ID:???
TABLEサイズ+INDEXサイズがshared_buffersの設定値を超えている状態で、
あまりアクセスされないデータを検索するSQLでexplain analyzeすると
INDEX SCANになってても初回のみ30秒ぐらいかかることがあります。
2回目以降は1秒以内に帰ってきます。これを最初から早くすることは可能ですか?

あるいはINDEXだけならshared_buffersに収まるサイズなので、INDEXだけでも
常時キャッシュされるようにすれば、早くなるのかな?とも思ったのですが、
考え方はあってますか?また、そのようなことは可能でしょうか。

postgresql9.1です。
210NAME IS NULL:2012/11/04(日) 22:23:53.56 ID:???
>>209
あってると思うよ。
データを空読みすればいい。
211NAME IS NULL:2012/11/04(日) 23:06:30.53 ID:???
>>210
データを空読みってcount(*)を取れってことでしょうか?
それだとテーブルデータがキャッシュされて、他のINDEXが
キャッシュから押し出されたりはしないのでしょうか?
212NAME IS NULL:2012/11/04(日) 23:11:53.45 ID:???
>>211
INDEXのサイズは何100MB〜何TBぐらい?
数〜数十MB単位じゃないよね。
213NAME IS NULL:2012/11/04(日) 23:14:55.63 ID:???
>>212
全テーブルのINDEXを合わせると3GBぐらいです。
メモリは16GB積んでてshared_buffersは4GBです。
214NAME IS NULL:2012/11/04(日) 23:23:20.01 ID:???
buffer増やせば?
215NAME IS NULL:2012/11/04(日) 23:47:37.28 ID:???
>>214
全テーブル+INDEXがのるだけのshared_buffersが確保できるだけの
メモリを積むことができるのなら最初から質問なんかしていません。
INDEXのみをキャッシュする方法はないということでしょうか。
216NAME IS NULL:2012/11/05(月) 00:37:44.19 ID:???
たぶんない。9.2でやっと INDEX ONLY SCAN が追加された。
217NAME IS NULL:2012/11/05(月) 05:39:19.32 ID:VQaCCwqV
postgreSQLの統計情報ビューの使いどころがわからないです。
ご存知であれば教えてください。
218NAME IS NULL:2012/11/05(月) 08:17:44.47 ID:???
毎日眺めてれば半年もすればわかるようになる。
近道はないよ。
219206: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が普通なんでしょうか。
220206: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)
221NAME IS NULL:2012/11/05(月) 12:46:56.46 ID:???
222206:2012/11/05(月) 13:42:57.11 ID:???
>>221
えっと、それは
while (true) {
  fputs("abc", fp);
  fflush(stdout);
}
が5400rpmのHDDだと、どうあがいても90回程度しかループできないということですか?
223NAME IS NULL:2012/11/05(月) 14:17:48.60 ID:???
15000rpmのHDDに変えてみたらわかるじゃん。
224NAME IS NULL:2012/11/05(月) 18:57:06.60 ID:???
RAM disk で試しても、HDD ネックかどうか位は分かるんじゃね。
225NAME IS NULL:2012/11/05(月) 23:00:18.12 ID:???
>>222
HDDのキャッシュが無効化されていてかつ、fflushじゃなくてfsyncならそうなるかも
226NAME IS NULL:2012/11/05(月) 23:17:13.34 ID:???
227206:2012/11/06(火) 11:12:51.36 ID:???
みなさま、いろいろな情報ありがとうございました。

今まで、なんとなくなんですが、HDD以外のハードのスペックが上がれば、それなりに更新性能も
上がるんだと思ってたんですが、HDDの性能で頭打ちになるんですね。

5,400rpm程度のHDDだと、最高でも5,400tpmしか出ないということか・・・。
228NAME IS NULL:2012/11/06(火) 12:42:02.32 ID:???
SSDでやってみな
229NAME IS NULL:2012/11/07(水) 00:29:03.22 ID:???
DROP DATABASEでは現在接続中のDBを削除できないので
dropdbコマンドを使って削除するとの事なんですが、
ではdropdbコマンドはどうやってDBを削除してるんでしょうか?
内部の動きが知りたいです
230NAME IS NULL:2012/11/07(水) 00:53:57.84 ID:???
>>229
postgresかtemplate1
231229:2012/11/07(水) 01:44:58.07 ID:???
>>230
ではテンプレートデータベースも含めた全てのDBを削除することは出来ないってことですかね
232NAME IS NULL:2012/11/07(水) 11:59:51.35 ID:???
ディレクトリごと消せばいいのでは
233NAME IS NULL:2012/11/07(水) 16:40:41.77 ID:???
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文でいちいち分岐しなければならないのでしょうか?
234NAME IS NULL:2012/11/07(水) 16:55:58.95 ID:???
235NAME IS NULL:2012/11/07(水) 19:39:35.88 ID:???
>>227
いや、、、大抵はカーネルキャッシュ、デバイスのキャッシュがそこをひろうから。。。
236NAME IS NULL:2012/11/07(水) 21:32:02.99 ID:???
書き込みをキャッシュしてしまうとcommitの意味がなくなるだろ。。。
バッテリー内蔵のRAIDカード使ってるとかなら別だが。
237NAME IS NULL:2012/11/07(水) 21:36:56.45 ID:???
書き込みはOSが受け持つんじゃないのかな?
238NAME IS NULL:2012/11/07(水) 22:38:17.67 ID:???
>>236
何言ってんだハゲ
239NAME IS NULL:2012/11/07(水) 22:38:26.31 ID:???
240NAME IS NULL:2012/11/08(木) 20:39:45.85 ID:???
>>236
>書き込みをキャッシュしてしまうとcommitの意味がなくなるだろ。。。

commit ってディスクにデータが書かれることを意味しないぞ。
241NAME IS NULL:2012/11/08(木) 21:23:35.34 ID:???
そういう使い方もあるわな。
普通はディスクにLOGが書き込まれたということが重要なんだが、
同期レプリケーションなんかだとレプリカにデータ送っただけで良しとするのもありだな。
そもそもデータが壊れても気にしないよ、って使い方もあるだろしな。
どっちが普通なのかは議論になるかも知れないな。
242NAME IS NULL:2012/11/08(木) 23:00:28.23 ID:???
>>241
話がずれてる
243NAME IS NULL:2012/11/11(日) 11:49:52.66 ID:???
ジャーナルファイルシステムを信用しようぜ
244NAME IS NULL:2012/11/12(月) 22:57:25.03 ID:???
デッドロックについて質問。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だけでなぜデットロックが発生するのか?
・どう解決すればいいのか?あるいはどう深く調べればいいのか?

よろしくお願いします。
245NAME IS NULL:2012/11/12(月) 23:43:45.22 ID:???
よくわかんないけど、ヒントくれてるんだから、その通りにしたら?

> HINT: See server log for query details.
246NAME IS NULL:2012/11/13(火) 10:27:26.48 ID:???
>>245
サーバのログには、実行中のSQLが出ているだけでした。
つまり insert into table1 .... と update table2 set .... が表示されているだけで、
ほかに手がかりは載ってなかったので。
247NAME IS NULL:2012/11/13(火) 16:37:40.22 ID:???
外部キーと共有ロックとデッドロック
http://itpro.nikkeibp.co.jp/article/COLUMN/20050904/220557/?ST=oss&P=3
248NAME IS NULL:2012/11/13(火) 21:57:56.13 ID:???
>244
 shared lock がかからなかった場合、どうなるか考えてみよう。

 table1 へ insert しているデータは、当然 customers テーブルを外部参照している関係上、
customers テーブル上に「レコードがある」ことが必要。
 仮に customers テーブルにロックをしない場合、
table1 insert → customers delete → table1 commit
って順序で処理が起きたら、table1 に、「対応する customers レコードがない」データが作ら
れてしまう可能性があるだろ?

 従って table1 への insert トランザクションが完了するまでは、customers テーブルを更新
されてはまずい。故に排他ロックがかかる。
249NAME IS NULL:2012/11/14(水) 00:02:41.77 ID:???
長すぎて読む気がしない。。。
250NAME IS NULL:2012/11/14(水) 00:20:28.65 ID:???
>>248
> 仮に customers テーブルにロックをしない場合、
テーブルロックする必要はないですよね。行ロックだけでいいはず。

> customers テーブルを更新されてはまずい。
テーブルの更新はいいのでは?該当行の更新がまずいだけで。

> 故に排他ロックがかかる。
あれ、shared lockって排他ロックのことなんでしょうか。
読み取り用のロックではないのですか?
251NAME IS NULL:2012/11/14(水) 00:23:52.68 ID:???
>>247
ありがとうございます。そこを読む限り、排他ロックではなくshared lockだからデッドロックは起こらないはずなんですよね。
以下引用

> PostgreSQL 8.1では共有ロックによって問題を解決
>
>  このような外部キーの問題は、共有行ロックを導入することによって解決できる。
> 共有ロックでは、共有ロックを発行するトランザクションはお互いに相手をブロックしないため、
> 外部キーをめぐってトランザクションがお互いにブロックして並列実行性を損なうこともないし、
> 外部キーが原因のデッドロックをひきおこす心配もなくなる。

結局、原因はわからずじまいか。
252NAME IS NULL:2012/11/14(水) 04:11:24.02 ID:???
>>244
table1かtable2にcustomersを更新or削除するトリガーでも張ってるんじゃない?
253NAME IS NULL:2012/11/14(水) 20:20:42.94 ID:???
Postgresqlの入門書は今読むならどれがいいでしょうか。
254NAME IS NULL:2012/11/14(水) 21:24:23.67 ID:???
255NAME IS NULL:2012/11/16(金) 09:14:27.03 ID:???
新しいシーラカンス本でないねぇ。
256NAME IS NULL:2012/11/19(月) 00:54:21.97 ID:???
>>244
ログにShareLockと書かれているのはデッドロック時のお決まりの文言。
実際に何のロックがかかっているかはpg_locks見ないと分からないよ
257NAME IS NULL:2012/11/22(木) 20:47:19.28 ID:???
OS X上で使用していますが、MySQLのSequel Proの様にGUI上でCSVのエクスポートとインポートができるアプリってありますでしょうか。
258NAME IS NULL:2012/11/24(土) 06:22:39.07 ID:???
phppgadmin
259NAME IS NULL:2012/11/24(土) 23:22:07.15 ID:???
pgAdmin
260NAME IS NULL:2012/11/25(日) 01:54:56.41 ID:???
素のpgAdminではインポートはコマンドベースでしかできない
261NAME IS NULL:2012/11/25(日) 09:49:21.50 ID:???
Navicat
262NAME IS NULL:2012/11/27(火) 14:42:11.58 ID:???
話題は?
263NAME IS NULL:2012/11/27(火) 15:17:35.84 ID:???
9.2どうよ?
264NAME IS NULL:2012/11/30(金) 17:57:53.06 ID:???
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テキストのまま実行するにはどうしたらよろしいでしょうか・・・助言のほどよろしくお願いします
265NAME IS NULL:2012/11/30(金) 20:49:46.55 ID:???
コマンドプロンプトの文字コードをUTF8にすればいい。chcp 65001
そもそもコマンドプロンプトじゃなくてGUIツールを使いなさい。
266264:2012/11/30(金) 22:20:00.03 ID:???
レスありがとうございます

取り敢えずCMDの文字コードはchcpで変更してみましたが結果は同じでした
まあ、これは入出力・表示文字コードの問題なのでファイル入出力とは関係ないとは思ってましたが(合ってるかな??
GUIツール・・・ということで最初に思い立ったのはpgAdminIIIについてるSQLクエリ実行ツール?でやってみたら上手く行きました!!
今までTeraTermでLinuxのDBサーバにアクセスしてCUIで弄ってたので目から鱗です。
他にもGUIツールってあるんでしょうか。

が、、しかしあまり原因がはっきり解ってない上に
pgAdminIII が多機能過ぎてついて行けてない自分がいます。。orz...
267NAME IS NULL:2012/11/30(金) 23:35:32.21 ID:???
コマンドプロンプトの文字コードだけ変えてもフォントの変更もしないと
UTF8の日本語はまともに扱えなかったはず。
DBもファイルもプログラムもCUIでの操作も全部同じ文字コードで扱わないと駄目。

>他にもGUIツールってあるんでしょうか。
ちょっと上にも書いてるがフリーでメジャーなのはpgAdminIIIとphpPgAdmin、
商用でもよければNavicatが便利。ただしNavicat Premiumじゃなければ機能的に微妙
268NAME IS NULL:2012/12/01(土) 00:33:57.86 ID:???
>>266
psqlの\iはlinuxで言えばcat ファイル | psql -cと同じこと
クライアントの文字コードに引きずられる
269NAME IS NULL:2012/12/01(土) 06:48:18.80 ID:???
>>266
psqlでログインした後、\iの前に
set client_encoding to 'utf-8';
すればINSERTスクリプトは通るんでは。

その後SELECTしたら文字化けしそうだけど。
270NAME IS NULL:2012/12/01(土) 16:26:32.67 ID:???
話題は?
271NAME IS NULL:2012/12/02(日) 11:16:21.37 ID:???
すいません、今考え中
272NAME IS NULL:2012/12/02(日) 13:59:51.45 ID:???
テーブルの最後の50行だけ頂戴って時はどうしますか?
273NAME IS NULL:2012/12/02(日) 14:13:08.07 ID:???
order 条件逆にして、top 50
順序が重要なら、その結果を元の orderでソート
274NAME IS NULL:2012/12/02(日) 15:15:40.15 ID:???
>>273
あざっす^^

reverseのreverseってパフォーマンス的にどうなんすかね

@PostgreSQLに両方やらせる
APostgreSQLに最初のreverseを、クライアントプログラムで更にreverse

どっちが速いですかね?

※接続は1つだけの個人専用システム
275NAME IS NULL:2012/12/02(日) 15:29:32.31 ID:???
今時 50件程度ならパフォーマンス云々はあまり気にしなくていいんじゃね。
276NAME IS NULL:2012/12/02(日) 15:59:22.92 ID:???
あざっす^^
@でいきます
ひょっとしたらよく判らん最適化されるかもしれないし
277NAME IS NULL:2012/12/07(金) 00:59:42.04 ID:???
話題は?
278NAME 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個ぐらいです。
279NAME IS NULL:2012/12/14(金) 07:26:39.54 ID:???
SQLの入門書を最後まで勉強してみると良いよ。
特別PostgreSQL用でなくても大丈夫だよ。
280NAME IS NULL:2012/12/14(金) 10:57:46.23 ID:???
ちょい古いが、9.2.2リリース(2012-12-06)

http://www.postgresql.org/docs/9.2/static/release-9-2-2.html
281NAME IS NULL:2012/12/14(金) 21:10:37.40 ID:???
>>278
SQL質疑応答スレ 13問目
http://toro.2ch.net/test/read.cgi/db/1343899481/4

これと比較してみたらどうでしょ
282NAME IS NULL:2012/12/14(金) 21:43:06.34 ID:???
知ってりゃ凄く簡単なことでも、知らない奴は凄く複雑にするんだな。。。
283278:2012/12/15(土) 10:28:22.52 ID:???
>>281
同じ条件で試してみました。
Total runtime: 3.204 ms
おぉ、僅差かもしれないけど、これが一番速いですね。ありがとう。

>>279
考えてみたらSQLの本なんて1度も読んだことなかった。
自分には一読が向いているような気がしてきたよ。どうもです。

>>282
まさに、それだね。
284NAME IS NULL:2012/12/19(水) 22:48:14.21 ID:/zfe6YaM
質問です。教えてください!!!

PostgreSQLの同期レプリケーションで、マスタサーバがダウンした時に、
実行されているトランザクションがスレーブでコミットされたか、
アボートされたかを確認する方法ってありますか?

ユーザにはコミット応答がかえって来ませんでしたが、スレーブを昇格させて
新マスタにしたところ、コミットされデータが更新されている事象が発生しています。。。

よろしくお願います。
285NAME IS NULL:2012/12/19(水) 23:06:59.58 ID:???
同期取れてるんだから、コミット済みに決まってるだろ。
286NAME IS NULL:2012/12/20(木) 01:19:35.45 ID:???
bit varying に対する set_bit とか get_bit って無いんですか?
PostgreSQL 8.4 です。
287NAME IS NULL:2012/12/20(木) 11:19:16.27 ID:???
overlayとsubstringでやるとかかなあ、使ったこと無いが
288NAME IS NULL:2012/12/20(木) 14:18:18.70 ID:???
そんなところですかねぇ・・・。
bytea だと簡単なのに、そうすると & とか | が使えない・・・。
289NAME IS NULL:2012/12/22(土) 04:03:32.30 ID:???
>>280
英語の質問です

〉Fix the syslogger process to not fail when log_rotation_age exceeds 2^31 milliseconds (about 25 days)

not to じゃないの?
290NAME IS NULL:2012/12/23(日) 13:10:27.64 ID:???
timestamp without time zone の【最遠の未来】を返す定数ってありましたっけ?
291NAME IS NULL:2012/12/23(日) 14:19:18.72 ID:???
その型で使えるかどうかは知らんけど 'infinity' かな。

http://www.sraoss.co.jp/PostgreSQL/Manual/document/9.2/html/datatype-datetime.html#AEN5786
292NAME IS NULL:2012/12/23(日) 22:13:17.05 ID:???
>>291
まさにそれでした。使えることを確認しました。ありがとうございます。
未定義をnull にしたくなかったので助かります。
293NAME IS NULL:2012/12/24(月) 06:14:37.49 ID:???
物のついでに INT4 の最大値をあらわすものをググっているがこっちは発見できないな。
使い道は無さそうだから別に無くてもかまわないが。
294NAME IS NULL:2012/12/24(月) 06:17:01.96 ID:???
>>292
だが、その方法を使うと、実際の日付がその値を超えたところで矛盾するから
気をつけたほうがいいな。だいたい2943世紀ごろだが。
295NAME IS NULL:2012/12/24(月) 10:45:27.97 ID:???
のちの2943世紀問題である
296NAME IS NULL:2012/12/24(月) 12:03:55.54 ID:???
どこに質問したらよいかわからなかったのでここに失礼します。
PostgreSQLのテーブル単位のレプリケートが必要になっていろいろと調べているところですが、
slony-Iは、多対一の非同期レプリケート(のようなこと)は設定で出来るか知っている方おります?
具体的には複数のサーバーにレプリケートしたいテーブルがあって、
それらはサーバー同士の間でもユニークなレコードを持っていて、
これらを1つのサーバーに UNION みたいに集めたいのです。
難しいようでしたら自作しようと考えているのですが
slonyで可能であれば楽できるなと思っているところです。
297NAME IS NULL:2012/12/27(木) 15:16:13.25 ID:???
>>289
"fix * to not"でググると、良くある言い回しみたいだよ。
298NAME IS NULL:2012/12/27(木) 15:37:03.11 ID:???
てか、not fail when 〜に修正したのでそもそもおかしくない
299NAME IS NULL:2012/12/27(木) 15:48:24.91 ID:???
sysloggerプロセスが25日有効だったlogをrotationしようとするときに、今までは死んでたのを修正したってことじゃないの?
300NAME IS NULL:2012/12/27(木) 15:52:14.45 ID:???
じゃなくて、rotationしそこなうのを修正したのか
301NAME IS NULL:2012/12/27(木) 18:01:33.83 ID:???
Ubuntu12でPostgreSQL使ってるけど、apt-get installするより自前でコンパイルしたほうが速いバイナリができるとか、そういうびっくりなことってないかな。
だれか検証したひとがいたら教えて。
302NAME IS NULL:2012/12/28(金) 00:00:24.03 ID:???
自前でコンパイルする方が速い可能性はある。
コンパイル時に、PCに載ってるCPUに応じたコードを生成させたりできるから。
303NAME IS NULL:2012/12/28(金) 17:04:37.34 ID:???
>>302
速くなる可能性があるのは分かるんですが、実際速くなった人はいるかなと思って。
CentOSだとrpmパッケージがi386でコンパイルしてるから、いまどきのCPUならコンパイルし直したほうが速くなるけど
Ubuntuはdebパッケージがi686でコンパイルされてるようだから、変わらないかもしれない。
でもPostgreSQLのコンパイルはめんどくさいので、だれか試した人がいたら教えてください。
304NAME IS NULL:2012/12/28(金) 19:36:17.64 ID:???
>>303
めんどくさいって、ふつーに configure;make;make install だけだろ
305NAME IS NULL:2012/12/29(土) 00:12:47.99 ID:???
まぁGCC入れたりライブラリ入れたりしなくちゃならんから、面倒くさいというのも理解できる。
306NAME IS NULL:2012/12/30(日) 01:44:22.43 ID:???
9.3出たら起こしてくれ
307NAME IS NULL:2012/12/31(月) 18:53:59.09 ID:vZpLnkOO
  ●●●ケネディ大統領は何故、死なねばならなかったのか?●●●
  http://jbbs.livedoor.jp/bbs/read.cgi/study/3729/1226114724/53

  ¥¥¥¥¥¥¥『万有サロン』書き込み大賞・総額100万円¥¥¥¥¥¥¥¥¥¥¥¥

  この掲示板に優秀な書き込みをして、総額100万円の賞金をゲットしよう!(*^^)v
    万有サロン
      http://jbbs.livedoor.jp/study/3729/
    書き込み大賞の詳細
      http://jbbs.livedoor.jp/bbs/read.cgi/study/3729/1069922074/78-
    書き込み大賞の詳細(資料倉庫内)
      http://www2.tba.t-com.ne.jp/a-z/omake/banyu/taisho.htm

  また、あらゆる疑問に関する質問を、携帯電話やメールでも受け付けています。
    電話番号 080-4437-4187
    メール  [email protected]

  ¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥
308NAME IS NULL:2013/01/06(日) 02:51:40.46 ID:???
通信したら膨大なデータはどういう仕組みで降りてくるの?

クライアントが『今はこれだけしか受け取りきれないよ』って時はどうするの?

データのポインタみたいなのをコネクション毎に保持しておくて
『ここまで送った』しおり代わりとするの?
309NAME IS NULL:2013/01/06(日) 03:08:34.28 ID:???
どの層の話?TCPレベル?カーソルレベル?プレゼンテーション層でのPostgresのデータ表現がどうなってるかは知らないけど
310NAME IS NULL:2013/01/06(日) 09:31:42.51 ID:???
データベースに限った話じゃないならスレ違い
TCPの確認応答とか、ウィンドウ制御の話。
311NAME IS NULL:2013/01/06(日) 14:05:43.74 ID:???
ああじゃあデータベース側は、気にせずいつも通り
最寄りのノードにデータ送る作業するだけで
後はOSI参照モデルを実装した外部システムが巧いことやってくれる算段なんですね
312NAME IS NULL:2013/01/06(日) 14:15:26.01 ID:???
状況がわからんけど
ミドルで全部受け取り済みな気がするなあ
313NAME IS NULL:2013/01/06(日) 16:17:39.96 ID:PFtSFSQD
犯罪者個人に対して告訴状を違法派遣・偽装請負・偽装出向・多重派遣の被害者が作成(刑事告訴は無料) or 司法書士が代筆(料金は5万円ぐらい)※コピペ歓迎

告訴状を【検察の直告班】に郵便局の内容証明付で送付(疎明資料・証拠にはICレコーダー、スマホによる録音が適しています)

審査 → 不受理 → 告訴状再提出または刑法 第193条で訴えを起こす

受理 → 告訴事実を認め示談交渉(↓) →示談成立 → 法廷相場50〜100万円の示談金 ※示談拒否が良い
↓                ↓
事案化← 前科あり ←示談不成立(↓)→ 示談外交渉→ 犯罪者の年収半額×最大懲役年数の和解金支払い※推奨
↓                ↓
↓               起訴 →公判 → 罰金刑=前科(起訴事実を認めてるため)→追討ち民事訴訟
↓                    
審査 → 起訴(強制捜査・留置場)→ 公判 → 懲役刑などの厳罰(反省が認められないため)→追討ち民事訴訟

不起訴、起訴猶予

検察審査会法第30条(検察審査会へ申し立て)→ 起訴 → 起訴後は同上
刑法 第193条(公務員職権濫用)で検察事務官を刑事告訴 → 同上

◎告訴→告訴受理→示談交渉→厳罰を求め示談不成立→示談外交渉→和解金支払い・和解契約(公正証書・即決和解で秘密保持契約)
◎偽装請負・出向・違法派遣事件では派遣・出向先両方の代表者、役員、現場責任者に告訴できます。
前科がついた犯罪者が法人の代表であれば公的な入札からの排除、取引先や顧客との契約解除など社会的制裁・批判に晒されることから辞職または解任が妥当、役員・社員であれば懲戒を想定。
◎事業者内部の加害関係者による刑事告発(刑事訴訟法239条1項)も可能です。
加害者本人、管理間接部門の社員が刑事告発に踏み切る場合も和解金による解決が妥当です。

注意:告訴が受理されない理由
●3年間(※)の時効が過ぎたもの ※違法派遣
●同一事実について過去に告訴取消しがあったもの
●関連する民事訴訟を有利に導く目的の場合
●証拠が希薄なもの ※被害者が契約時に違法派遣・偽装請負・多重派遣と知っていても刑事告訴は有効です。
314NAME IS NULL:2013/01/07(月) 07:50:49.15 ID:???
>>308
外しているかもしれないが、
ORDER BYして LIMIT で クライアントがほしい分だけSELECT するという話?
テーブルによっては漏らさずとることは出来ないけど。
315NAME IS NULL:2013/01/07(月) 15:47:46.90 ID:???
>>314
膨大なデータを、クライアントが遅延評価で受け取りつつ
クライアント側で専門の重い処理をしていくとき
316NAME IS NULL:2013/01/07(月) 16:44:48.89 ID:???
カーソルでいいじゃん
317NAME IS NULL:2013/01/07(月) 17:52:04.82 ID:???
クライアントの処理に合わせてサーバからデータを数行ずつ取得して行きたいとかならそうだな
318NAME IS NULL:2013/01/08(火) 11:52:03.98 ID:5ntVS72y
告訴の趣旨
 被告訴人は、以下に該当すると考えるので、被告訴人の厳重な処罰を求めるため告訴します。
 職務経歴書を提示した事前面接を実施 または 偽装請負 または 偽装出向
  労働者派遣法第26条(契約の内容等)、職業安定法第44条(労働者供給)に違反
 多重派遣・多重出向
  労働基準法第6条(中間搾取の禁止)に違反
疎明資料
 事前面接日時、場所、出席者、資料のコピー、音声記録
 就業場所・就業期間・就業時間
 指揮命令
  指示を誰が行っているかの記録、音声記録
 仕事で使う道具や、資材の負担(所有)のあり方
  業務で使用しているパソコン・備品などの所有者
 契約書
  請負、雇用契約書、出向指示など書面のコピー

刑事告訴ガイダンス 
★痴漢も民事でなく刑事事案ですが、裁判所が和解金を被害者に支払わせて解決するのが絶対的過半数です。和解で解決しない事案、つまり公訴までいって判例となる事例を探すほうが難しいことでしょう。
★録音は一方の当事者が取る限り合法です。※加害者に録音の同意を求める必要はありません。
★告訴状を検察に提出しても受理されなければ加害者側には知られることはありません。不受理の場合は何事も起きてないように粛々と振る舞ってください。
★告訴を取り下げるとき検察に提出した資料は全て返却されます。また検察があなたが提出した証拠をあなたの許可なく裁判の証拠として使用はできません。告訴を取り下げたのちの録音資料には当事者の立場が失われるため証拠能力はありません。
★和解時に告訴した事実は秘匿事項となります。犯罪者が秘密保持契約に違反した場合の損害賠償金は「即決和解」か「公正証書」で最低5000万円〜にしましょう。支払いを拒否すれば強制執行手続きを(裁判不要)してください。
★派遣会社や事業会社が同業者に貴方の情報をリークしたなら同業者(又は競合他社)に弱みを握られることになります。
余程信用のおける相手でなければ、リークはできないでしょう。信頼のおける方にしても、その方の口が軽ければ、いずれ事実は分かります。
★リークの情報を得た事業者のなかには、リークの事実を貴方に教えてくれる方がいるかもしれません。その際は損害賠償金で得たお金の3割程度を謝礼金として渡してください。
319NAME IS NULL:2013/01/09(水) 08:16:56.38 ID:4HXcyysT
※コピペ歓迎です。
違法派遣(偽装請負・多重派遣・偽装出向・事前面接等)についての刑事罰
【告訴権者=業務委託、準委任、共同受注、業務請負契約および特定派遣(契約・正規)、一般派遣、正規社員】

@職業安定法第44条の労働者供給事業の禁止規定に違反(1年以下の懲役または20万円以下の罰金)
 ■偽装請負・多重派遣・偽装出向・多重出向
 ■事前面接(顔合わせ・面談・職場見学等)と履歴書・職務経歴書・スキルシート等提出による労働者の特定(※)
(音声録音で立証可能)
A労働基準法第6条(中間搾取の禁止) (1年以下の懲役又は50万円以下の罰金)
 ■多重派遣・多重出向

※違法派遣(派遣労働者の特定)→派遣法で認められた派遣労働者ではない→労働者供給事業→職業安定法44条違反というの
が前提となる法解釈となります。派遣法における罰則が軽微なのは法律の不備や労働者軽視などが原因ではありません。
違法派遣は全て職業安定法44条で裁くことが可能なため、刑罰の重複を避けるために派遣法には軽微な罰則(主に裁量行政による)しかないのです。

使用者に有利な民事訴訟や労働関係諸局への通報等の対極にあるのが書面(告訴状)による刑事告訴(※告訴先は検察の直告班)です。
労働関係諸局への通報・斡旋による軽微な「適正化」や監督・指導に対して、法律に定められた刑事罰を問うことになり、
違法派遣業者にとって有罪は考えられる限り最大の処罰となります。同時に刑事罰を受けた
担当者が取引先に与える悪印象を考慮すれば、通常会社側は告訴が受理された時点で告訴取り下げに
動くのが妥当でしょう。懲役、前科がつく刑罰が下される可能性から、告訴取り下げの和解金は高額となることが多いのです。

告訴の流れとしては、

刑事告訴⇒告訴受理⇒告訴取下げ要請⇒取下げ和解金入金⇒告訴取下げ

となります。告訴の懲役刑適応は犯罪者個人に対してのみですので、告訴する対象は

派遣先・派遣元 社長
派遣先・派遣元 責任者・管理役員・取締役
派遣先・派遣元 人事管理担当者・人事管理役員・取締役

が妥当です。刑事告訴取り下げの和解金額は犯罪者個人と交渉するとよいでしょう。(告訴状は人数分提出する必要あり)
320NAME IS NULL:2013/01/12(土) 13:36:06.00 ID:???
PostgreSQLで、あるSQLが「条件で絞ってからjoinしている」のか「joinしてから条件で絞っている」のかを調べる方法ってありますか。
あるいはexplainで分かるとして、explainの出力のどれを見ればいいですか。

10個くらいjoinしているけども、条件で絞ってからjoinすれば (レコード数が
少ないので) 大した時間がかからないだろうと思われるSQLがあります。
しかし計測してみるとそれなりの実行時間がかかっていました。joinを外したところ、大幅に高速化できました。
なので、もしかしたら内部では「joinしてから条件で絞っている」のではないかと
疑っています。それを調べたいです。
321NAME IS NULL:2013/01/12(土) 13:46:02.17 ID:???
sql書いてるならexplain見ればだいたい把握できるだろ
理解力・想像力が乏しいのであればpgadminのグラフィカルな奴でも使えば。
322NAME IS NULL:2013/01/12(土) 18:10:15.12 ID:???
>>320
joinのために使われたアルゴリズムによる。
問い合わせ計画の読み方を一通り理解すればわかると思う。
http://www.postgresql.jp/document/9.2/html/using-explain.html
323NAME IS NULL:2013/01/13(日) 08:47:41.37 ID:???
>>322
ありがとうございます。
explainで調べたところ、limitより先にjoinされてました。
これだと相当な量のレコードがjoinされてしまい、遅くなって当然でした。

そこで今度は、joinより先にlimitで絞り込む方法について教えてください。

手元で試したところ、副問い合わせを使って先にlimitで絞り込み、
その結果を使って外側でjoinすると、確かに速度は改善されました。
しかし副問い合わせを使うよう変更したSQLは、カラム数が多いこともあって
内側と外側のselect文で重複したカラム名がたくさんでてしまい、
メンテナンス性の悪いSQLになってしまいました。
できればもとの素直なSQLのまま、joinのタイミングだけlimitよりあとにするよう
変更したいです。
そのようなことはPostgreSQL (9.1) でできますか?
324NAME IS NULL:2013/01/13(日) 08:49:24.84 ID:???
一応できると答えておく。
やり方は自分で考えろ。
325NAME IS NULL:2013/01/13(日) 09:27:23.04 ID:???
>>323
ワイルドカード"*"を使えばいいんじゃないかな。
326NAME IS NULL:2013/01/13(日) 11:56:46.89 ID:???
>>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
327NAME IS NULL:2013/01/13(日) 12:52:23.28 ID:???
>>326
それで、limitをどこに書くって言ってるわけ?
328NAME IS NULL:2013/01/13(日) 13:15:47.98 ID:???
そもそも limit で絞り込んで join するのと、join して limit するんじゃ結果が違うことがあるから、
「joinのタイミングだけlimitよりあとにする」なんてできる DBMS はないと思うが…
329NAME IS NULL:2013/01/13(日) 14:09:07.33 ID:???
>>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
330NAME IS NULL:2013/01/13(日) 14:12:48.96 ID:???
>>328
>そもそも limit で絞り込んで join するのと、join して limit するんじゃ結果が違うことがある

それはその通りなのですが、結果が同じ場合もあるわけで、その場合は人間が判断してjoinのタイミングを指定できるようにしてくれたほうがうれしいです。
331NAME IS NULL:2013/01/13(日) 14:15:12.31 ID:???
limit以外に絞り込む手段は無いの?
最終結果以外でlimitが入るのは何かがおかしい。
332NAME IS NULL:2013/01/13(日) 14:39:33.51 ID:???
>>331
>limit以外に絞り込む手段は無いの?
where句でも絞ってますよ。
ただwhereで絞っても数百〜数千件くらいまでしか絞れないです。
order+limitでは10件とか20件に絞りこみます。

>最終結果以外でlimitが入るのは何かがおかしい。
そうなんですか?
まあ別に「最終結果以外でlimitを使いたい」というわけではなく、「可能な場合はlimitを先に実行してからjoinを行う」ことをPostgreSQLが自動的にやってくれるくらい賢ければそれでいいです。
今はやってくれないので、仕方なく人間が指定するしかなくて、その方法を質問しています。
333NAME IS NULL:2013/01/13(日) 14:52:44.54 ID:???
>>330
>>329 のクエリが両方常に同じ結果になるというのなら、mainとaaa〜eeeまではすべてn対1対応になっているのだろうから、
left joinの外部結合に書きなおせばいい。
334NAME IS NULL:2013/01/13(日) 15:02:18.50 ID:???
>>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
335NAME IS NULL:2013/01/13(日) 15:27:51.87 ID:???
>>329を見る限り駆動表がmainでlimit 10が普通に効きそうなもんだが。
explainの先頭の表がmainでなかったり、nested loop joinじゃなくて
hash joinが出てきたりしたら、統計がとられていないかjoinするテーブルの
idにindexが張られていないことが思いつくが。
あと、joinするテーブル数が12以上だったらgeqoで最適化がはしょられているとか。
336NAME IS NULL:2013/01/13(日) 18:15:06.71 ID:???
>>335
329では「order by main.value」と書いてますが、実際にはここがちょっと複雑な計算式になってます。
そのせいでプランナがうまく効いてくれないのでしょうか。

また副問い合わせにする前のSQLだと、explainの先頭は Limit になってます。
hash joinは出てこずNested LoopとIndex Scanがばかりです。
joinするテーブル数は12まではいかないですし、どれもidはprimary key (sequence) なのでindexは作成されてます。
337NAME IS NULL:2013/01/14(月) 10:23:48.76 ID:???
その複雑な式でインデックス作るとか?
338NAME IS NULL:2013/01/17(木) 19:16:36.78 ID:3WZzA8BL
win8pro 64bit
postgres 9.2
の環境でログのローテーションが機能しないんですが
同様の症状の方いませんか?
ファイルサイズ指定でローテーションしようとしてます
設定は何度も確認しました

win7 postgres8.4では動いてて
同じ設定なのですが
339NAME IS NULL:2013/01/17(木) 19:19:55.28 ID:???
>>338
基本的な問題の切り分けでもやってみたら?
OSかPostgreSQLのバージョンをどちらか合せてやってみてどうなるか
340NAME IS NULL:2013/01/17(木) 19:49:16.56 ID:3WZzA8BL
win8 64bit
postgres9.1ではローテーションが機能しました。
9.2のバグ?

9.1に戻すか、次を待つか考えます
とりあえず報告まで
341NAME 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万円〜にしましょう。
342673: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はコメントアウトしています。

ここ以外に変更しなければならない場所はあるのでしょうか?
宜しくお願いします。
343342:2013/01/18(金) 16:00:58.58 ID:???
あ、すいません。pg_hdaではなく、pg_hba.confでした。
344NAME IS NULL:2013/01/18(金) 17:43:44.93 ID:???
postgresql.confの設定をミスってるか、外部からアクセスできると勘違いしてるかのどっちかじゃないの?
345673:2013/01/18(金) 17:58:18.27 ID:???
>> 344
postgresql.confは未設定で、
外部からnmapで見たら開いていて、更にTELNETでもつながる状態です。
346NAME IS NULL:2013/01/18(金) 18:04:31.85 ID:???
>>345
何言ってるのかわかんない。

grep listen_address /path/to/postgresql.con

netstat -a | grep postgres
の結果を貼って。
347NAME IS NULL:2013/01/18(金) 18:08:07.46 ID:???
まさか、postgresql.confを変更してから、デーモンを再起動してないとかいうことじゃないだろうな
348673: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

宜しくお願いします。
349342:2013/01/18(金) 18:13:36.36 ID:???
>>347
一応再起動はしています。
350NAME IS NULL:2013/01/18(金) 18:21:49.50 ID:???
>>348
確かに、postgresql.confでコメントアウトしていて、*でlistenしてるな。
うーん、わからんわ。ごめん。

PostgreSQLを複数インストールしていて、編集したpostgresql.confが今起動しているサーバのものじゃ
ないのかなぁ。
351NAME IS NULL:2013/01/18(金) 18:25:36.72 ID:???
>>342
> すいません。pg_hdaを以下のように設定しているのですが、
> 外部に対してもリッスンしています。
で、どうしたの? って話なんだけど。何を困ってるのか分からん。
クライアントから接続できないとかなら、各種ログ出せば?
352NAME IS NULL:2013/01/18(金) 18:28:00.00 ID:???
>>351
localhostからのconnectだけを受け付けたいのだが、それができないというのが困ってることだと。
もちろん、Firewallで制限したり、pg_hba.confで制限したりはできるけど、localhostだけでlistenできた方がいいでしょ。
353342:2013/01/18(金) 18:28:08.04 ID:???
>>350
> PostgreSQLを複数インストールしていて、編集したpostgresql.confが今起動しているサーバのものじゃないのかなぁ。
念の為確認してみます。

>> 351
ローカルからのみの接続にしたいのです。
354NAME IS NULL:2013/01/18(金) 18:29:34.56 ID:???
例えば、VPSでWebアプリが使用する為にPostgreSQLを起動したいんだけど、デフォルトで
全IPアドレスからのconnectを受け付けることしかできないんじゃ困るでしょ。
355342:2013/01/18(金) 18:30:25.15 ID:???
>>350
今findしてみたらpostgresql.confは1つしか存在しませんでした。
356NAME IS NULL:2013/01/18(金) 18:34:26.63 ID:???
>>355
pg_hda.confに書いてあるのは >>342 だけで後は全部コメント行なの?
postgresのサービスを再起動して設定を有効にした?
外部からpostgresにアクセスした状態で
netstat -a | grep postgres
とすると結果はどうなる?
357NAME IS NULL:2013/01/18(金) 18:43:06.32 ID:???
348のnetstatの結果を見ると、
ひょっとしてWebアプリとかで内部経由でpostgresにアクセスしようとしてる?
postgresのpg_hda.confの設定は認証の許可を設定できるけど、ポートを閉じたりできないし、telnetのアクセスにも関係ないよ。
358NAME IS NULL:2013/01/18(金) 18:44:27.48 ID:???
psqlで接続してSHOW listen_addresses;してみる
起動オプションでパラメータを上書きしてるんじゃね?
359342:2013/01/18(金) 18:53:53.15 ID:???
色々とありがとうございます。
それぞれ確認してみますので、少し待って下さい。
360NAME IS NULL:2013/01/18(金) 20:52:21.73 ID:???
どのレイヤーで弾かれてるのかまず明らかにしろよ
361NAME IS NULL:2013/01/18(金) 21:09:41.96 ID:???
どのレイヤーで弾かれてるのかまず明らかにしろよ
362NAME IS NULL:2013/01/18(金) 21:10:47.37 ID:???
大事なことなので連投してしまいました
すみません
363NAME IS NULL:2013/01/18(金) 22:55:38.17 ID:???
アホが一人いるだけで普段の数倍盛り上がるな。
364NAME IS NULL:2013/01/19(土) 03:26:05.97 ID:???
>>351のことかなぁ
365NAME IS NULL:2013/01/19(土) 13:26:50.72 ID:???
レコードの有無を調べるSQLは、
  SELECT 1 FROM <table_name> WHERE <条件>
で良いのでしょうか?
366NAME IS NULL:2013/01/19(土) 15:56:51.66 ID:???
>>365
SELECT 1
じゃ常に1が返るだろう。
SELECT COUNT(1) > 0 FROM ・・・
とか?
367NAME IS NULL:2013/01/19(土) 16:00:24.38 ID:???
って0件で判別するのなら 1 だけでいいか
368365:2013/01/19(土) 16:20:51.92 ID:???
count使うと遅いですよね。たぶん。

365の方法が最速な気がしないので質問する次第です。
言葉が足りず、すみません。
369NAME IS NULL:2013/01/19(土) 16:54:10.47 ID:???
limitでも付けなきゃcountとたいして変わらんだろ
370NAME IS NULL:2013/01/19(土) 17:05:30.79 ID:???
existsつかってみたら
371365:2013/01/19(土) 19:19:32.77 ID:???
>>369
その通りですね!
372NAME IS NULL:2013/01/20(日) 09:51:14.88 ID:???
INDEXありゃ一発だしな
exists はlimitあわせればなんとか
373NAME IS NULL:2013/01/21(月) 22:03:40.94 ID:???
>>348
postgresql.conf の listen_address をコメントアウトしてるみたいだけど
逆にコメント外して listen_addresses = 'localhost' にしたらどうなるの?
それでも netstat が変化しなかったら、読まれてないか上書きされてるかのどちらか
localhost 以外にも自分の普通のIPつけるとかしてみたらいいんじゃないかな
あと netstat には -n つけるのがオススメ
374NAME IS NULL:2013/01/22(火) 16:58:15.13 ID:???
で、原因はなんだったの?
375NAME IS NULL:2013/01/22(火) 18:40:50.69 ID:???
NAPTで思ってたのと違うホストにつながってた可能性もあるな
>>356はその辺も解決できる提案だとおもうけど、結果はられてないし結論は不明だけど。
376NAME IS NULL:2013/01/27(日) 00:41:09.08 ID:wayacMrf
VACUUMが回収できる行だと判断する条件について質問があります。

実行中のトランザクションの最も古いxidの値が、
行のxmaxより大きい場合にVACUUMしてよい行と判断していると考えてよいですか?
377NAME IS NULL:2013/01/27(日) 00:44:44.45 ID:wayacMrf
ストリーミングレプリケーションの、スレーブで実行する参照処理には、トランザクションIDが発行されないようですが、
行の可視性はどのように保証しているのでしょうか?
スナップショットを取得して判断している?マニュアルを読んでも、スナップショットについて理解できなかったので、可能であればスナップショットについて教えてください。
378NAME IS NULL:2013/01/27(日) 16:54:37.24 ID:???
ソース読めばエエやん。
379NAME IS NULL:2013/01/27(日) 18:44:34.73 ID:???
スレーブにはトランザクションって概念が無いじゃない。
380NAME IS NULL:2013/01/30(水) 15:05:04.04 ID:???
PostgreSQLのレプリケーションは非同期だから
確実に最新の値を読む必要があるならばマスターを読みにゆくしかないのでは?
381NAME IS NULL:2013/01/31(木) 02:44:30.11 ID:???
datetimeの表示で、秒未満を切り捨てて表示するにはどうしたらいいでしょうか。

たとえば
select created_at from exampletable where id = 1;
を実行したら
2013-01-01 12:34:56.389940
と表示されます。
これを
2013-01-01 12:34:56
と表示させたいです。
382NAME IS NULL:2013/01/31(木) 08:34:43.72 ID:???
単にピリオド含めて右側を捨てるような文字列操作でいけるんちゃう?
少数以下一位で四捨五入とかしたいならもうちょっとややこしいだろうけど。
383NAME IS NULL:2013/01/31(木) 09:56:34.74 ID:???
そんな定番な質問は調べればすぐに出てくるでしょうに・・・

to_char(created_at, 'YYYY-MM-DD HH24:MI:SS') でいいんでない?
384NAME IS NULL:2013/01/31(木) 10:18:02.79 ID:???
TIMESTAMP(0)でキャストするとかね。
元からテーブル作成時にそうしてしまう手もあるけど。

SELECT NOW()::TIMESTAMP(0);
とか
CREATE table (t TIMESTAMP(0),・・・・
とかね
385NAME IS NULL:2013/01/31(木) 10:20:10.63 ID:???
おっと、
CREATE TABLE table名・・ね
386NAME IS NULL:2013/01/31(木) 15:03:36.36 ID:???
>>382-383
説明がたりませんでした。
いちいちキャストとか変換とかせずに、一括して秒未満を切り捨てて表示するような方法はないでしょうか。

>>384
テーブルスキーマでそのような指定ができるんですね。なるほど。
うーん、スキーマを変更する権限が自分にあればよかったんですけど。
387NAME IS NULL:2013/01/31(木) 15:16:36.55 ID:???
オプション替えてPostgreSQLをビルドしなおすとか?
388NAME IS NULL:2013/01/31(木) 15:19:50.44 ID:???
というか、君は何ができるの?
あれもできない、これもできないって後から言うくらいなら
どこまでできるのか先に提示してよ。
389NAME IS NULL:2013/01/31(木) 15:26:53.99 ID:???
VIEWが作れるならVIEWはさめばいいし、UPDATEできるなら
一発で今のデータの小数点以下を消してしまえばいいし
390NAME IS NULL:2013/02/14(木) 17:09:45.13 ID:???
select count(*) と select(id) では前者のほうが速いようなんですが、これはよく知られたことなんでしょうか。
PostgreSQL 9.1で実験したら:

select count(id) from users; -- 45ms
select count(*) from users; -- 34ms

自分の間違いじゃないかと思うんですが、もし違いがあるなら教えてください。
391NAME IS NULL:2013/02/14(木) 17:41:15.84 ID:???
昔ならともかく、今は同じじゃないかなぁ。
ちなみに順番逆にしても*の方が速い?
392NAME IS NULL:2013/02/14(木) 17:45:55.29 ID:???
>>390
同じだと思うよ。

参考URL:
http://wiki.postgresql.org/wiki/Slow_Counting/ja

ちなみに、上のページにも書かれているけど、9.2からはインデックスオンリースキャンが実装されているので
事情が違う。
393NAME IS NULL:2013/02/14(木) 17:48:00.11 ID:???
9.2以降のCOUNT(*)におけるインデックスオンリースキャンに関する情報:
http://lets.postgresql.jp/documents/technical/9.2/1
394NAME IS NULL:2013/02/14(木) 18:38:15.00 ID:???
>>391
何度か実行してみた結果です。順番変えても変わらず。analyzeしてもそう。

>>392
> 同じだと思うよ。
ですよねー。

> 9.2からはインデックスオンリースキャンが実装されているので事情が違う。
9.2からは count(id) と count(*) のどっちが速くなるんですか?
本来ならインデックスオンリースキャンでも変わらないようにみえます。実験してないけど。
395NAME IS NULL:2013/02/15(金) 10:29:28.66 ID:???
>>394
> 9.2からは count(id) と count(*) のどっちが速くなるんですか?

9.2で何の事情が違うというのは、9.1までのCOUNT(*/id)との動作が違うということで、どちらかが
どうということではないよ。

> 本来ならインデックスオンリースキャンでも変わらないようにみえます。実験してないけど。

そう、インデックスを使えるなら、COUNT(*)もCOUNT(id)も9.1より速くなる。
396NAME IS NULL:2013/02/15(金) 17:03:26.06 ID:???
>>395
> COUNT(*)もCOUNT(id)も9.1より速くなる。
そういうことを聞きたいんじゃなくて、count(*)とcount(id)で速度に違いはあるのかということです。
9.2になっても、違いはないはず -- Yes or No?
397NAME IS NULL:2013/02/15(金) 17:15:42.66 ID:???
どちらが速くなるかと聞かれたので、どちらも速くなるとコメントした。
COUNT(*)とCOUNT(id)は、インデックススキャンが使われるなら、やっぱり同じだろう。
398NAME IS NULL:2013/02/15(金) 18:14:31.46 ID:???
実行計画はどちらも同じなの?
399NAME IS NULL:2013/02/20(水) 12:35:12.92 ID:???
ソースからmakeして、バイナリしか残ってないんだけど
configureオプションに何を指定したか、バイナリのオプションで表示できないのかな?
400NAME IS NULL:2013/02/20(水) 13:32:01.40 ID:???
pg_config も無いの?
401NAME IS NULL:2013/02/20(水) 13:42:59.33 ID:???
>>400
ありました。そしてオプション表示されました。ありがとうございました。
http://www.postgresql.jp/document/8.4/html/app-pgconfig.html
402NAME IS NULL:2013/03/14(木) 21:24:41.85 ID:???
9.3出たら呼んで
403NAME IS NULL:2013/03/16(土) 21:42:31.11 ID:???
pg_trgm更新遅くなりすぎて使い物にならん
404NAME IS NULL:2013/03/20(水) 01:20:39.20 ID:???
INSERT SELECTした時、SELECT部分で帰ってきたデータを取得する事って出来ますか?
テーブルA,B,Cてあって、BはAのIDを、CはBのIDみたいに親子関係に有った時、
テーブルAで採番されたIDを持つコピー後データをBに、テーブルBで採番されたIDを持つコピー後データをCに
て感じにしたいんだけど、今のテーブル構造だとコピー元、コピー後のマッピングができなくてどうにも出来ないんだ。
それぞれのテーブルにold_idみたいに、コピー前IDを持つようにしたほうが早い?
405NAME IS NULL:2013/03/20(水) 03:01:36.92 ID:???
バージョン書いてないから対応してるかどうかわからないけど、returningで調べるといいよ
406NAME IS NULL:2013/03/20(水) 06:31:51.52 ID:???
404じゃないけど。

この板、ほんとスキルが高くて親切な人が多いなあ。
Letsの人かな。
感謝してます。
407404:2013/03/20(水) 15:41:52.97 ID:???
>>405
こんな物が有ったなんて!
バージョンは9.2なので使えそうです
本当に有難うございます!
408NAME IS NULL:2013/03/27(水) 23:37:45.57 ID:???
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を直打ちしているんです
409NAME IS NULL:2013/03/31(日) 11:22:15.98 ID:???
lo_create でつくるとか?
一時テーブル作って、INSERT文でlo_import 使えばそのテーブルにid入ることは入るけど
そう言う手はどう?
410NAME IS NULL:2013/04/02(火) 14:29:15.00 ID:???
セセセセキュリティホールが見つかったとか聞いて飛んできました!
だだだ大丈夫ですかぁあああ!?
411NAME IS NULL:2013/04/05(金) 09:12:17.06 ID:???
認証不要でDB破壊できちゃうみたいだからかなりヤバげ。
外に晒してなくて信頼できるところからしか接続されないようになってるなら
それほど影響ないかもしれないけど。
412NAME IS NULL:2013/04/24(水) 19:09:55.83 ID:???
おまいら、ご存じでしたら教えてください。

ストアド(pl/pgsql)の定義を厳密にチェックするように設定出来ますか?
lintに相当するチェック機能はありませんか?
413NAME IS NULL:2013/04/24(水) 20:13:18.47 ID:???
元々Cとかに比べるとかなり厳密。
414NAME IS NULL:2013/04/25(木) 12:35:08.00 ID:???
https://github.com/okbob/plpgsql_lint
こういうのとかどうかね
415NAME IS NULL:2013/04/27(土) 16:13:16.72 ID:???
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)も問題なく処理されます。
416NAME IS NULL:2013/04/27(土) 21:59:14.36 ID:jltwdQnB
>>415
コンソールはクライアントのロカールを見て、日付の書式を自動的に年/月/日に
設定してくれている。
Javaからの接続はこの設定を変えないので、サーバ側で指定された書式(たぶん
月/日/年になっている)が使われている。
年/月/日形式の日付書式を使うには、
サーバのpostgresql.confにある設定を
datestyle = 'iso, ymd'
とするか、毎回接続開始時に
set datestyle to 'iso, ymd';
とすればよい。
417NAME IS NULL:2013/04/28(日) 10:48:30.26 ID:???
どのデータベースでも言えることだけど、
商用ソフトとして作ってるなら、日付書式は予めプログラム側でやっとく方が良いよ。
418NAME IS NULL:2013/04/28(日) 16:40:46.97 ID:???
to_date('$str2', 'yyyy/mm/dd') かな。
419NAME IS NULL:2013/04/29(月) 14:07:33.75 ID:???
日本人の払った貴重な血税から
ゴキブリ在日朝鮮人に生活保護が支払われている

ゴキブリ在日朝鮮人の一家族で年間600万円である

ゴキブリ在日朝鮮人の2人に1人は生活保護だ

これより安い給料で働いている日本人が
少ない給料から支払った税金が
ゴキブリ在日朝鮮人の生活保護になっている

ゴキブリ在日朝鮮人は生活保護をもらって
感謝もせず 当然のような顔をして
毎日パチンコをして遊び暮らしている

ゴキブリ在日朝鮮人の犯罪者も非常に多い
ヤクザの2人に1人はゴキブリ在日朝鮮人だ

日本社会の寄生虫 ゴキブリ在日朝鮮人
日本から出て行け! ゴキブリ在日朝鮮人
420NAME IS NULL:2013/04/29(月) 23:36:02.70 ID:???
>>416
>>417
>>418
ありがとうございます!
421NAME IS NULL:2013/05/12(日) 05:40:49.34 ID:xkZS/dht
PostgreSQL 9.3-beta1
422NAME IS NULL:2013/05/13(月) 23:12:55.27 ID:???
本来の使い方ではないかもしれませんが・・・

integer型1カラムで主キーを設定してテーブルを作成しました。
ここに特定のIDをINSERTできれば、排他ロックを取得、
エラーが起これば、他のクライアントで排他処理中としようかと。

INSERT INTO TESTTABLE SET ID=123 ;
とSQLを投げて、エラー(例外)をキャッチしているのですが、
もっとスマートな方法はありませんか?

エラーが返ってくるのではなく、INSERTが成功すればTRUE、
失敗すればFALSEを返すようなSQL文ってないでしょうか?
423NAME IS NULL:2013/05/13(月) 23:19:28.28 ID:???
INSERTしないでSELECT FOR UPDATE NOWAITしろよ。
424NAME IS NULL:2013/05/14(火) 00:03:43.40 ID:???
FOR UPDATEを知らなかった・・・ お恥ずかしい。
ちと調べてきます。
425NAME IS NULL:2013/05/14(火) 00:50:56.20 ID:???
>>421
起こせよ寝坊しただろ
426NAME IS NULL:2013/05/14(火) 06:51:13.88 ID:???
beta版だからまだ寝てていいよ。
427NAME IS NULL:2013/05/14(火) 12:28:25.59 ID:???
おれもbetaだからまだいいかと思ってた
428NAME IS NULL:2013/05/14(火) 16:10:31.76 ID:???
単にbetaと付いているだけで気にせず使ってねっていうソフトも結構多いけど、
PostgreSQLはそういうソフトじゃないしねい
429NAME IS NULL:2013/05/14(火) 16:45:29.41 ID:???
betaだからと気にしながらも、どんどん使えってことか。
430NAME IS NULL:2013/05/15(水) 19:34:48.52 ID:???
7.3で、毎日vacuumdbしてんだけど、最近重い。
年に一度くらいは、pg_dumpしてpsqlリストアとかすべき?
あんまり関係ないですかね?
431NAME IS NULL:2013/05/15(水) 20:17:13.34 ID:???
何が重いの?vacuum?
432NAME IS NULL:2013/05/15(水) 20:28:27.65 ID:???
参照系全般です。
433NAME IS NULL:2013/05/15(水) 21:38:42.58 ID:???
reindexはしてないの?
434NAME IS NULL:2013/05/16(木) 00:07:46.22 ID:???
なんとreindexを定期実行しなきゃいけないのか。
無知だったわ。
でも止められないシステムだから、気軽にできないなぁ
435NAME IS NULL:2013/05/16(木) 00:10:40.67 ID:???
7.3ならダンプレストアするのが早いかもなー
436NAME IS NULL:2013/05/16(木) 19:55:22.39 ID:???
古いバージョン使い続けている事自体が問題かもな。
437NAME IS NULL:2013/05/16(木) 21:27:47.08 ID:???
もちろんそれは気になるけれど、それ自体が問題というのはちょっとな
438NAME IS NULL:2013/05/16(木) 21:48:44.28 ID:???
止めずに使ってるんだから大したもんだよ。
他所だと止めてない、っていうとパッチ当ててないのか?とか批判されそうだけど。
439NAME IS NULL:2013/05/16(木) 22:04:00.81 ID:???
それは環境によるとしかいえないなぁ
非難すべき状況かもしれないし、そうじゃないかもしれないし
440NAME IS NULL:2013/05/17(金) 00:56:07.32 ID:???
postgresql 9.2でも、textsearch_senna は問題なく使用できますか?
441NAME IS NULL:2013/05/17(金) 07:17:48.85 ID:???
世の中何でも24時間稼働という風潮になってきていて
その核となるDBMSは止められないことが多いからなあ…
セキュリティ確保のためオンライン自動アップデート系の
メンテ方法も採用できないことも多いし…
運用はいつの世でも大変だ
442NAME IS NULL:2013/05/17(金) 15:41:04.62 ID:???
>>441
いまどき運用サイドから見て止められないシステムを作っちゃうのが悪いわ。
443430:2013/05/18(土) 16:17:51.60 ID:???
孫請けだから、要件通り7.3を止めずに動かしてお金もらうだけだわ。
怖いからFWや別のレイヤーで色々ガチガチには固めてるけど。
トラブっても責任逃れする準備も含めて周到にやってる。

で、ここの人達はみんな9.2とか使ってるのか。裏山
444NAME IS NULL:2013/05/18(土) 17:30:41.27 ID:???
有効に使われているシステムほど、古くなってもバージョンアップが
できないですよね。
445NAME IS NULL:2013/05/19(日) 17:40:28.78 ID:???
>>440
9.2どころか8.3でもダメじゃなかったっけ?
446NAME IS NULL:2013/05/20(月) 08:54:04.38 ID:???
え?
これだけじゃレプリケーションは勿論駄目だけど一応使えてるよ
447NAME IS NULL:2013/05/20(月) 13:28:12.96 ID:???
>>440
textsearch_jaだけど若干のソースの書き換えと文字コードをutf-8bom無しへの変換でいけたよ。
ソースの書き換えはsqlの大文字を小文字に直した程度だったと思う。
448NAME IS NULL:2013/05/20(月) 17:49:13.70 ID:???
>>443
うちは8.2だわ
449NAME IS NULL:2013/05/22(水) 08:44:10.45 ID:sZW/XsQO
自動バキュームの恩恵を受けられる8.3以降を使わないのは勿体ない。
450NAME IS NULL:2013/05/22(水) 09:17:11.25 ID:???
更新も検索も常に走るようなシステムだとキツいからずっとoffったままだなauto
451NAME IS NULL:2013/05/22(水) 09:19:18.16 ID:???
もったいないつーても
止められない事情と天秤にかけての判断になるからな
無理矢理止めて入れ替えてトラブったら目も当てられん
現実は厳しいぜ
452NAME IS NULL:2013/05/22(水) 09:21:51.73 ID:???
もとい、朝方だけ落ち着くのでその時間にvacuumするのがやっぱ運用しやすかった
いちいち調整するのも大変だし、
autoじゃ拾いきれなくてどっちみち手動vacuumするしかなかった。
453NAME IS NULL:2013/05/22(水) 12:25:38.36 ID:???
9.0ぐらいからかvacuum自体あまりしなくてよくなったんだっけ。
454NAME IS NULL:2013/05/22(水) 15:05:32.48 ID:sZW/XsQO
HOTが有効な更新が多いならバキューム自体あまり気にしなくていいはず。
455NAME IS NULL:2013/05/22(水) 16:08:44.22 ID:???
最近は参照があるたびにcountカラムをインクリメントするような事してるけどデッドタプル結構貯まるんだよなぁ。
まぁ以前のバージョンに比べればデッドタプル多少貯まってもパフォーマンスに影響そんな無いみたいだから気にしてないけど。
456NAME IS NULL:2013/05/23(木) 11:18:18.71 ID:???
8.3よりも前のバージョンの自動バキュームは何がダメなの?
457NAME IS NULL:2013/05/23(木) 14:11:26.77 ID:CmgD6Bce
>>456
たしか自動バキュームのワーカープロセスが1つしかないから
大きいテーブルの自動バキュームが走ると、それが終わるまで
他のテーブルへの自動バキュームが出来なくなるとかだった気がする。
で、8.3からは複数ワーカープロセスが動けるようになった。
458NAME IS NULL:2013/05/31(金) 03:38:01.00 ID:???
>455
一般論で言えば、テーブルにFILLFACTORを設定すれば、そんなにデッドタプルが溜まることはなくなるはず。
459NAME IS NULL:2013/05/31(金) 05:51:48.57 ID:???
テス
460NAME IS NULL:2013/05/31(金) 06:03:46.91 ID:bz/a3XA7
初心者質問で恐縮です。
バージョン9.2です。
例えばwhere id=? and code=? という条件を
codeのパラメーターの値が無ければすべて抽出するという書き方はありますか?
461NAME IS NULL:2013/05/31(金) 07:58:45.54 ID:???
あるよ。
462461:2013/05/31(金) 08:00:38.15 ID:???
ヒントも書いとく。
WHERE ID=? AND ( X )
Xの部分は自分で考えろ。
463NAME IS NULL:2013/05/31(金) 20:54:33.02 ID:laXbRm2m
>>462
()で括っているのがヒントですか?
464NAME IS NULL:2013/05/31(金) 22:20:53.49 ID:???
code = ? or code is nullかなあ
465NAME IS NULL:2013/05/31(金) 23:02:30.51 ID:laXbRm2m
>>464
パラメーター値がある時は抽出できますが
すべて抽出はできませんでした
466NAME IS NULL:2013/06/01(土) 03:28:14.99 ID:???
IF文使えばいけるけど、プログラムで実行するSQL文制御した方がいいよ。
467NAME IS NULL:2013/06/01(土) 07:35:46.87 ID:???
select * from R where id=? and code=? or not exists (select * from R where id=? and code =?)
468NAME 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=?

と、したいのです。
469NAME IS NULL:2013/06/01(土) 09:35:50.62 ID:???
470NAME IS NULL:2013/06/01(土) 09:48:40.81 ID:???
whereにor使えること知らないの?
471NAME IS NULL:2013/06/01(土) 10:04:02.82 ID:???
ORを知らないんだろ。
472NAME IS NULL:2013/06/01(土) 10:11:04.56 ID:???
>>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 =?))
473NAME IS NULL:2013/06/01(土) 10:16:30.29 ID:???
うちの会社じゃSQLの新人(中途でも)に1日目に教えるような簡単なことなのに。
474NAME IS NULL:2013/06/01(土) 10:25:06.96 ID:gkJE/QhY
>>472
できました!ありがとうございます。

これって相関サブクエリでcode=?以外を抽出するって意味でしょうか?
475474: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 =?))
476NAME IS NULL:2013/06/01(土) 10:50:15.78 ID:???
>>473
外野は黙ってろ
そういうくだらない茶々入れが荒れる元になるんだ
お前のところの教育がどうこうなんてこの流れで言うことか
話の流れに沿わない書き込みはするな
477NAME IS NULL:2013/06/01(土) 16:16:29.67 ID:???
そういう口調も荒れる原因になったりするんだけどね。
穏やかに行こうよ。
478NAME IS NULL:2013/06/01(土) 22:23:59.30 ID:???
>>474
いや相関ではない。
手続き的に言えば
最初にサブクエリが実行され、その結果(true/flse)に置き換えて
メインクエリが実行されるというイメージ。
(よっぽど駄目なDBMSでなければ)
479474:2013/06/01(土) 23:28:51.60 ID:gkJE/QhY
>>478
丁寧な説明とわかりやすい指導ありがとうございます。
480NAME IS NULL:2013/06/03(月) 02:34:33.27 ID:???
ホントにできたのかな…
481NAME IS NULL:2013/06/03(月) 02:39:01.34 ID:???
だけって言うのもあれなので、、

前者は質問者の話の流れで行くと、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=? と同じかなと。

後者なら回りくどいけど、動きそうか。
482NAME IS NULL:2013/06/03(月) 09:23:40.91 ID:???
>>461 = >>462だけど、>>481には正解がないよ。
483NAME IS NULL:2013/06/03(月) 10:28:05.38 ID:???
わかってる
484460, 474:2013/06/03(月) 19:14:11.67 ID:2r5NLX9l
>>481は、間違い?
485NAME IS NULL:2013/06/03(月) 20:32:31.77 ID:???
>>484
あなたが希望したとおりに動いてるのなら正解
そうじゃないなら間違い
486460, 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のレコードを抽出

というかたちで希望どうりの動きができています。
487NAME IS NULL:2013/06/03(月) 22:19:10.74 ID:???
code=ナントカって、渡すパラメータのことを言ってたのか?
だったらサブクエリなんか使わんでも

select * from R where id=? and (code=? or ?=0)

でいいんじゃね?
488461:2013/06/03(月) 23:18:49.53 ID:???
>>487
正解
489NAME IS NULL:2013/06/03(月) 23:29:01.79 ID:???
だね。何で回りくどい書き方をしたのか
490NAME IS NULL:2013/06/04(火) 08:17:27.14 ID:???
491NAME IS NULL:2013/06/05(水) 02:59:27.46 ID:???
492NAME IS NULL:2013/06/05(水) 19:02:19.75 ID:???
??
493NAME IS NULL:2013/06/05(水) 19:09:28.06 ID:???
文字化けがひどいな。
494NAME IS NULL:2013/06/05(水) 20:41:39.33 ID:???
???
495NAME IS NULL:2013/06/11(火) 16:13:30.71 ID:???
おまいら、質問です。
CREATE FUNCTIONでストアド作る時にフィールドやらテーブルの存在チェックをする方法はありませんか?
もしくはビューやストアドに使われてるフィールドやらテーブルの存在チェックを一括で実行する方法はありませんか?

デフォルト設定のMacOSX用9.2.4と、Windows版pgAdminIIIの組み合わせでストアドを作っています。
設定変更でチェック出来るなら変更します。

今は1個1個実行してバグ出ししてます。
(命名規則違反が見つかった時とかは修正後ストアドのテストやり直し><;;)
496NAME IS NULL:2013/06/11(火) 16:27:20.52 ID:???
>>495
> CREATE FUNCTIONでストアド作る時にフィールドやらテーブルの存在チェックをする方法はありませんか?
無い。
> もしくはビューやストアドに使われてるフィールドやらテーブルの存在チェックを一括で実行する方法はありませんか?
無い。
> (命名規則違反が見つかった時とかは修正後ストアドのテストやり直し><;;)
自動テストにしておけばいい。
497NAME IS NULL:2013/06/11(火) 16:31:27.36 ID:???
>>496
dクス。VBAのExplicitに慣れすぎた体にはストアドのこの仕様(?)は堪える。orz
498NAME IS NULL:2013/06/11(火) 22:27:06.62 ID:???
質問です
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.? を入れてあるやつでバックアップしたんだけどそれが原因?
この場合、無理やりリストアする事はできない?
499NAME IS NULL:2013/06/12(水) 01:49:31.84 ID:???
>>495-496
Function作る時にTableがなければerrorでるだろ?
500NAME IS NULL:2013/06/12(水) 02:47:25.94 ID:???
>>498
そのエラーメッセージでググると
それっぽいQ&A記事が引っかかるよ
501498:2013/06/12(水) 09:04:13.53 ID:???
>>500
ググったんだけどそもそも日本語の結果がほとんどヒットしなくて、
違うバージョンのにリストアする方法しか見つからなかった

因みに諸事情によりdumpのオプション変えて取り直しとかは不可な状況です
502NAME IS NULL:2013/06/12(水) 09:12:37.22 ID:???
>>501
訳せよ。
503NAME IS NULL:2013/06/12(水) 10:52:41.81 ID:???
>>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以降の版でいったんリストアしてからテキストダンプして古い方に取り込むとか
504NAME IS NULL:2013/06/12(水) 14:37:34.23 ID:???
>>499
LANGUAGE SQL の時はね。
LANGUAGE plpgsq lの時は出ない。
505NAME IS NULL:2013/06/12(水) 16:41:34.53 ID:???
どっち準拠に従うべき?
506NAME IS NULL:2013/06/12(水) 22:23:32.26 ID:???
PostgreSQLだけしか使えない奴って居るの?
507NAME IS NULL:2013/06/12(水) 22:40:13.45 ID:???
何の意味があんのその質問
508NAME IS NULL:2013/06/13(木) 00:22:06.60 ID:???
全くだな
質問にもそれなりの仕方・手順というものがある
聞かれた方が「何でそんなこと聞くの?」って
目を白黒させるようなものはいただけない
509NAME IS NULL:2013/06/13(木) 04:28:12.64 ID:???
いたところで、どうすんのって思うわけで。
510NAME IS NULL:2013/06/13(木) 14:56:45.22 ID:???
喧嘩はやめて!(´;ω;)
511NAME IS NULL:2013/06/13(木) 19:35:13.46 ID:???
ふたりをを止めて!(´;ω;)
512NAME IS NULL:2013/06/13(木) 21:02:19.46 ID:???
サーバーも止めて!
513NAME IS NULL:2013/06/13(木) 21:20:49.50 ID:???
私のために争わないで!
ヌルかナルかなんてどっちだっていいじゃない!
514NAME IS NULL:2013/06/13(木) 21:56:47.86 ID:???
もぉ、こ〜れ〜い〜じょお〜♪

てか、古いな
515NAME IS NULL:2013/06/14(金) 04:15:07.05 ID:???
>>512
(お……Fullか……?)
516NAME IS NULL:2013/06/16(日) 19:39:58.89 ID:???
(forever love…?)
517NAME IS NULL:2013/06/18(火) 03:05:22.33 ID:???
実行計画が同じなのに実行時間が倍以上違うのは何が原因?
キャッシュなどはすべてクリア済みっす
518NAME IS NULL:2013/06/18(火) 04:54:47.40 ID:???
キャッシュのクリアって具体的にどうやってんの?
カーネルが持ってるキャッシュもあるし、OS再起動後に計ってるってこと?
マシンのスペック、postgresql.confは全く一緒なの?
519517: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の結果と同じになったりします。(ならないときもあり)

何が原因でここまで不安定になるのでっしょう?
520NAME IS NULL:2013/06/18(火) 14:57:57.12 ID:???
同じとか倍とか言うけど、それは10msのオーダーなのか100秒のオーダーなのかわからん。
あと、他のプロセスが忙しかったりはしないのか?
521NAME IS NULL:2013/06/18(火) 14:59:32.20 ID:???
あと、vmstat, iostat, ifstat, netstat, dstat, top, htop, sarとかを駆使して、実行環境に違いがないか確認しろ。
522NAME IS NULL:2013/06/18(火) 15:00:07.19 ID:???
おっと、そういやOSは何なんだ?
523517:2013/06/18(火) 15:16:20.98 ID:???
>>520
>>521
測定時間は速いときは約30分、遅い時は約1時間です。
測定時裏で動いている各プロセスの動きとかは確認していないので確認してみます。

>>522
OS は CentOS5.6 てす。

あとPostgresSQLのバージョンは 9.2.4.1 です。
524NAME IS NULL:2013/06/18(火) 19:05:32.67 ID:???
30分と1時間っていうのは、1つのSQLの1回の実行時間じゃないだろ!
ディスクアクセスの所要時間(待ち時間)の差だけでも30分ぐらいになるんだろう。
525NAME IS NULL:2013/06/18(火) 21:53:22.09 ID:???
一回かもしれないじゃないか(ガクガク
526NAME IS NULL:2013/06/18(火) 22:15:05.43 ID:???
まさかクライアントとかから同じSQLを何万回も呼び出したりしてるのかしら?
connectして、execして、disconnectしてたりして。
527NAME IS NULL:2013/06/18(火) 23:35:51.98 ID:???
うむ、OLTP系とOLAP系の人ではタイムスケールが合わないな
528NAME IS NULL:2013/06/18(火) 23:55:22.91 ID:???
なるほど、同じマシンでってことか
まさかとは思うが、autovacuumが動いてて影響してるとか…
529NAME IS NULL:2013/06/19(水) 00:16:12.98 ID:???
>>519
1. の方が早いのかな?
当てずっぽうだけど4. の方は、ヒープのヒット率が低くてディスクI/Oが増えてるとか。
530NAME IS NULL:2013/06/19(水) 08:23:36.43 ID:???
つか、俺らがそのPCの前に行けば、多分5分もあれば原因わかるようなことだろうな。
531NAME IS NULL:2013/06/19(水) 10:25:52.29 ID:???
こじれてる初心者質問はどの分野でもそうだけどなw
532NAME IS NULL:2013/06/21(金) 00:07:09.32 ID:???
533NAME IS NULL:2013/06/21(金) 12:35:42.96 ID:???
>>532

この人、MLで質問する前に楽天で質問してた

ttp://qanda.rakuten.ne.jp/qa8137892.html
だいじょぶか、この会社
534NAME IS NULL:2013/06/22(土) 14:15:50.88 ID:???
>>533
MLに入ってなかったんじゃないの?
2chに慣れてしまっているせいかメールクライアントやMLのスレッド表示はなんか見づらい
535NAME IS NULL:2013/06/22(土) 15:30:37.80 ID:???
MLって初心者には敷居が高いしな。
536NAME IS NULL:2013/06/22(土) 15:36:45.93 ID:???
9.2でまともに使えるN-gram系の全部検索ライブラリとかあったら教えて欲しい
※標準で入ってるN-gram検索は2文字以下では使い物にならないのでそれ以外で
537536:2013/06/22(土) 16:51:43.46 ID:???
自己解決した
Ludiaで終わってたと思ってたNTTデータがやってくれてました
ありがたやありがたや
これで、MySQLからPostgreSQLに戻ってくることができる
538NAME IS NULL:2013/06/23(日) 00:18:51.92 ID:???
>>534

レプリケーションしてるかどうかも確認できないレベルで運用してたってスゴくね?

ド素人がなんでレプリケーション組んだんだろ?
故障してから24時間、どこから手をつけていいか全然見当つかなかったようだし、
監視ツールも使ってないみたいだし。
539NAME IS NULL:2013/06/23(日) 00:34:34.73 ID:???
>>538
世の中のシステム管理者のレベルってそういうのが結構多いよ。
この前、お客さんところ行ってサーバー見たらさ、
RAIDの管理ツールも入ってるのに、SATAのHDDが1台入ってるだけなんだよ。
そこの会社のサーバー数十台全部そういう状態。
担当者は、RAID組んであるはずなのになぁ、、、って言ってたわ。
540NAME IS NULL:2013/06/23(日) 06:07:11.57 ID:???
構築する人と運用する人は別だったりするしな。
541NAME IS NULL:2013/06/23(日) 09:17:35.68 ID:???
>>539
それ、最初からRAIDになってなかった臭いな。
刑事事件に発展しそうな案件だな。
542NAME IS NULL:2013/06/23(日) 10:26:49.19 ID:???
RAIDマネージャー入れたらOKと思ってただけなんじゃないの?
543NAME IS NULL:2013/06/23(日) 16:36:46.10 ID:???
嘘でしょ
544NAME IS NULL:2013/06/23(日) 17:15:30.25 ID:???
ちゃんと入れたほうが金になるから業者もちゃんと入れるだろうに、、、
思いっきり安い見積もりでオプションのHDD入れてないとかかな
545NAME IS NULL:2013/06/23(日) 17:21:26.07 ID:???
>>537
pg_bigrm?
標準のginってfastupdateでもやっぱちょっと遅くない?(更新が)

そう言えば9.2でamが追加になってたけど、txtsearchsennaって9.2いけんのけ?
546NAME IS NULL:2013/06/23(日) 21:12:11.11 ID:???
発注する時に総務が一番安いモデルにしたとか。
昔勤めていた会社ならやりそうだ。
547NAME IS NULL:2013/06/24(月) 21:27:18.96 ID:???
>>545
textsearchsennaはインスコでこける
548NAME IS NULL:2013/06/24(月) 22:03:24.95 ID:???
あぁやっぱり。
多分追加になったamを書き足せばいけるだろ。
帰ったらやってみるかな。
549NAME IS NULL:2013/06/24(月) 23:03:39.09 ID:???
書いたままクエリを実行する(gccの-O0のような)隠しオプションはないのかな
自分でソース書き換えるしかない?
550NAME IS NULL:2013/06/24(月) 23:05:49.57 ID:???
意味不明すぎる。
551NAME IS NULL:2013/06/24(月) 23:18:17.54 ID:???
俺も十回読んだが理解できなかった
俺の理解力が足らないのかと少し悩んだ
552NAME IS NULL:2013/06/24(月) 23:20:26.48 ID:???
クエリを最適化せずに(書いてある通りに)実行するオプションってことじゃないの
553NAME IS NULL:2013/06/24(月) 23:56:07.85 ID:???
join_collapse_limitとかの話?
554NAME IS NULL:2013/06/25(火) 00:03:38.85 ID:???
確かそれを1にしても選択と結合の交換などは止められなかったはず
555NAME IS NULL:2013/06/25(火) 07:34:53.19 ID:???
"クエリ最適化なし"の定義が分からん
556NAME IS NULL:2013/06/25(火) 11:25:15.44 ID:???
コストベースじゃなくてルールベースってことかも。
557NAME IS NULL:2013/06/25(火) 13:25:32.79 ID:???
実行計画を自分で決めたいってことか?
でも、「書いたまま」ってのがイミフだな・・・・・・。
558NAME IS NULL:2013/06/25(火) 14:46:00.13 ID:???
結合順とか絞り込み順とか、そのままの順番で動いてほしいんじゃないの
結合に関しては()使えば強制できるんだっけ?
559NAME IS NULL:2013/06/25(火) 15:02:43.04 ID:???
本人の説明なしにあれこれ推論してもあんま意味ないな
560NAME IS NULL:2013/06/25(火) 15:05:50.75 ID:???
大方の見方は一致してるようだけどね
561NAME IS NULL:2013/06/25(火) 20:20:25.03 ID:???
説明不足ですみません。
書いたままというのは
select A from R1,R2 where F
みたいな形の式を「R1,R2を結合(直積)して条件Fで選択してAで射影」という素朴な順序で評価する
という意味です。
RDBMSは通常ここから、関係代数式の等価規則を使って演算順序を組み替えるとか、
統計情報をもとにハイパーグラフのリダクションや動的計画法で効率的な順序を決める
といった最適化をして実行計画を作るわけですが、その効果をみる上でもベースとなる
素朴な評価順序での計測ができないかなと思って質問しました。
562NAME IS NULL:2013/06/25(火) 20:33:41.30 ID:???
DBMSの比較表でもつくんのかな
563NAME IS NULL:2013/06/25(火) 20:34:00.52 ID:???
素朴な順序じゃないだろ。
漢字で表現するなら「愚直な順序」の方が適切だな。
564NAME IS NULL:2013/06/25(火) 20:36:14.59 ID:???
というかな、その程度のことなら、SQL3回流せば終わりだろ。
@SELECT R1.*,R2.* FROM R1,R2;
ASELECT R1.*,R2.* FROM R1,R2 WHERE F;
BSELECT A FROM R1,R2 WHERE F;
これで561の計測したいことは全部計測できるだろ。
565NAME IS NULL:2013/06/25(火) 20:43:06.86 ID:???
結合方法も比較したいかもなぁ。
enable_hashjoin とか使うといいかもね。そこまでの強制力はなかったと思うけど。
566NAME IS NULL:2013/06/25(火) 20:53:07.62 ID:???
>>564
これは各段階に常にMaterializeを入れた結果になるから駄目だろ。
567NAME IS NULL:2013/06/25(火) 20:55:33.27 ID:???
>>563
select文をパースして最初にできる問い合わせ木の順序と考えると
「素朴」でもいいんじゃない。
568NAME IS NULL:2013/06/25(火) 22:01:36.25 ID:???
>>566
>>561は差を知りたいだけなんだろ?
569NAME IS NULL:2013/06/25(火) 22:17:41.86 ID:???
pg_hint_plan使えば試したいプランを実行できんじゃないの?
よく知らんけど。
570NAME IS NULL:2013/06/26(水) 00:14:55.71 ID:???
そういやそんなんあったな
571NAME IS NULL:2013/06/26(水) 03:24:05.11 ID:???
>>561

>>RDBMSは通常ここから、関係代数式の等価規則を使って演算順序を組み替えるとか、
>>統計情報をもとにハイパーグラフのリダクションや動的計画法で効率的な順序を決める
>>といった最適化をして実行計画を作るわけですが、

ポスグレのプランナとオプティマイザは不可分で、最初っからダイナミックプログラミングで
ごりごりプランツリーをつくってくから、「後から最適化」って概念がないんじゃないの。

因みにポスグレはプラン処理の前処理で"1+1"を2にしたり、可能ならサブクエリをJOINにするとかの最適化を行うらしい。
某書籍の受け売り。
572NAME IS NULL:2013/06/26(水) 05:41:33.52 ID:???
プランニングの前処理で既にクエリ書き換えちゃうよ
主にやってること


■スカラー表現の簡素化
主に定数たたみ込み(
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;
573NAME IS NULL:2013/06/27(木) 22:44:31.96 ID:???
間抜けな質問がないと、盛り上がらんな。
574NAME IS NULL:2013/06/30(日) 00:45:46.63 ID:???
>>541
刑事事件じゃなくて、民事だろ!

って、おもってから、数秒後・・・あぁ、なるほど、刑事事件か。と納得した。
575NAME IS NULL:2013/06/30(日) 02:04:40.16 ID:???
単に管理ソフト入れたらRAIDになると勘違いしてただけだろ。
576daisuke:2013/07/01(月) NY:AN:NY.AN ID:???
すみません。初心者です。

update文で教えてください。
顧客情報のテーブル→t_client
注文内容のテーブル→t_orderがあります。

注文内容と顧客情報を合体させて、
顧客情報にカートIDを入れたいです。

ご教授よろしくお願いします。
577NAME IS NULL:2013/07/01(月) NY:AN:NY.AN ID:???
これは酷いw
578NAME IS NULL:2013/07/01(月) NY:AN:NY.AN ID:???
>>576
SQLの基礎さえできていないようだけど
どういう経緯でそんなことをやる羽目になったの?
もし業務でやらされているのならば
明日朝一番にギブアップ報告しろと言いたくなるレベル。
579NAME IS NULL:2013/07/02(火) NY:AN:NY.AN ID:???
これはレスした方が負けだろ。
580NAME IS NULL:2013/07/02(火) NY:AN:NY.AN ID:???
メアドといい、怪し過ぎる
レスしたら負けだ
581NAME IS NULL:2013/07/02(火) NY:AN:NY.AN ID:???
up pu
582NAME IS NULL:2013/07/02(火) NY:AN:NY.AN ID:???
>>576
あなたが設計したの?
他の人が設計したんじゃなきゃもう一度勉強してやり直した方がいいよ
583NAME IS NULL:2013/07/02(火) NY:AN:NY.AN ID:???
>>576
それならテーブル構成ぐらい晒せや
584NAME IS NULL:2013/07/03(水) NY:AN:NY.AN ID:???
過去に構築したPostgreSQL 7.4.16がRedhatで稼働しています。
この度、ハードウェア更新することになり、Linuxもバージョンアップします。
その際に過去のDBを移行するのですが、7.4.xxをインストールするのが
最も作業量ミニマムでしょうか?
585NAME IS NULL:2013/07/03(水) NY:AN:NY.AN ID:???
まあそうかもね
ダンプ→りストアでだいたい済むけど
7->8はキャストしてないと通らなかったりするからなあ

って同じサーバに複数のバージョンのpostgreSQL入れて試してみりゃいいじゃん
586NAME IS NULL:2013/07/04(木) NY:AN:NY.AN ID:???
新しいハードにESXi入れて、VMWare Converterで古いハードをP2Vするのが
一番作業量が少ないと思う。
587NAME IS NULL:2013/07/09(火) NY:AN:NY.AN ID:???
7 を入れるなんて、恐ろしいからやめてくれ。
こないだ重大な脆弱性に対する緊急アプデがあったばかりで
7とかはアプデ対象外だというに。
588NAME IS NULL:2013/07/09(火) NY:AN:NY.AN ID:???
脆弱性なんて、他の手段でなんとかなるだろ。
589NAME IS NULL:2013/07/09(火) NY:AN:NY.AN ID:???
表にそのまま出すケースのが少ないしな
590NAME IS NULL:2013/07/09(火) NY:AN:NY.AN ID:???
新しいものに移行することに労力を割くか、
古いものを運用し続けることに労力を割くか、
591NAME IS NULL:2013/07/09(火) NY:AN:NY.AN ID:???
ま、ポート変えりゃいろんなバージョン同時にいくつも動かせるんだから
検証しながらやればいいよなあ
592NAME IS NULL:2013/07/09(火) NY:AN:NY.AN ID:???
>>591
アホなH社に全プログラムをタダで再検証させられたぜよ。
H社のDBのスペシャリストが本番と違うバージョンでテストしてたくせに。
593NAME IS NULL:2013/07/10(水) NY:AN:NY.AN ID:???
Hって国産DBやってるとこ?

あそこのオープンソース系の連中、腐ってるだろ
なんのアウトプットも無い
594NAME IS NULL:2013/07/10(水) NY:AN:NY.AN ID:???
>>593
オープンソース?
そんなんやってたっけ?
昔、S○ がちょっとやってたぐらいしか知らない

オープンアーキテクチャ (と、彼らがほざいてる) のことなら、同意
595NAME IS NULL:2013/07/10(水) NY:AN:NY.AN ID:???
この辺じゃないの?
http://www.hitachi.co.jp/products/it/linux/opensource/index.html

SystemTapはお世話になった
596NAME IS NULL:2013/07/11(木) NY:AN:NY.AN ID:???
>>595
なるほど、それなりにやってるんだな。
597NAME IS NULL:2013/07/11(木) NY:AN:NY.AN ID:???
やるのは構わんが自分とこのミスを他所に押し付けるのが困る。
598NAME IS NULL:2013/07/14(日) NY:AN:NY.AN ID:???
責任転嫁する為に外注するんじゃないの?
599NAME IS NULL:2013/07/14(日) NY:AN:NY.AN ID:???
まあそのために金出してるんだしなw
600NAME IS NULL:2013/07/14(日) NY:AN:NY.AN ID:???
つまり、まともな客じゃねぇんだな。
601NAME IS NULL:2013/07/16(火) NY:AN:NY.AN ID:???
ちょっとしたソーシャルゲームをつくろうとおもっています。
1000ビットくらいあるフラグのアレイを bit varying型 で格納するべきか、
それとも1フラグ1レコードで記憶すべきか・・・。

bit varying の nビット目が 0か1か調べたり、0や1を直接書き込む効率的な関数ってありましたっけ?
602NAME IS NULL:2013/07/16(火) NY:AN:NY.AN ID:???
両方試した方が早いよ。
603NAME IS NULL:2013/07/16(火) NY:AN:NY.AN ID:/QqZF5MJ
>>601
http://www.postgresql.jp/document/9.1/html/functions-bitstring.html

> &、|、#のビット文字列オペランドは同一長でなければなりません。
という記述を見てまずいかと思ったけど、キャストで解決できるようだ。
効率的な関数とやらはよく調べてないのでわかんないけど、一般的なフラグ処理でいいんじゃないのかな。
それでも必要だとおもい、調べても見つからないなら作ればいいかと。
604NAME IS NULL:2013/07/17(水) NY:AN:NY.AN ID:???
>>602 なるほど、もっともです。ありがとう。

>>603 どうも無さそうなので、PL/pgSQLの関数を作ってみました。
ただ、自分の方法はすごく頭の悪い方法かもしれないです。
5ビット目とか6ビット目ならシフトで気にならないですが、
800ビット目とか900ビット目とかになると、
その回数シフトさせるオーバーヘッドが気持ち悪いです。

もっとも、EXPLAIN ANALYSE で見るボトルネックはもっと他にあるようで、
5ビットも900ビットも大差なかったです。
そして、1フィールドに全フラグを押し込める方式も、フラグごとに1レコード用意する方式も、
全体のデータが少ない現在の試験環境では処理コストそのものに大差ないようです。
というわけで、今後は

・複数のフラグを(たとえば10個や20個を)まとめて処理する状況が頻発するのか
・フラグごとに集計する必要があるのか
・1レコード1フラグにしてメモリーにのりきるのかどうか

このあたりから熟考してみます。>>602-603 ありがとう。
605NAME IS NULL:2013/07/17(水) NY:AN:NY.AN ID:???
.NETサポートまだですか
606NAME IS NULL:2013/07/17(水) NY:AN:NY.AN ID:???
Npgsqlとかじゃなくて公式でってこと?
6071/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
をインストール、動作させることができました。
どうやら動作自体はするもののようです。

ただ、原理的に正常に動くものなのか、どなたかお教えいただけないでしょう
か。
6082/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 でファイルのインストール先を確認したところ、どれもかぶってはい
ませんでした。

ただ、これもかなり変則的な使い方のようなので、原理的に動作するものなのか
お伺いしたいのです。
6093/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)をサー
バに入れずに済ませたくて、質問させて頂きました。


以上です。変則的な質問が多くて恐縮ですが、どうかよろしくお願いいたします。
610NAME IS NULL:2013/07/18(木) NY:AN:NY.AN ID:???
質問するまでも無いことまで質問してるな。
611NAME IS NULL:2013/07/19(金) NY:AN:NY.AN ID:???
9.4出たら起こして
612NAME IS NULL:2013/07/20(土) NY:AN:NY.AN ID:???
9.3はいいのかw
613NAME IS NULL:2013/07/20(土) NY:AN:NY.AN ID:???
>>607 いいんじゃない?
>>608 いや、ポート番号を変えるのが常道であって、それで正解だと思うが?
614NAME IS NULL:2013/07/20(土) NY:AN:NY.AN ID:???
マテビューってすごく待ってたんだけどよく考えたら使い道無かった。
自動更新とか無いと一時テーブルと何も変わらんよなあ…
マテビュー(ポスグレの)リフレッシュするときって排他ロック掛かるよね?
615NAME IS NULL:2013/07/21(日) NY:AN:NY.AN ID:???
うちはランキングのテーブルとかに使おうかなと考えている。
とはいっても、現時点で既に cronで定期的に 実表にランキングを書き出しているから
新たにマテビューをつかうメリットなんて思いつかないが。

それはそうと、
ttp://www.slideshare.net/hadoopxnttdata/postgre-sql93-24136770
このスライドいいね。 9.3 とか 9.4 がよくわかった。
616607:2013/07/21(日) NY:AN:NY.AN ID:???
>>613
ご回答ありがとうございます。

そもそも自分は、64bitサーバで32bitバイナリが動くということ自体、知りま
せんでした。

64bit環境での32bitプロセスの動作 - Linuxカーネルメモ
http://wiki.bit-hive.com/linuxkernelmemo/pg/64bit%B4%C4%B6%AD%A4%C7%A4%CE32bit%A5%D7%A5%ED%A5%BB%A5%B9%A4%CE%C6%B0%BA%EE

動かない場合はないのか、PostgreSQLは大丈夫なのか、お伺いしたかったので
す。

8.2(32bit)と9.1(64bit)でインストール先のファイルがかぶらないことは確認
できたのですが、ポートの他に競合するものがないか不安で、質問させていた
だきました。

--

お詫びしますが、実は >>607-609 はマルチポストです。申し訳ありません。

先に7/15(月)にpgsql-jp に加入、投稿させていただいたのですが、「 メール
に不審なヘッダがあります」とのことで「リスト司会者のチェックのために投
稿が保留されました。」という状態になってしまいました。

3日待っても進展がなかったので、こちらのスレッドに同じ内容を書き込ませ
ていただいた次第です。

ちなみに現在も進展がありません。どうなってしまったんだろう…。
617NAME IS NULL:2013/07/21(日) NY:AN:NY.AN ID:???
答えるまでも無いと思われてるか、ここで質問されてるからいいやと思われたのか。
618NAME IS NULL:2013/07/22(月) NY:AN:NY.AN ID:???
9.2のMVって、一体どういう風に使われるのを想定してるんだろうか?
triggerなんかで更新が必要なら、実表とそう変わらん気がする。
619NAME IS NULL:2013/07/22(月) NY:AN:NY.AN ID:QpLqH1LE
参照の高速化じゃない?
今のところ自動リフレッシュがなさそうに見えるので用途は限定されるかも
620NAME IS NULL:2013/07/22(月) NY:AN:NY.AN ID:???
正直、9.1で十分だと思う。
621NAME IS NULL:2013/07/22(月) NY:AN:NY.AN ID:???
インデックスオンリースキャンはガチ
622NAME IS NULL:2013/07/23(火) NY:AN:NY.AN ID:???
正直8.1で十分だと思う

そうほざいてた時期が俺にもありました
623NAME IS NULL:2013/07/26(金) NY:AN:NY.AN ID:???
ポスグレってオラクルの何パーセントくらい凄いの?
624NAME IS NULL:2013/07/27(土) NY:AN:NY.AN ID:EswCpdfC
それを知ってどうしたいのかにもよるけど、たぶん3%ぐらいって答えておくのがいいパターンだと思う
625NAME IS NULL:2013/07/27(土) NY:AN:NY.AN ID:???
そっかー(´・ェ・)ちなみにMySQLはポスグレの何%ぐらい凄いのー?
626NAME IS NULL:2013/07/27(土) NY:AN:NY.AN ID:???
まちがったー(´・ェ・)MySQLはオラクルの何%ぐらい凄いのー?
627NAME IS NULL:2013/07/27(土) NY:AN:NY.AN ID:???
過疎ってると思ったら、突然馬鹿が二人現れたな
628NAME IS NULL:2013/07/27(土) NY:AN:NY.AN ID:???
(´・ェ・)
629NAME IS NULL:2013/07/28(日) NY:AN:NY.AN ID:???
>>627
一人はぼくだとして(´・ェ・)もう一人は誰ー?
630NAME IS NULL:2013/07/28(日) NY:AN:NY.AN ID:???
>>629
もう一人もキミだよ。
631NAME IS NULL:2013/07/28(日) NY:AN:NY.AN ID:???
(・3・)アルェー
632NAME IS NULL:2013/07/31(水) NY:AN:NY.AN ID:???
>>630
なんだー(´・ェ・)ぼくは一人じゃなかったのかー
633NAME IS NULL:2013/08/24(土) NY:AN:NY.AN ID:???
話題は?
634NAME IS NULL:2013/08/24(土) NY:AN:NY.AN ID:83q6fySG
最近ちょっと太った。
635NAME IS NULL:2013/08/24(土) NY:AN:NY.AN ID:???
今ままでOracle、SQL Serverをやってきたんだけど、日本語DBだったんだ
だから、ポスグレはちゃんと英単語を使いたいと思ってる
項目名どうやって決定してるよ?
636NAME IS NULL:2013/08/25(日) NY:AN:NY.AN ID:???
日本語で問題ないよ。テーブル名はさすがに英語にしてるけど。
637NAME IS NULL:2013/08/25(日) NY:AN:NY.AN ID:???
全て日本語で問題なし
ソフトが対応していないならともかく
日本人なのにわざわざ英語を使う必要はない
638NAME IS NULL:2013/08/26(月) NY:AN:NY.AN ID:???
>>636
さすがに、ってどういう意味で言ってるの?
マルチバイトサポートしてるだろ?
639NAME IS NULL:2013/08/26(月) NY:AN:NY.AN ID:???
>>638
カラム名だけを日本語にするのとテーブル名も日本語にするのでは、心理的障壁の高さが違うんでしょう。
640NAME IS NULL:2013/08/26(月) NY:AN:NY.AN ID:???
すみません。
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.」

導入方法や検証方法に誤りがあれば、ご指摘いただきたく思います。

よろしくお願いします。
641NAME IS NULL:2013/08/27(火) NY:AN:NY.AN ID:???
http://www.microsoft.com/ja-jp/download/details.aspx?id=29
ランタイム入れなおしたら?
642NAME IS NULL:2013/08/27(火) NY:AN:NY.AN ID:???
Windows自体が 64bit で、32bit の dll 持ってないとかじゃないの?
システムフォルダからコピーしてくる、ってのは割と悪手な気がする…
643NAME IS NULL:2013/08/27(火) NY:AN:NY.AN ID:???
ところで2ちゃんねるが閉鎖された場合の避難所ってどうなってるの?
オープンソースなPostgreSQLなら、やっぱ、おーぷん2ちゃんねる?
644640:2013/08/28(水) NY:AN:NY.AN ID:???
>641
何度も入れなおしてみましたが、結果は同じでした。

>642
Winは64bitです。
ただ、641が張ってくれてるリンクがx86用だから、
それをインストールしたら、32bitのdllを持ってるって事ですよね...?
645NAME IS NULL:2013/08/28(水) NY:AN:NY.AN ID:???
Winが64bitなのは
>C:\Program Files (x86)
これでわかるって。
実行してるものは32なのか64なのか
646640: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用だと思います。


勘違いしてて、レスにあっていない返答になってたらすみません。
647NAME IS NULL:2013/08/28(水) NY:AN:NY.AN ID:???
Dependency Walker で見てみたらどうなるかなあ、MSVCRT90だけかな?
648NAME IS NULL:2013/08/28(水) NY:AN:NY.AN ID:???
おっと、MSVCR90か
649640: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ランタイムが、正しくインストールされていないようです。

もう少し試行錯誤してみます。
650NAME IS NULL:2013/08/28(水) NY:AN:NY.AN ID:???
http://www7a.biglobe.ne.jp/~kasachan/VCrt_Check.html
これの
※VC のランタイムチェック の補足
かなあ、サーバはあまりいじくりまわさないからなあ。
651NAME IS NULL:2013/09/04(水) 07:02:13.41 ID:???
話題は?
652NAME IS NULL:2013/09/08(日) 20:50:28.78 ID:???
$ postgres --version
見せてほしい。
653NAME IS NULL:2013/09/08(日) 23:33:46.40 ID:???
7.3.4
654NAME IS NULL:2013/09/08(日) 23:48:52.23 ID:???
>>653
ちょっと安心した
postgres (PostgreSQL) 8.4.12
655NAME IS NULL:2013/09/08(日) 23:52:19.41 ID:???
1.2.3
656NAME IS NULL:2013/09/09(月) 09:55:09.03 ID:???
Lotusかよ
657NAME IS NULL:2013/09/09(月) 12:08:48.94 ID:???
9.2.4
658NAME IS NULL:2013/09/09(月) 12:18:59.02 ID:???
Porscheかよ
659NAME IS NULL:2013/09/09(月) 18:13:02.47 ID:???
252
660NAME IS NULL:2013/09/09(月) 23:32:06.27 ID:???
>>656さんの体臭からノネナールを検出
661NAME IS NULL:2013/09/10(火) 03:09:52.86 ID:???
662NAME IS NULL:2013/09/10(火) 08:40:09.41 ID:???
ウリは?
663NAME IS NULL:2013/09/10(火) 18:19:37.26 ID:???
Windowsに先んじてversion 9.3になりました。
664NAME IS NULL:2013/09/10(火) 18:24:34.66 ID:???
ウリって売りかw
9.3 はビューに直接UPDATEかけられるとか
665NAME IS NULL:2013/09/10(火) 18:26:13.62 ID:???
SUMしたVIEWにもUPDATEかけれるのか?
666NAME IS NULL:2013/09/11(水) 04:04:52.58 ID:???
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.
667NAME IS NULL:2013/09/11(水) 09:40:36.68 ID:???
>>666
ようやくOracle 8i並みになったってことか?
668NAME IS NULL:2013/09/12(木) 21:24:15.62 ID:???
>>306
起きろ
669NAME IS NULL:2013/09/12(木) 21:58:40.11 ID:???
pgpool2使ってんだけどさ、障害時はもちろん、復旧時も完全にノンストップってのは出来るもんなの?
postgre鯖とpgpool2鯖はそれぞれ複数台づつあって、全部同時に壊れる事は無いとして。

pgpool2が1台にpostgre複数台ならまだ少し情報あるけど
pgpool2も複数台の構成は全然情報見つからない
670NAME IS NULL:2013/09/12(木) 22:02:12.04 ID:???
イミフ。ハートビートがあるじゃん。
671NAME IS NULL:2013/09/12(木) 22:49:54.13 ID:???
PostgreSQLは、そのへんのtoolが不安定というか、雑魚っぽいのが何種類もあるのが
ネガティブイメージなんだよな。
Replicationみたいに、どれかを本体に組み込んで欲しいよな。
672NAME IS NULL:2013/09/13(金) 04:28:43.65 ID:???
なんでピジプーを本体のフロントエンドに入れないかねぇ。
インストール時に選択できるようにすればいいのに。
673NAME IS NULL:2013/09/13(金) 20:32:33.93 ID:???
そんな怪しいプログラムが好きなのは、日本人のなかのごく一部だからなんじゃないの?
あの会社や、その会社の関係者だけだろ。
674NAME IS NULL:2013/09/15(日) 04:30:46.50 ID:KpcWKA8r
あの会社だけ〜とかほんま性格悪いわ〜、引くわ〜。
ど〜せゾウさん関係にたいした知識もなく言ってんだろ〜?老害だわ〜。
675NAME IS NULL:2013/09/15(日) 08:53:24.80 ID:???
みんなひどいわ
676NAME IS NULL:2013/09/18(水) 03:09:17.82 ID:???
データベーサー同士仲良くやりたまえ
677NAME IS NULL:2013/09/18(水) 07:49:02.35 ID:???
ダースベイダー?
678NAME IS NULL:2013/09/18(水) 20:42:14.61 ID:???
こー こー こー 
679NAME IS NULL:2013/09/19(木) 09:23:20.82 ID:+7crO47r
postgresqlのGIN検索が2文字だとインデックス使ってくれない問題って治ってます?
textsearch-ja使ってるんだけど2文字検索遅すぎなんだがぁ
680NAME IS NULL:2013/09/23(月) 04:16:05.35 ID:e8g5Zb/W
NoSQL使わずこれ使う理由ある?
681NAME IS NULL:2013/09/23(月) 07:19:13.20 ID:???
基本的に目指す方向性が違うだろ
用途によるとしかいえない
682NAME IS NULL:2013/09/23(月) 08:11:55.49 ID:e8g5Zb/W
すまん初めて使ってみるんだデーターベース
オンラインゲーを作りたいんだけど、保存するのはユーザー情報と各種ゲーム内パラメーター
Postgresじゃ厳しいよね?
683NAME IS NULL:2013/09/23(月) 08:36:40.57 ID:???
うん、かなり厳しい。





Postgres じゃなくて、君の方が
684NAME IS NULL:2013/09/23(月) 09:41:39.55 ID:???
KVSで済むならまあそれでいいんじゃない?

実はデータベースが本体で、サーバの提供する機能とか
ゲームクライアントはそのデータベースのデータを書き換える
補助ツールにすぎない、と考えることもできる。
685NAME IS NULL:2013/09/23(月) 13:35:31.32 ID:???
>>684
おーまさにそんな感じだ
とりあえずmongodbでやってみるよ
686NAME IS NULL:2013/09/23(月) 17:29:50.24 ID:???
>>682
バンバン稼ぐつもりなら、俺なら最初からオラクル使っとくな。
最初の内はXE使って、順調に行けばAmazonのRDSとかを使う前提で。
稼げるかどうかわからないなら、PostgreSQLにしとく。
687NAME IS NULL:2013/09/23(月) 18:20:01.49 ID:e8g5Zb/W
>>686
結局SQL推しか
688NAME IS NULL:2013/09/23(月) 18:29:42.23 ID:???
SQLは使いこなせる人にとっては実に便利だからな。
使いこなせねー奴は、流行りの言語やツール使っとけば良いよ。
689NAME IS NULL:2013/10/01(火) 16:04:14.65 ID:???
話題は?
690NAME IS NULL:2013/10/01(火) 17:41:02.14 ID:QrPbc1sj
PostgresQL + Redis が最強だと思う今日この頃
691NAME IS NULL:2013/10/07(月) 13:46:31.99 ID:m7Wu6fio
CentOS5で、yumから8.1をインストールしてあります。
デフォルトでpg_dumpがインストールされていると思ったのですが、入っていませんでした。
pg_dumpだけをインストールするにはどうすればいいでしょうか?
692NAME IS NULL:2013/10/07(月) 14:14:07.77 ID:???
>>691
たぶんpostgresql-serverパッケージしかインストールされていないから
yum install postgresql
としてクライアントのパッケージをインストールする必要がある
693NAME IS NULL:2013/10/07(月) 17:28:22.73 ID:ANQ3Kcai
>>692
ありがとうございます。
解決しました!
694NAME IS NULL:2013/10/07(月) 17:33:26.41 ID:???
>>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
...
みたいに検索してくれる。
695NAME IS NULL:2013/10/08(火) 07:21:42.78 ID:???
蛇足だ
スレッドの疎結合を徹底させろ
yumの話はyumのスレでやらせろ
696NAME IS NULL:2013/10/08(火) 16:52:30.94 ID:???
データフォルダをサブバージョンのリポジトリに入れるのはナンセンスですか?
697NAME IS NULL:2013/10/08(火) 17:10:29.77 ID:???
>>696
別にそれで要求を満たしてるなら、それでいいよ。
698NAME IS NULL:2013/10/08(火) 17:16:35.20 ID:???
データに破損など何かあったとき
同じ環境ならサブバージョンで元に戻せるのですか?
699NAME IS NULL:2013/10/08(火) 17:35:11.61 ID:???
いつコミットするんだ
WALログ管理するだけでいいだろ
700NAME IS NULL:2013/10/08(火) 17:54:06.86 ID:???
ファイルシステムのスナップショット使えよ。
701NAME IS NULL:2013/10/08(火) 18:19:52.48 ID:???
>>698
コールドバックアップなら元に戻せる
702NAME IS NULL:2013/10/08(火) 21:00:41.76 ID:???
ありがとうございました
703NAME IS NULL:2013/10/09(水) 22:00:02.50 ID:???
psql -v で変数渡しながらsqlを流し込んだら
ローカルホストだとうまくいくんだけど
リモートホストだと2バイト文字がうまく流れませぬ。

対処方法とかない??
704NAME IS NULL:2013/10/10(木) 12:03:08.03 ID:???
>>703
client_encoding合ってる?
705703:2013/10/10(木) 13:13:07.67 ID:???
>>704
ローカル、リモート共に同じ環境なので特に設定変更してませんが…
どこか設定した方がいい場所とかありますか?
706NAME IS NULL:2013/10/10(木) 17:08:22.26 ID:???
ワラタ
707NAME IS NULL:2013/10/10(木) 18:04:35.64 ID:???
>>703
「psql -l」で、データベースのencodingが見られる。
あと、ローカルやリモートのOSやLANGなんかがわからないけど、
psqlの\encodingの設定とかが必要なのかも。
http://www.postgresql.jp/document/9.2/html/app-psql.html
708NAME IS NULL:2013/10/11(金) 09:53:59.22 ID:???
ネタなの?本気だとしたら(ry
709707:2013/10/11(金) 14:17:57.55 ID:???
>>708
ひょっとして俺のこと?
何かおかしい?
710NAME IS NULL:2013/10/11(金) 20:24:08.45 ID:???
>>707
707氏はまともだろ?俺もそうしてるけど。。。
SET client_encoding TO 'SJIS'; みたいに。
711NAME IS NULL:2013/10/12(土) 06:34:56.97 ID:9bkwkB92
>>690
hstoreじゃRedisの代替はやっぱり厳しいかな?
712NAME IS NULL:2013/10/14(月) 03:38:24.85 ID:???
知らん。Redisしか使ってない
713NAME IS NULL:2013/10/31(木) 19:48:50.61 ID:???
Visual Studio 2010 のデータベースエクスプローラで PostgreSQL にOLE DB接続する
方法を教えてください。
(ODBCは、PCに設定が必要なのでOLE DBで)

Npgsqlを使用してOLE DB接続しようとすると、
 複数ステップのOLE DB の操作でエラーが発生しました。
と表示されてしまうのです。

宜しくお願いします。
714NAME IS NULL:2013/11/01(金) 13:42:33.66 ID:???
PCに設定しろよ
715NAME IS NULL:2013/11/01(金) 19:05:37.69 ID:???
Npgsqlを使用すんならクライアント個々のPCの設定なんていらないが
716NAME IS NULL:2013/11/03(日) 21:40:27.09 ID:WS2i8ToB
事前面接の事実をおさえて職安法44条で刑事告訴
http://wiki.algomon.com/wiki/%E4%BA%8B%E5%89%8D%E9%9D%A2%E6%8E%A5
717NAME IS NULL:2013/11/04(月) 09:50:46.60 ID:???
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コマンドが終了してほしいです。
こういうことはできますか。よろしくお願いします。
718NAME IS NULL:2013/11/04(月) 10:33:58.83 ID:???
719NAME IS NULL:2013/11/04(月) 12:27:00.52 ID:???
720NAME IS NULL:2013/11/04(月) 12:44:43.26 ID:???
>>719
多少迷ったけどバージョンが分からんかったから古いの出しとけばええやろ的な。
721NAME IS NULL:2013/11/04(月) 12:57:57.87 ID:???
>>720
しかし、なんぼなんでも 7.2 はないわなw
722NAME IS NULL:2013/11/04(月) 15:13:13.86 ID:???
>>718,719
そのページはいろんな制御構文があるのでどれを使えばいいのでしょうか。
・エラーがあったらreturnする
・エラーがあるかどうかif文でたしかめる
723NAME IS NULL:2013/11/04(月) 15:21:20.18 ID:???
実行する環境は?
pgbashとか使えそうな気が
724NAME IS NULL:2013/11/04(月) 15:28:17.81 ID:???
>>722
どれを使えばいいのかは作ってる本人にしか分からんよ。
例えば1つ目の処理を行ってエラーが出たらreturnするとか、もしくは別の処理するのかとか、そんなの仕様次第。
分からんなりに一つ一つ試していけばいいんじゃね?
725NAME IS NULL:2013/11/04(月) 15:30:15.96 ID:???
>>721
実行環境が7.2かもしれんし(震え声
一番上のほうに出したgoogle先生が悪いということで一つ。
726NAME IS NULL:2013/11/05(火) 01:02:17.27 ID:???
え? それって、PL/pgSQL の説明だよね
psql コマンドで 一連のSQL 流し込む時に どうやったら その場で中止できるか、が元の質問でしょう?

たぶん ON_ERROR_STOP 環境変数を (適当に) 設定すればいいんじゃないかな
727NAME IS NULL:2013/11/05(火) 07:14:06.37 ID:???
>>724
えー?
ちゃんと>717で
> ここで、どれかのSQL文が失敗したときに、後続のSQL文をスキップする機能はありませんか。
> 希望としては、SQLがエラーになった時点でメッセージを出してpsqlコマンドが終了してほしいです。
って書いてますよね?これで伝わらないのかよ…
728NAME IS NULL:2013/11/05(火) 07:44:06.17 ID:???
>>726
ありがどうございます!
\set ON_ERROR_STOP ON を先頭につけたら、
エラーが発生した時点で終了するようになりました!
まさに希望する動作そのものです。
ttp://stackoverflow.com/questions/4480381/postgres-sql-fail-on-script-error
重ねて、ありがとうございました。

#それに比べて、的外れな回答を上から目線でする>724って・・・
#これだからエンジニアはコミュ障(r
729NAME IS NULL:2013/11/05(火) 09:01:39.23 ID:???
>>727
おおすまんな、それ見落としてたわ。
730sage:2013/11/05(火) 19:52:33.00 ID:yhatM0Qn
今週末のPostgreSQL Conferenceに行く奴いる?
731NAME IS NULL:2013/11/12(火) 14:38:33.22 ID:???
postgresqlでクラスタ組むならpgpool2が安定?
732NAME IS NULL:2013/11/12(火) 14:59:53.32 ID:???
クラスタってなにができればクラスタなの?
レプリケーションなら本体だけでできるし
733NAME IS NULL:2013/11/12(火) 17:10:06.33 ID:g6OOuhKa
クラスタの種類によるよ
734NAME IS NULL:2013/11/13(水) 08:45:21.37 ID:???
ちょっとしたExcel製の社内システムをDB化したい
→Oracleは高いし、無償版は容量制限がねぇ…
→Postgresにしよう、でも壊れたら業務が止まるんでしょ?
→じゃあ多重化しよう、ググったらpgpool2ってのがいいらしいぞ ←イマココ

社内システムだから切り替えは手動でも構わないので、
標準のストリーミングレプリケーションを使っての
Active-Standbyでも十分っぽいですね。
735NAME IS NULL:2013/11/13(水) 09:08:05.49 ID:???
そのくらいの規模だと、多重化よりもむしろバックアップのほうが大事な気がする。
停止時間よりも、ハードディスク故障かアプリ側のバグでの論理的なデータ破壊が怖そう。
レプリケーションを使うにしろ、そのあたりも考えたほうがいいよ。
736NAME IS NULL:2013/11/13(水) 11:48:12.27 ID:???
「ちょっとしたExcel製の社内システム」なのに、Oracle無償版の容量制限(11GB)に引っかかるのか?
737NAME IS NULL:2013/11/13(水) 12:02:24.10 ID:???
>>734
前提が全ておかしい
「壊れたら業務が止まる」のはどのDBでもいっしょ
738NAME IS NULL:2013/11/13(水) 12:05:19.59 ID:???
ちょっとしたExcel製の社内システムなんかどうでもいいわ
739NAME IS NULL:2013/11/13(水) 13:50:55.92 ID:???
Oracleでも壊れるときは壊れるし
740NAME IS NULL:2013/11/13(水) 14:27:41.05 ID:???
休日や夜に誰も使ってないシステムだとしても
自分が有休取ってる時に止まって電話がかかってこない程度には
しておいたほうがいいな
741NAME IS NULL:2013/11/13(水) 14:31:17.29 ID:???
ひょっとしてすごい Excel マスターがいて、複数の Excel が互いに連動することでフォールトトレラントになっているシステムかもしれない (w
742NAME IS NULL:2013/11/13(水) 17:06:05.24 ID:???
壊れたらExcelでやればいいじゃん
って気はしたけど、どうでもいい
743NAME IS NULL:2013/11/13(水) 19:33:11.18 ID:???
734ですが、1個1〜5MBくらいのExcelファイル100個/1日を
日次トランザクションデータのフォルダに置いて、
プログラムからそれをテーブルっぽく参照・更新している
と言う画期的?なシステムなので、RDB化したいのです…。
色々皆さんのおっしゃるとおりおかしなシステムなので、
もうちょっと前提条件から詰めなおしてきます。
744NAME IS NULL:2013/11/13(水) 22:00:26.49 ID:???
その腐海はそっとしておくべき
下手にいじると大海嘯が起きるぞ
745NAME IS NULL:2013/11/13(水) 23:08:34.25 ID:+r/WxRJl
確かにデータベースとしての側面はあるけどさ。。
前任?はそこまでの規模になる前にどうにかすべきだったね。

まぁ、一回でRDBMSに移行しようとせずに、部分的にはじめるのが吉。
746NAME IS NULL:2013/11/14(木) 06:00:58.70 ID:???
ポスグレにしてexcelみるfdwをつくるw
747NAME IS NULL:2013/11/14(木) 20:13:03.46 ID:???
>>736
プロが作れば100MBぐらいで収まるものでも、
アホが作ると11GBぐらいすぐに無くなっちゃうんだよ。
748NAME IS NULL:2013/11/15(金) 23:03:11.62 ID:6G3KwFUp
9.3.1はインストールすら出来んorz
XPでも7でも結果は同じ、\dataの中のポスグレconfが見つからないってさ・・・
ググリまくって丸1日やったけどもう疲れたあきらめて寝ますzzz
あ・・・上のほうに何か書いてあるっぼい?けどもう眠いやw明日見ヨット
749NAME IS NULL:2013/11/16(土) 08:12:06.32 ID:???
>>748
> \dataの中のポスグレconfが見つからないってさ・・・

これ某システムのポスグレで発生して困ってる
750NAME IS NULL:2013/11/16(土) 20:04:38.45 ID:C6OwC7TP
よっぽど切羽詰ってるんだろうけど、まぁあきらめて寝てるといいよ。
もしくは情報を出そう
751NAME IS NULL:2013/11/16(土) 22:45:41.80 ID:???
>>750
ああ、すまん
普通に動作してたんだが、ちょっと不注意でディスクフルにしてからおかしくなったんよ
仮想マシンでスナップショットとってて、そこまで巻き戻して今は正常に動作してるから切羽詰まってる訳じゃないんだが、再発するとやだから誰か似たような経験した奴いないかなぁって
postgresql.conf はちゃんとあるし、権限も問題ないし、原因が全く特定できない
752NAME IS NULL:2013/11/24(日) 20:13:40.54 ID:???
PostgreSQLのSUBSTR関数のstart,lengthって、バイト数ですか?
それか、文字セットに応じた文字数をカウントしてくれてますか?
753NAME IS NULL:2013/11/24(日) 21:45:19.99 ID:???
>>752
文字数。EUCでもUTF8でも「あ」は長さ1としてカウントされる
754NAME IS NULL:2013/11/24(日) 22:52:31.59 ID:???
>>753
ありがとうございます。安心しました。
やっぱりPostgresは日本語(マルチバイト?)対応最強ですね。
心強いです
755NAME IS NULL:2013/11/25(月) 15:39:37.81 ID:???
どこに質問しようか迷ったんですが、ここが一番まとも?で初心者を蔑んだりされないんで、ここで質問させめ下さい。
PostgreSQLとPHPで私が組んだ業務システムがあります。
この度、多言語化(とりあえず中文)してくれとの要望が出てきたのですが、今、OS(Linux)もPostgresもPHPも全て文字セットはEUC-JPで統一してます。
やはり全てをUTF-8とかに変換する必要がありますか?
現在のEUCで格納されてるPostgresのデータをUTFに変換することは可能ですか?
756NAME IS NULL:2013/11/25(月) 15:51:38.28 ID:???
DB止められるなら、ダンプ-リストアでいけるよ
クライアントの文字コード指定できるしね。
pg_upgradeとかリカバリーとかは使えない

何かとあるからUTF8に統一した方がいいと思うよ
757NAME IS NULL:2013/11/25(月) 15:52:24.98 ID:???
>>755
必要性はちとわからんが

変換方法は
pg_dumpでエンコーディング指定してダンプを取ってリストアすればいけるよ
758757:2013/11/25(月) 15:53:05.91 ID:???
すまん被った
759NAME IS NULL:2013/11/25(月) 21:44:00.13 ID:???
>>756
>>757
pg_dump の ーE オプションで encoding を指定して出力できることを確認しました。
ありがとうございます。
話はそれますが、私は1.0未満のバージョン時代から Linux を利用してきた経緯から、ずっと EUC-JP で通してきたのですが、いまでは端末が Mac、サーバが Linux になってしまい、けっこう苦労してます(笑)
途中何度も UTF に移行しようと思ってたんですが、のびのびになってました。
こんな大規模で国際的なシステム(笑)になる前に移行しておけば良かった…
申し遅れました。私 >>755, >>752 です。
760NAME IS NULL:2013/11/25(月) 23:00:07.84 ID:1RY9W7N4
kernel 1.0 未満?
761NAME IS NULL:2013/11/25(月) 23:14:30.82 ID:???
>>760
そうですよ
たしか 0.96
762NAME IS NULL:2013/11/25(月) 23:41:11.09 ID:???
へぇぇ。大先輩だ。
まぁ、なぜEUC-JPで通してしまうようなことをしてしまったかは、過ぎたことなので置いといて、
ちょこちょこリフレッシュしたほうが何かと苦労せずに済むと思います。
763NAME IS NULL:2013/11/25(月) 23:52:06.52 ID:???
スレチになってしまい申し訳ありませんが、
当時、Linux 上で日本語を使う場合は、JE というものを別途インストールする必要があり、それが EUC-JP 前提だったんですよ。
けっこう長くそういう時代が続きました。
764NAME IS NULL:2013/11/26(火) 14:17:43.07 ID:???
>>763
LinuxがFreeBSDにだいぶ劣っていた時代だな。
日経にネガキャンされてJEがない=日本語が使えないと誤解をばらまかれたのは
FreeBSD陣営としてはかなりの痛手だった。
765NAME IS NULL:2013/11/26(火) 15:00:45.15 ID:???
PostgreSQL 使いは、FreeBSD 使いが多い気がする
766NAME IS NULL:2013/11/26(火) 15:46:48.68 ID:???
俺 linux 好きですけどぉ
767NAME IS NULL:2013/11/26(火) 17:38:40.32 ID:???
>>764
商売けがなかったのが敗因だろう
768NAME IS NULL:2013/11/27(水) 01:54:33.60 ID:???
最近ポスグレの案件増えてきた感あるけど、海外で流行ってるのが遅れて来てるのかな。
769NAME IS NULL:2013/11/27(水) 15:06:09.34 ID:???
>>768
海外で流行ってるの?
いまだに日本だけだと思ってた
ただ、やっぱりなんか注目されてきた気はする。
MySqlを使い続けることへの問題に気がついたのかな?
770NAME IS NULL:2013/11/27(水) 15:26:48.73 ID:???
海外で流行ってるのは知らなかったけど、いいことだね。
コミュニティが活性化するのは偉大な進化をもたらすかもしれない。
771NAME IS NULL:2013/11/27(水) 15:31:37.13 ID:???
今のでも全く不満はないけどね
オラクルと性能比較とかさせられたよ、蔵に
全く問題なかった
誰もがしってる世界的な通信キャリアに導入した。
まぁ、ある一部門だけど
772NAME IS NULL:2013/11/27(水) 15:34:25.29 ID:???
MySQLはいろいろ逆風で
PostgreSQLはいろいろ順風だな
773NAME IS NULL:2013/11/27(水) 15:35:44.57 ID:???
ネガキャンが酷かったからね
ある陣営からの
774NAME IS NULL:2013/11/27(水) 15:48:45.23 ID:???
プロプライエタリなソフト以外で本当に尊敬できるプロジェクトの一つってか筆頭だな、Postgres
775NAME IS NULL:2013/11/27(水) 16:16:30.58 ID:???
776NAME IS NULL:2013/11/27(水) 16:17:52.71 ID:???
おっと、変なキーワードが混ざってた
こっち
http://www.google.co.jp/trends/explore?q=postgresql#q=postgresql&cmpt=q
777NAME IS NULL:2013/11/27(水) 16:36:15.96 ID:???
DB関係は何検索しても似たり寄ったりな気がw
778NAME IS NULL:2013/11/27(水) 17:55:28.90 ID:???
2005年ごろより下って事はないと思うけど
779NAME IS NULL:2013/11/28(木) 02:32:51.84 ID:???
AWSのpostgresサポートで検索数上がったはずなんだけど、トレンドに反映されてないね。

>>777
傾向はMySQLも同じだね。
ちなみにHadoopは激増してる。

しかし、postgresもMySQLもCubaが一番興味持ってるつうのは
どういう事なんだろ?
780NAME IS NULL:2013/11/28(木) 18:47:41.05 ID:???
>>773

どの陣営?
781NAME IS NULL:2013/11/29(金) 22:59:22.38 ID:???
>>779
アメリカの輸出管理規制でOracleとかが使えないからかな?
782NAME IS NULL:2013/11/29(金) 23:07:48.47 ID:???
そうゆうこと
783NAME IS NULL:2013/11/30(土) 21:50:13.42 ID:???
>>781

表向き輸出できないけど、実際は入ってるよ。
ウィンドウズもバリバリ使ってるし。
784NAME IS NULL:2013/11/30(土) 22:03:14.91 ID:???
ウィンドウズは違法コピー版やな
Oracleも?
785NAME IS NULL:2013/11/30(土) 22:06:31.62 ID:???
>>783
そんな当たり前のことをドヤ顔で言われても…
786NAME IS NULL:2013/12/01(日) 02:50:48.25 ID:???
>>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:???
そうゆうこと

なんて書く奴もいるし
787NAME IS NULL:2013/12/01(日) 09:23:51.79 ID:???
そりゃシリアでもOracle売ってたぐらいだしな。
788NAME IS NULL:2013/12/01(日) 10:35:41.14 ID:???
たとえシリアだろうとオラ来るで
789NAME IS NULL:2013/12/01(日) 11:39:28.75 ID:???
北朝鮮でも
790NAME IS NULL:2013/12/01(日) 11:54:05.01 ID:???
北は案件が無いだろう、、、オラ来ない
791NAME IS NULL:2013/12/01(日) 12:04:32.46 ID:???
>>790
あるでしょ?普通に
いまどきDBMSを使わないデータ処理って考えられない
てか、ネタ?
792NAME IS NULL:2013/12/01(日) 12:09:00.86 ID:???
ロケット発射の様子見ても、、あれじゃあねえw
793NAME IS NULL:2013/12/01(日) 12:16:16.46 ID:???
南朝鮮なんてロケット自体あげられないじゃん
北のほうがずっとマシだよ
794NAME IS NULL:2013/12/01(日) 12:45:32.83 ID:???
南は軍でも違法コピー版使ってたし、北も南も著作権に関しては同レベルだね(笑)
795NAME IS NULL:2013/12/01(日) 22:47:31.69 ID:???
ほんの50レスほど前にRDBMS使って無い業務システムの例が上がってるわけですが。。。
796NAME IS NULL:2013/12/01(日) 23:31:02.04 ID:???
>>795
で?
797NAME IS NULL:2013/12/02(月) 00:18:27.76 ID:???
>>796
ww おめーこそ、で?なにがしたいの?w
798NAME IS NULL:2013/12/02(月) 00:48:06.13 ID:???
>>795
RDBMSに移行するタイミングを逃した業務システムの例じゃないですかー!
799NAME IS NULL:2013/12/02(月) 02:07:42.16 ID:???
>>797
ただのあほだったか
800NAME IS NULL:2013/12/06(金) 13:51:20.58 ID:???
PostgreSQL Maintenance Releases: 9.3.2, 9.2.6, 9.1.11, 9.0.15, and 8.4.19
http://www.postgresql.org/about/news/1492/
801NAME IS NULL:2013/12/06(金) 14:32:36.78 ID:???
はぁ?9.3とかいつ出たんだよと思ったら、9/10に出てたのか。
俺情報に疎すぎ。
802NAME IS NULL:2013/12/06(金) 15:00:28.45 ID:???
8.4から9.1にアップグレードしたいんだけど、この年末年始に8時間しか停止できない。
失敗は絶対に許されないから怖い。
ちなみにDBもアプリも全てソースからビルドしてます。
過去、8.1から8.4に更新した経験が一度あるだけ
803NAME IS NULL:2013/12/06(金) 15:05:31.34 ID:???
>>802
pg_upgradeあるから前より楽よ
804NAME IS NULL:2013/12/06(金) 18:02:15.77 ID:???
>>802
どうやっても無理目、がんばってね
805NAME IS NULL:2013/12/06(金) 21:03:59.54 ID:b4kCe0hp
>>679
N-gram系ならpg_bigm使えばいいかも。
今日、1.1がリリースされたよ。
806NAME IS NULL:2013/12/06(金) 23:45:07.69 ID:???
あわわ昨日待ちきれずに9.3.1にMLで流れてたパッチ当ててリリースしたばっかなのに!
807NAME IS NULL:2013/12/07(土) 03:25:51.99 ID:???
>>804
無理なら頑張らせるなよ
808NAME IS NULL:2013/12/07(土) 09:53:37.76 ID:???
8.1から9.3やったよ
ちゃんとテストして問題点潰せば大丈夫
8.4からならそんなに大きな問題ないでしょ
809NAME IS NULL:2013/12/07(土) 12:19:24.59 ID:???
DB容量によるよな
8.1から8.4のときどれくらいかかったんかね
810NAME IS NULL:2013/12/07(土) 12:30:21.24 ID:???
これWindows2000で使いたいだけど、どのバージョンが使える?
811NAME IS NULL:2013/12/07(土) 13:15:19.85 ID:???
ロール(ユーザー)の権限設定に関して、
以下のような場合、
-----------
データベース:
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でコマンドによる設定でも、実現できれば構いませんが、
どうしたら設定できますでしょうか?
812NAME IS NULL:2013/12/07(土) 13:29:22.69 ID:???
9.0以降は、XP以降のようだね。

ttp://wiki.postgresql.org/wiki/Running_%26_Installing_PostgreSQL_On_Native_Windows/ja

Win2000で、クライアントとして使ったことがあるのは、8.2.4
サーバーとして(Win2000Serverのことではない)でもいけるんじゃないかな。

サポートはしてないけど、動作する可能性がないわけではないから、
ここで聞くよりは、インストールして、試してみればいいだけのこと。
813810:2013/12/07(土) 14:41:35.00 ID:???
>>812
8.2.4ってどこにある?
http://www.enterprisedb.com/products-services-training/pgdownload#windows
↑の8.4.19と8.3.23を試したけど、インストーラが起動しなかった。
814NAME IS NULL:2013/12/07(土) 15:38:46.07 ID:???
検索してみたら。
8.2.0は、あったけど。
信頼できる先かどうかは、不明。
postgresql-8.2.0-1.zip

8.2.4 は、自分の手元にあるかな、たぶん。
815810:2013/12/07(土) 16:07:59.00 ID:???
>>814
ググったらここにあった
http://www.postgresql.org/ftp/binary/v8.2.23/win32/

うまくインストールできて、起動して接続も確認しました。
いろいろいじって楽しんでみます。
ありがとう。
816NAME IS NULL:2013/12/07(土) 16:16:33.67 ID:???
>>815
8.3からは、Win2000はダメなのかもね。

ちなみに、
v8.2.23 がそうだったか、どうか忘れたけど、
ODBCにバグがあるバージョンがあった。
817NAME IS NULL:2013/12/07(土) 16:22:35.10 ID:???
v8.1.5 あたりにODBCのバグみたいだね。
8.2は大丈夫でしょう。
818NAME IS NULL:2013/12/07(土) 17:31:46.99 ID:???
さすがに先進ユーザが多いだけあって、
Windows 2000とか使ってるんだな。
819NAME IS NULL:2013/12/07(土) 18:40:50.37 ID:???
わかりにくいボケなのかマジなのか判断しかねる
820NAME IS NULL:2013/12/07(土) 18:54:57.17 ID:???
うちはまだWindows7。
100が出たら変えようと思うんだけど、なかなかでないから98で妥協でもいいのかな。
821NAME IS NULL:2013/12/07(土) 22:53:50.64 ID:???
>>818
XP以降のライセンス縛りが無いから、
W2Kは仮想マシン上での評価/学習用途で未だに活躍中
ちなみにW2Kが実機インストールできるPCはすべて引退した

だから、この8.2情報は個人的にとても嬉しかったりする
PgはLinix/OSX上ばかりで動かしていたけど、
Winでも試してみようかなぁ....
822NAME IS NULL:2013/12/07(土) 23:56:02.58 ID:???
>>821
どこの世界の話だろう。
評価するなら評価版使えばいいのに、不思議なことをいうなぁ。
823NAME IS NULL:2013/12/08(日) 00:38:22.22 ID:???
>>821
Windows2000をいまごろ評価/学習ってどうゆうこと?
評価してどうすんの
学習してどうすんの
824NAME IS NULL:2013/12/08(日) 00:45:23.56 ID:???
そもそもライセンス違反している可能性が高いレスだよな。
普通に評価するならライセンス縛りなんて言葉は出てこない。
…ちなみにライセンス縛りってアクティベーションのことであってる?(ここがもう不安)
825NAME IS NULL:2013/12/08(日) 07:09:04.83 ID:???
2000のメリットはとにかく軽いこと
XPは重い
VMwareではその差があまりにも大きい
826NAME IS NULL:2013/12/08(日) 11:15:44.16 ID:???
古いPC+Win2000で運用するってことじゃないの。

評価用なら、今どき、WinXP以降を、持ってない人はそういないだろうし。
827NAME IS NULL:2013/12/08(日) 13:48:22.82 ID:???
vt-xないならそうかもしんないけど、VMwareがかわいそうだ
828NAME IS NULL:2013/12/08(日) 14:11:29.72 ID:???
>>812ですが、言葉が足りなかったようです

>>822,823
W2Kを評価/学習ではなく、W2K上で動くアプリの評価/学習でした
軽くてアクチの面倒が無いので、W2Kが便利という意味です

>>824
ライセンス的にグレーなのは理解しているのですが、自宅での趣味の範囲なので....
W2Kそのものは(ワレではなく)W98マシンのアプグレ用に購入した正規品です


で、W2Kの話題は板違いなので、この辺で失礼します
お騒がせしました
829NAME IS NULL:2013/12/08(日) 14:12:38.04 ID:???
>>828
>>>812ですが、言葉が足りなかったようです

>>821の間違いでした
830NAME IS NULL:2013/12/09(月) 17:55:06.18 ID:???
もうすぐ2014年だよな?
>>825の書き込み見てると、2005年ぐらいに思えてくる。。。
831NAME IS NULL:2013/12/09(月) 18:23:34.40 ID:???
VMWareの仕組みを知らないで言ってるんだろ。
VM上のXPが重いんだったら実機だってまともに稼働しないよ
832NAME IS NULL:2013/12/09(月) 20:36:32.67 ID:???
>>831
仕組みは知ってても、その仕組みがどういうときに発揮されるかを知らないとこうなるんだなぁ。。
たとえばNorthwoodならXPは快適に動作するが、仮想マシンは重いよね。
833NAME IS NULL:2013/12/09(月) 21:31:36.43 ID:???
いや、もう、今時VM使ってないなんて本当にあるの?
俺の棲息範囲だと、開発もテストも本番も全部VMなんだけど。。。
834NAME IS NULL:2013/12/09(月) 21:45:15.48 ID:???
windowsじゃないだろ
835NAME IS NULL:2013/12/09(月) 22:10:50.83 ID:???
>>833
VMはI/Oの性能や信頼性が怪しいって話も以前は良く聞いたけど、最近は大丈夫なん?
それとも、I/Oがそれほど絡まない用途にお住まい?
836NAME IS NULL:2013/12/09(月) 22:17:35.85 ID:???
ストレージは外に出してるから、ストレージやネットワークの組み方次第では
実機よりよっぽど速いよ。
837NAME IS NULL:2013/12/09(月) 22:20:12.37 ID:???
すげえー
838NAME IS NULL:2013/12/09(月) 22:26:15.67 ID:???
あー、お金をかけられるVMは良いよね
金が無い理由でのVMには嫌な記憶しかないわ。特にDBを置く場合は。
839NAME IS NULL:2013/12/10(火) 03:49:31.22 ID:???
>>838
今は大抵物理HDDを丸ごとマウントできるようになってるよ。
あと、仮想HDDが丸ごとOSのキャッシュに乗っかるサイズに収まるなら、実機より速い。
840NAME IS NULL:2013/12/10(火) 04:38:18.29 ID:???
>>802
うちの本番DBは無理
FusionIOのノード3台でも結構ぎりなのに
仮想化する利点が全く見あたりません
自分の環境がすべてだと思うなよ
オンプレで物理なんてまだまだ普通にある
841NAME IS NULL:2013/12/10(火) 04:39:43.31 ID:???
意味不明なアンカになってもうた
842NAME IS NULL:2013/12/10(火) 08:09:23.92 ID:???
>>840
だれも、全部 VM になってるなんて言ってないぞ
843NAME IS NULL:2013/12/10(火) 09:03:56.57 ID:???
開発する人と運用する人が違うと、I/Oが厳しいシステムになりがちだわな。
うちは運用する時のI/Oまで考えて実装しているから、
普通に実装した他所のシステムに比べるとI/Oは1/10以下で済んでいるじゃないかと思う。
実装中やテスト中でもテーブル定義やプログラムを変更してチューンしてるからな。
1から作り直しは無いけど、2から作り直しぐらいなら時々ある。
受託開発や人月契約じゃありえないだろうけど。
844NAME IS NULL:2013/12/10(火) 15:19:27.00 ID:???
うちのとこ以外性能テストはしない、うちは優秀だから仕事くれ、てか
845NAME IS NULL:2013/12/10(火) 16:24:01.88 ID:???
>>843
> うちは運用する時のI/Oまで考えて実装しているから、

普通でしょ
846NAME IS NULL:2013/12/10(火) 16:45:43.08 ID:???
お前らだけだろ。
普通は動けばOKで納品して、1年経ってからチューニングで金取るもんだろ。
847NAME IS NULL:2013/12/10(火) 17:27:14.25 ID:???
>>846
類は友を呼ぶってやつだね。
君の周りはそんなのばっかりなんだね。
848NAME IS NULL:2013/12/12(木) 15:33:21.99 ID:???
だれだ
WHERE expression = FALSE
の代わりに
WHERE NOT expression
とか書いたやつ
気持ち悪い
849NAME IS NULL:2013/12/12(木) 23:54:21.70 ID:???
>>848
> WHERE expression = FALSE

この方が気持ち悪いわ
850NAME IS NULL:2013/12/13(金) 15:49:51.53 ID:???
I井とかまだユーザー会にいんの
851NAME IS NULL:2013/12/16(月) 05:05:37.41 ID:???
Postgresにチューニングなんて大げさなもんあるの?
メモリの割当てくらいでしょ
852NAME IS NULL:2013/12/16(月) 08:43:04.01 ID:???
SQLの改善ぐらいしとけよ。
853NAME IS NULL:2013/12/16(月) 14:11:05.24 ID:???
つれませんねー
854NAME IS NULL:2013/12/16(月) 17:03:21.43 ID:???
つれないのぅ
855NAME IS NULL:2013/12/16(月) 20:30:45.67 ID:???
まじめに聞いてるだけだと思う
856NAME IS NULL:2013/12/16(月) 22:57:00.50 ID:???
おまえが答えてやれば>>851
857NAME IS NULL:2013/12/30(月) 05:15:47.43 ID:???
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を使用して、
読み込みなおそうとするためです。
858NAME IS NULL:2013/12/31(火) 10:05:48.44 ID:???
都度都度読むか、最初にまとめて読み込むかの違いだろ。
まとめて読むのは、時間もかかるし、メモリも食う。
859NAME IS NULL:2014/01/09(木) 03:36:49.93 ID:???
質問です。
Integer型のフィールドを、ビット単位に 0 か 1 かで判定して select する方法はありませんか?
Postgres8.4 です。
860NAME IS NULL:2014/01/09(木) 04:28:59.70 ID:???
普通に思いつくビット演算をそのまま記述できると思うよ
861NAME IS NULL:2014/01/09(木) 18:29:34.10 ID:???
思いつかないんだろう。
862NAME IS NULL:2014/01/10(金) 00:17:24.52 ID:???
思いつくも何もマニュアル見れば演算子も何もかも全部書いてあるのに
863NAME IS NULL:2014/01/10(金) 12:18:45.34 ID:???
マニュアルを読むという発想に思い至れないんだろ
864NAME IS NULL:2014/01/10(金) 20:25:48.62 ID:???
マニュアルなんかあるのけ?
865NAME IS NULL:2014/01/10(金) 20:47:45.84 ID:???
オートマしかないよ
866NAME IS NULL:2014/01/11(土) 10:18:44.25 ID:???
ATなんて嫌いだな
867NAME IS NULL:2014/01/11(土) 12:45:41.31 ID:???
バッチは有用だろう
868NAME IS NULL:2014/01/11(土) 13:59:28.95 ID:???
勝手に再起動かかるのは嫌
869NAME IS NULL:2014/01/22(水) 13:41:13.55 ID:???
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を生成する(ホスト)プログラムもデフォルト値の具体的な値を知らねば
ならない(定数定義しなければならない)ということを避けたいと思っています。
870NAME IS NULL:2014/01/22(水) 15:55:11.91 ID:???
何が不満なのか分からない。
たぶん何かを勘違いしているだけで、実際不満はないんじゃないかと思う。
871NAME IS NULL:2014/01/22(水) 17:29:58.97 ID:???
>>869
難しいと思う。システムカタログの pg_attrdef でも見に行けば
デフォルト値のハードコードは回避できるかもしれないけど。

(DEFAULT)::row_type をしたいってことなんだろうけど、
ここの row_type はテーブルじゃなくて、複合型という扱いなんだよね。
テーブルの列はデフォルト値を持てるけど、複合型の段階では持てないから
スマートにはいかないな。なんちゃって MERGE での限界なのでは。
872NAME IS NULL:2014/01/22(水) 20:42:29.92 ID:5ZLJW5ib
>>864
PostgreSQLのオンラインマニュアルは
DBMSの中では屈指のわかりやすさだと思う。
日本語文書がすぐに出てくるのもいいところ。
873NAME IS NULL:2014/01/22(水) 22:05:47.73 ID:???
あれがあるから本が出なくなったという噂 ソースおれ
874869:2014/01/22(水) 22:37:41.08 ID:???
>(DEFAULT)::row_type をしたいってことなんだろうけど、

そう、そんな感じの何かの手段が有れば、変更に対しての弱さを
一種類減らせるので、手段が有れば…と検索したりしましたが…でした。

ありがとうございました。>871
875NAME IS NULL:2014/01/23(木) 03:01:57.90 ID:???
どういうときにそれが欲しくなるんでしょう。
insert → defaultが使われるから問題ない(ですよね?)
upadte → 更新したい値を設定するから、default値は関係ない(ですよね?)

どっちかがはずれなんだと思うんですけど、分からないです。
876NAME IS NULL:2014/01/23(木) 03:03:15.39 ID:???
あ、もしかして全カラムを書いて、::t_tblってしなければカラム名参照できないって話?
なわけもないですよね…orz
877NAME IS NULL:2014/01/23(木) 10:46:46.97 ID:???
>>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) のペアだけを作ってもいい。
878869: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
単に定義はなるべく一ヶ所にしたい。そうでないと仮に仕様が変わったときに…
というようなことです。
ただまあ、データ受け取ったプログラム側で「このカラムがデフォルト値だったら…」
なんて処理があったら、結局同じことではありますが。
879NAME 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です
880NAME IS NULL:2014/01/23(木) 18:08:26.87 ID:2Sh6JlGf
スーパーユーザーで戻っちゃうのは自己解決しました
postgresql.confで設定してやらないと戻っちゃうんですね
881NAME IS NULL:2014/01/23(木) 22:46:49.99 ID:???
一意制約(UNIQUE制約)について質問です。

次のようなテーブルが有ります。
テーブル "支払伝票"
カラム | 型
---------------------------
番号 | serial
支払先 | integer
金額 | integer
支払日 | date デフォルト now()

同じ月に同一の支払先を重複させないようにしたいです。
例えばこんな感じで…
# ALTER TABLE 支払伝票 ADD constraint 支払月 unique(女子番号,to_char(支払日,'YYYYMM'));
もちろんエラーになりますが。
支払月に相当する列を追加するしか方法はないですか?
882NAME IS NULL:2014/01/23(木) 22:48:41.34 ID:???
>>881
誤記です
× ALTER TABLE 支払伝票 ADD constraint 支払月 unique(女子番号,to_char(支払日,'YYYYMM'));
◯ ALTER TABLE 支払伝票 ADD constraint 支払月 unique(支払先,to_char(支払日,'YYYYMM'));
883NAME IS NULL:2014/01/23(木) 22:51:15.91 ID:???
>>881
それ以前に、1歴月に1回しか支払えないってのは、仕様上のバグだと思うんだが。
実際の支払日を使ってしまうと、月末締めなら、例えば今月なら1/4, 1/31の2回支払日があるから駄目だろ。
884NAME IS NULL:2014/01/23(木) 23:00:35.07 ID:???
>>883
ありがとうございます。
実際には末締めで翌月10日(以降)の支払いなので1歴月に2回支払うことはないんです。
支払先が多くて複数の担当者が店頭で現金払いしているので、間違い(二重払い)が多くて困ってます。
885NAME IS NULL:2014/01/23(木) 23:22:59.06 ID:???
支払月 フィールドを増やす
値はトリガーとかでセットすればいいんじゃね
886NAME IS NULL:2014/01/23(木) 23:26:55.60 ID:???
>>885
そうですね、
変な小細工を考えるよりそれが一番良さそうです
ありがとうございました
887NAME IS NULL:2014/01/24(金) 10:11:25.55 ID:???
>> 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 で。
888NAME IS NULL:2014/01/24(金) 11:01:15.65 ID:???
>>887
ありがとうございます
すばらしい!
新しく列、支払月を追加すること無く、以下のUNIQUE INDEXで見事に出来ました。

CREATE UNIQUE INDEX 支払月 ON 支払伝票 (
支払先,
CAST(extract('year' from 支払日) AS smallint),
CAST(extract('month' from 支払日) AS smallint));

PostgreSQL 奥が深いです。まだまだ勉強します。
ありがとうございました。
889NAME IS NULL:2014/01/24(金) 21:13:09.87 ID:???
>>884
そんなところで、支払日から年月抽出してUNIQUE INDEX作っても、使えるシステムにはならないと思うんだ。
890NAME IS NULL:2014/01/24(金) 23:35:40.77 ID:???
>>889
わからんけど、店頭のスタッフにタブレットでも持たせるんじゃない?
891NAME IS NULL:2014/01/25(土) 00:35:22.85 ID:???
会社の数だけ仕事のやり方があって、それぞれみんな違うんだから、
そんなこと言ってもしょうがないだろ
だいたい SQL や Postgres と関係ないし
余計なお世話だわな
892NAME 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
;
894NAME IS NULL:2014/02/01(土) 13:49:47.40 ID:???
お世話になります。
create temp table で作ったテーブルなんですが、明示的に drop table しなくてもセッションが切れたら自動的に drop されるんですよね?
PHP から扱ってるんですが、どうもログを見ると drop されてないケースがたまにあるみたいで、なんで?って思ってます。
セッション毎に create temp table する前に drop table したほうがいいんですか?
warning はでますけど
895NAME IS NULL:2014/02/01(土) 15:04:56.72 ID:???
>>894
セッション切れてないんじゃない?
pg_pconnect使ってるとか。
896NAME IS NULL:2014/02/01(土) 21:06:00.13 ID:???
postgreはよく知らんのだが、postgreのtemporary tableって、勝手にdropしてくれるの?
897NAME IS NULL:2014/02/01(土) 22:50:19.70 ID:???
むしろtemporary tableを接続終了時、勝手にdropしないDBってなに?
898NAME IS NULL:2014/02/02(日) 20:45:10.93 ID:???
え?
899NAME IS NULL:2014/02/02(日) 22:27:13.45 ID:???
えっ、え?!
900NAME IS NULL:2014/02/03(月) 01:36:24.32 ID:???
>>895
遅くなりましたが、ありがとうございました。
ひょっとしてそれが原因かも知れないです。
pg_pconnect使ってます。
明日(月曜日)試して報告します
901NAME IS NULL:2014/02/03(月) 02:07:12.81 ID:???
>>897
dropしないDBMSあったと思う。
テーブルの定義は事前に用意しておくんだけど、内容はセッションごとに空からはじまるようなの。
902NAME IS NULL:2014/02/03(月) 08:01:54.91 ID:???
>>901
それが普通じゃないのか?
903NAME IS NULL:2014/02/03(月) 09:02:40.37 ID:???
oracleぐらいしかしらないな
904NAME IS NULL:2014/02/03(月) 10:06:40.54 ID:???
>>901
事前に用意しておくって、そんなのだったら、一時テーブルじゃないじゃん。
905NAME IS NULL:2014/02/03(月) 11:10:36.08 ID:???
そっか、oracleか。

>>902
postgresqlはレコードにとどまらず、テーブル定義自体が一時的。

>>904
内容が一時的かつセッション独立なので、目的は果たせるかと。
改修でレイアウト変更するときにクエリの変更だけで解決できないのは不便な気もするけどね。
906NAME IS NULL:2014/02/03(月) 18:34:43.49 ID:???
>>903
つーことは、それがデファクト・スタンダードだろ。
907NAME IS NULL:2014/02/03(月) 18:51:14.07 ID:???
>>906
そんなことを吠えられても
908NAME IS NULL:2014/02/03(月) 18:52:33.20 ID:???
>>904
事前に用意しないで毎回CREATE TABLEして使う???
CREATE TABLEしている時点で、事前に用意してるという意味だろ?
CREATE TABLEしたにも関わらずメタデータが見えないなら欠陥だろ。
909NAME IS NULL:2014/02/03(月) 19:02:31.26 ID:???
>>908
create temp table だろ?
あるセッション中でだけ有効なテーブルを作成するってこと
セッション終了で自動削除
意味わかってんのかいな?
あほなんかいな?
910NAME IS NULL:2014/02/03(月) 23:55:56.31 ID:???
>>909
Oracle使ってる人間からすると909の書き込みは、こいつアホ?って思っちゃうわ。
CREATE (TEMP) TABLEしたものが存在しないという点に違和感感じない時点で麻痺してるんだろうけど。
911NAME IS NULL:2014/02/04(火) 00:29:42.14 ID:???
>>910
やっぱあほやったか
CREATE TEMP TABLEしたものが存在しないってどうゆうことだ?
CREATE したのにw
おまえだけがオラクル使ってるわけじゃねぇよ、ボケ
912NAME IS NULL:2014/02/04(火) 00:35:40.09 ID:???
ここOracle版でもDBMS版でもないんだ

Oracleの話は別でやってもらって良いかな
913NAME IS NULL:2014/02/04(火) 00:49:31.38 ID:???
まぁそうですね。
postgresでは一時テーブルはセッション終了時に自動的にdropされるって前提で 894 さんも訊いてるのに、Oracleは〜とか言い出す奴がいるから話がややこしくなるw
914NAME IS NULL:2014/02/04(火) 03:36:58.11 ID:???
>>910
セッション中は存在するよ。
oracleでもwithあるでしょ。ああいうのだと思えばいい。
915NAME IS NULL:2014/02/04(火) 22:04:38.51 ID:???
アホは>>910だったな
916NAME IS NULL:2014/02/05(水) 14:19:47.89 ID:???
いまだに「オラクル使ってる俺偉い」とか思ってる奴いるのかなぁ?
学習者は別としてだけどね。
かく言う俺もゴールド取得のためだけに無駄な勉強したなぁ
917NAME IS NULL:2014/02/05(水) 23:11:50.30 ID:???
現実にはPostgreはOracle代替用途が多いだろ。
開発もOracleに実装されているのと同じような機能を載せて行ってるし。
918NAME IS NULL:2014/02/06(木) 00:01:10.91 ID:???
だからといって、PostgreSQLは独立したRDBMSプロダクトだし、
ましてやOracle互換品などではない
それを実装仕様の差異について、Oracleの実装仕様が正しいことが
当然であるかのような思考しかできない>>910は、
アホと言われてもしかたないだろう
919NAME IS NULL:2014/02/06(木) 00:52:03.72 ID:???
>>910
×Oracle使ってる人間からすると
○Oracleしか知らない人間からすると

ところで、PostgreSQLのトランザクションって、CREATE TABLEとかで勝手にコミットされる?
920NAME IS NULL:2014/02/06(木) 01:14:14.13 ID:???
>>917
> 開発もOracleに実装されているのと同じような機能を載せて行ってるし。
ずいぶん偏った見方をするもんだね。
そういう部分もあるし、そうじゃない部分もある。
たとえば、RDBMSとしてそれはどうなのよというmysqlの機能を取り込んだりなど。

>>919
DDLもrollbackできる。
921NAME IS NULL:2014/02/06(木) 08:38:20.03 ID:???
PostgreSQLにも狂信的な信者って居てるんだな。
Oracleとの互換性が高いというのはPostgreSQLが使われるきっかけとして無視できないものだし、
Oracleとの互換性の高さを求めているユーザーも多い。
だからこそEnterpriseDBってものがあるわけだしな。
PostgreSQLの良さは、Oracleの機能も含めて色んな機能を貪欲に取り込んでいるところなのに、
Oracleの実装仕様は間違いだみたいな考え方の奴が多くなると
せっかくメジャーになりかけてるのに、またマイナーDBに逆戻りするよ。
もっとも、PostgreSQLに対するOracleとの互換性は、最近はあまり求められなくなってきているから
Oracleを否定してPostgreSQL独自仕様をどんどん増やせば良いんじゃないかな。
922NAME IS NULL:2014/02/06(木) 08:55:49.03 ID:???
誰もそんなこと言ってないけど
923NAME IS NULL:2014/02/06(木) 10:38:13.64 ID:???
実はSQL標準に従っていないのはPostgreSQLだったりする。
http://www.postgresql.jp/document/9.3/html/sql-createtable.html#SQL-CREATETABLE-COMPATIBILITY

標準に従わないのは珍しいから、標準仕様は不便だと考えられたんだろうね。
MySQL, SQL Server, DB2 も、Postgresに似た動作っぽい。
それこそ、Oracleに限定せず「色んな機能を貪欲に取り込んだ」結果なんじゃないかな。
924NAME IS NULL:2014/02/06(木) 10:39:55.39 ID:???
>>923
被るところだったw

SQL標準が一般的でないって書いてるしね
925NAME IS NULL:2014/02/06(木) 11:41:49.59 ID:???
>>921
突然何を?しかも内容が途中でひっくり返ってるから意図がわからない。
926NAME IS NULL:2014/02/06(木) 14:00:09.48 ID:???
意趣返しのつもりなんだろ
小器だなw
927NAME IS NULL:2014/02/06(木) 16:58:14.09 ID:???
燃料の一種ですよ
928NAME IS NULL:2014/02/07(金) 16:07:59.74 ID:???
PostgresSQLのプロジェクトに寄付とかするにはどうしたらいいのでしょうか?
英語に強くないので本家のサイトにはあまり行きません。
PostgresSQLプロジェクトにはいくら感謝しても感謝しきれないです。
尊敬に近い気持ちがあります。
929NAME IS NULL:2014/02/07(金) 17:25:07.23 ID:???
930NAME IS NULL:2014/02/07(金) 20:19:15.29 ID:???
日本に受付窓口があればいいのにね。
10%ぐらい手数料取ってもいいから。
931NAME IS NULL:2014/02/07(金) 22:41:57.59 ID:???
>>930
君のビジネスチャンスということだな
932NAME IS NULL:2014/02/08(土) 01:42:29.42 ID:???
>>929
なんで PayPal で寄付できないの?
得体の知れない企業・団体にクレジットカード番号を渡したくないんだけど
933NAME IS NULL:2014/02/08(土) 12:12:03.31 ID:???
ユーザー会当たりが窓口やればいいのでわ?
934NAME IS NULL:2014/02/08(土) 17:27:34.78 ID:???
100ドルからってのが個人ではちょっと痛いですね。
アメリカと違って寄付は税金面で控除にもならないし
せめて一口千円くらいに設定したら日本でも個人で寄付する人は多いと思うんですが

MySQLには寄付は不要でしょうけど
935NAME IS NULL:2014/02/09(日) 01:29:07.30 ID:???
ははは
936NAME IS NULL:2014/02/09(日) 16:50:51.79 ID:???
日本にも寄付金控除制度はあるんだけどね。
MySQLには不要だろうけど。
937NAME IS NULL:2014/02/10(月) 12:32:03.15 ID:???
この規模までくるとお金周りも細かいな
各国の支部の運営用のお金は支部でやってるんね
日本は会員制度でお金集めてるんだな

本体は10ドルからのクレカでの寄付か
支部だとPaypal使えるところもあるんな

企業スポンサーが結構多くて
本体のお金はあまり苦労してないらしいけどな

>>932
あっちの国の人はそういう感覚ないからな
938NAME IS NULL:2014/02/10(月) 17:28:45.57 ID:???
>>937

>企業スポンサーが結構多くて
>本体のお金はあまり苦労してないらしいけどな

これは何の情報?
ソースはあるんだろうね?
939NAME IS NULL:2014/02/10(月) 17:52:02.16 ID:???
>>937

>あっちの国の人はそういう感覚ないから

なことねぇわw
おまえ、知ったかばっかだな、全部
940NAME IS NULL:2014/02/10(月) 18:18:16.49 ID:???
喧嘩か
941NAME IS NULL:2014/02/10(月) 18:20:46.35 ID:???
まあカードの不正利用はカード会社が補償してくれるし
なじみの店だとカード見せないでもカード決済してくれちゃうくらい
おおらかだよな、向こうはw
942NAME IS NULL:2014/02/10(月) 18:21:57.12 ID:???
企業スポンサーってどれくらいのお金払っているの?
943NAME IS NULL:2014/02/10(月) 18:28:24.45 ID:???
>>941
>「なじみの店だと」
ばかなの?
944NAME IS NULL:2014/02/10(月) 18:30:06.57 ID:???
はいはい、行ったこともないやつが自分の感覚だけで何を語るのやらw
945NAME IS NULL:2014/02/10(月) 18:59:44.18 ID:???
>>944
こいつ、ほんまアホやなwww
ほんじゃ、おまえ、俺の「なじみの店」行ってみ?
946NAME IS NULL:2014/02/10(月) 20:50:16.93 ID:???
>>945
国は?
947NAME IS NULL:2014/02/10(月) 22:55:12.37 ID:???
>>932
おれに聞かれtも、寄付する気がなければやめれば
はなから・・・
948NAME IS NULL:2014/02/11(火) 00:07:08.75 ID:???
>>947
おまえに聞いてねぇよ
ひっこんでろ、ぼけなす
949NAME IS NULL:2014/02/11(火) 19:54:50.94 ID:???
>>948
つりか
950NAME 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
---------------------------------

どなたか、解決方法やアドバイスございましたら、ご教示下さい。
951NAME IS NULL:2014/02/14(金) 20:21:24.22 ID:???
OIDがぶっ壊れてるんかな?
なおるかどうか分からんけど、Vacuum Fullしてみたら?
952NAME IS NULL:2014/02/14(金) 20:25:31.44 ID:???
なんで psql では確認してみないの?
953NAME IS NULL:2014/02/15(土) 15:10:48.18 ID:???
なんでそんなツールを使おうと思うんだろう?
色んなグラフィカル?なツールがあるみたいだけど、DBシステムの変更やメンテナンスとかのレベルで便利だとはとても思えない
954NAME IS NULL:2014/02/15(土) 18:33:46.15 ID:w0wORzUI
>951さん

 ご助言ありがとうございます。
 Vacuum Fullしましたが、依然変わらずです。


>952さん

 psqlでは、きちんとデータベースやテーブル、またそのレコードは見えています。
955NAME IS NULL:2014/02/16(日) 12:31:43.03 ID:???
ググったらpg_dumpへのパスの設定をミスってるとかなんとか

直接pg_dump呼んだらいいのに、、と思ってしまうが。
956NAME IS NULL:2014/02/16(日) 12:32:23.96 ID:???
957NAME IS NULL:2014/02/18(火) 02:29:08.20 ID:???
RETURNING句って凄く便利で使い勝手があるね。
PostgresSQLの拡張、最高だわ
958NAME IS NULL:2014/02/18(火) 05:20:06.94 ID:???
うん、すごく便利だね。
知ってからの使用頻度たるやかなりのものだわ。
959NAME IS NULL:2014/02/18(火) 10:45:42.35 ID:???
参考までにどう使ってるの?
writable cteとして?
それとも削除した行をとっておくとか削除した行に対する処理?
960NAME IS NULL:2014/02/18(火) 11:19:49.91 ID:???
一番多いのはシリアルの値を取得だな
961NAME IS NULL:2014/02/18(火) 14:08:00.85 ID:???
>>960
それが俺も一番便利と思ったところ。
それ以外にも実際に色々と使い勝手が多くて、RETURNING句覚えてから使いまくってるけど、
恥ずかしいからここには書けないw
962NAME IS NULL:2014/02/18(火) 14:16:49.21 ID:???
例えば、insert/update したときの更新日時なんかの default now() のフィールドとかをRETURNING句で取得とかね、
さらに to_char で文字列に変換したりしたうえで
963NAME IS NULL:2014/02/18(火) 20:11:47.83 ID:???
便利だけど むかーし RETURNING や DROP TABLE の IF EXISTS のためだけに
postgresql 8.2 or later を require されて発狂した記憶があるのであまり賛同できない

使う側としては便利だけど。。。
964NAME IS NULL:2014/02/18(火) 21:56:09.01 ID:???
↓のようなことがやりたいのですが良い方法無いでしょうか?
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);
965NAME IS NULL:2014/02/18(火) 22:42:38.61 ID:???
>>964
tbl_b と tbl_c を結合というわけにはいかない状況?
966NAME IS NULL:2014/02/19(水) 10:15:17.96 ID:???
>>964
良い方法って以前の話だけど
967NAME IS NULL:2014/02/19(水) 10:35:32.04 ID:???
>>964
やりたいことの説明が出来ていない
968NAME IS NULL:2014/02/19(水) 15:33:26.51 ID:???
>>967
脳みそが足りてない
969NAME IS NULL:2014/02/19(水) 16:31:44.94 ID:???
>>968
アンカ間違えてるよ>>968でそ
970NAME IS NULL:2014/02/19(水) 16:35:36.74 ID:???
select 1つだけで出るようにJOINしたうえで values 外せばいい
971NAME IS NULL:2014/02/19(水) 17:50:05.83 ID:???
だいたいbとcの結合関係も分からんから何とも言いようがないじゃん
972NAME IS NULL:2014/02/19(水) 17:51:20.46 ID:???
>>963
なんで発狂するわけ?
で、完治したの?
973NAME IS NULL:2014/02/22(土) 21:09:38.04 ID:???
'2014-01-01 27:30:00' を '2014-01-02 03:30:00' に変換したいのですが、どうするのがスマートでしょうか。
(PostgreSQL 9.3)
974NAME IS NULL:2014/02/22(土) 21:22:48.10 ID:???
>>973
select to_timestamp('2014-01-01 27:30:00','YYYY-MM-DD HH24:MI:SS');
975NAME IS NULL:2014/02/22(土) 21:25:14.74 ID:???
>>974
>select to_timestamp('2014-01-01 27:30:00','YYYY-MM-DD HH24:MI:SS');

おお、すばらしいです!
「postgresql to_timestamp」でググったら、マニュアルはこちらのようなので、読んで見ます。
ttp://www.postgresql.jp/document/9.3/html/functions-formatting.html
ありがとうございました。
976NAME IS NULL:2014/02/23(日) 01:54:19.48 ID:???
>>974 で示してるように、
'2014-01-01 27:30:00' みたいなのだって日付/時刻型書式としてちゃんと受け入れてくれるから特段変換とか考えなくていいよ。
日付/時刻型書式の文字列をtimestamp型に変換してるだけだから
977NAME IS NULL:2014/02/23(日) 01:56:04.84 ID:???
'2014-02-31 00:00:00'
だって問題ない
978NAME IS NULL:2014/02/23(日) 02:48:11.25 ID:???
ERROR: date/time field value out of range
979NAME IS NULL:2014/02/23(日) 03:31:23.26 ID:???
>>978
何をやって?
980NAME IS NULL:2014/02/24(月) 01:00:47.18 ID:???
時刻計算について質問です。

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 のような表示になってしまいます。
981NAME IS NULL:2014/02/24(月) 03:16:44.39 ID:???
select ( extract( epoch from '2014-02-24 01:30:00.123'::timestamp ) - extract( epoch from '2014-02-23 00:00:00'::timestamp ) )::text::interval;
982NAME IS NULL:2014/02/24(月) 16:51:43.81 ID:???
PostgreSQL 9.3.3, 9.2.7, 9.1.12, 9.0.16 and 8.4.20 released!
http://www.postgresql.org/about/news/1506/
983横から
>>981
::text::interval の発想は無かった
便利だね