PostgreSQL Part.8

このエントリーをはてなブックマークに追加
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.7
http://hibari.2ch.net/test/read.cgi/db/1256300618/
2NAME IS NULL:2011/01/10(月) 15:40:20 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のことならここで聞け   ■ (初心者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:2011/01/10(月) 16:22:56 ID:???
おつ
4NAME IS NULL:2011/01/13(木) 00:05:16 ID:???
9.1 get
5NAME IS NULL:2011/01/13(木) 19:48:42 ID:???
>>4
まだalphaなのジャマイカ
6NAME IS NULL:2011/01/19(水) 20:34:25 ID:Axy8UdDb
6
7NAME IS NULL:2011/01/27(木) 00:19:30 ID:???
select count(*) from このスレ;

count
------
7
8NAME IS NULL:2011/02/01(火) 16:31:23 ID:???
数えてる最中は>>7のスレは存在しないはずだがw
9NAME IS NULL:2011/02/01(火) 16:32:25 ID:???
スレじゃねーレス
10NAME IS NULL:2011/02/01(火) 17:58:54 ID:???
環境はpostgresql 9.0.3 64bit、windows 7 64bitです
初めてさわっているのですが
コンソールはどういう設定で使われていますか?

コマンドプロンプトでchcp 65001とすると、
文字化けは消えるものの
SELECT version();でメモリエラー?が出ます

createdb aでDBを作ったあと
psql a
SELECT version();
→not enough memory.というメッセージ

chcpを抜くと文字化けはするもののバージョンが表示されます
PostgreSQL 9.0.3, compiled by Visual C++ build 1500, 64-bit
(1 陦・

a=#
11NAME IS NULL:2011/02/04(金) 02:19:31 ID:???
chcpせずに client_encoding=SJIS することが多いんじゃないかな。
12NAME IS NULL:2011/02/06(日) 07:19:48 ID:???
>>10
デフォルトでインストールされるPgAdminIIIを使ってもOKだぞ。
GUIなので、たぶんpsqlよりPostgreSQLを学習しやすいと思うよ。
13NAME IS NULL:2011/02/06(日) 15:08:40 ID:???
>>11-12
client_encoding=SJISはやっていたんですが
12さんの方法で管理出来ました、ありがとうございました
14NAME IS NULL:2011/02/09(水) 01:52:38 ID:???
テキスト書式、文字列表現、バイナリ書式、バイナリ表現
これらの語のきちんとした定義はマニュアルのどこにかいてありますか?
英語でもかまいません。よろしくお願いします。
15NAME IS NULL:2011/02/09(水) 09:19:56 ID:???
公式サイトのドキュメントに、BNF形式の定義あったかな。
テキスト形式は、文字コードによって違うので、ソースみたらいいと思う。
16NAME IS NULL:2011/02/11(金) 01:18:39 ID:???
これからパフォーマンスチューニングの勉強を始めるにあたって、オススメの本やサイトはありますか?
17NAME IS NULL:2011/02/11(金) 06:26:43 ID:???
俺も知りたい。
マンモス本しか頼りにするものを知らない。
18NAME IS NULL:2011/02/14(月) 07:37:49 ID:???
slideshareにあがってたかな、、
勉強会での8系の説明や設定値変更した場合の資料があったはず
@ITとかのは、少し前かな

http://www.google.co.jp/search?q=postgresql+8+チューニング&ie=UTF-8&oe=UTF-8&hl=ja
19NAME IS NULL:2011/02/26(土) 00:55:04.88 ID:???
Conference 2011 Tokyo 参加者はいないのかな
20NAME IS NULL:2011/02/26(土) 19:53:22.09 ID:???
参加したよ。
1つめの基調講演、ありゃなんなんだよ。
21NAME IS NULL:2011/02/26(土) 19:59:01.87 ID:???
ためになったかい
22NAME IS NULL:2011/02/26(土) 20:47:48.81 ID:???
>>16
公式のLets!のblogが結構良かった
23NAME IS NULL:2011/02/26(土) 23:27:16.43 ID:???
>>16
パフォーマンスチューニングは、改善としては10〜30%位しか望めないけど
改悪の場合は底なしなので注意してね。と先日言われました。
24NAME IS NULL:2011/02/27(日) 11:07:57.86 ID:???
>>20
事例紹介ではなかったの?
25NAME IS NULL:2011/02/28(月) 18:27:28.96 ID:???
事例紹介だったが、ほとんど得るものなし。
プレゼンもヘタクソの極み。
26NAME IS NULL:2011/02/28(月) 18:30:39.88 ID:???
>>18
まだ読んでないけどこれかや?
http://www.slideshare.net/kwappa/20090107-postgre-sqlsql-presentation

>>22
読んでみるさんくす
http://lets.postgresql.jp/
27NAME IS NULL:2011/03/02(水) 00:01:13.76 ID:IkzMfoJ6
PostgreSQL (ぽすとぐれすきゅーえる)って(ぐれ)がなくて
PostSQL (ぽすとえすきゅーえる)だったらもっと普及したかもしれないって思った

ぐれ っていらないだろって
28NAME IS NULL:2011/03/02(水) 00:55:01.72 ID:???
「ぐれ」だけ気になったのは何故?
元々Postgresだったのでgreを抜くとPostsになっちゃうな
それにPostgreSQLと書いて「ポストグレス」と読む人も結構いるような…
まぁ、ポスグレっていう短縮の方が多いかな
29NAME IS NULL:2011/03/02(水) 01:18:55.50 ID:???
pgpoolのことってここでいいのかな?
30NAME IS NULL:2011/03/02(水) 09:28:21.41 ID:???
PoSQL(ぽすきゅーえる)で良いだろ
31NAME IS NULL:2011/03/02(水) 10:46:42.54 ID:???
名前の経緯は、
ingres →postgres →postgresql
postgresは、ingresの次の意味
その後、問合せ言語の標準化があり、対応版にsqlが付く

MySQLに合わせて、PgSQLとかならいいけど、
OSS-DBはちょっと無い
32NAME IS NULL:2011/03/02(水) 11:09:15.68 ID:???
>29
レプリケーションやクラスタリングの専用のスレはないので、ここでok
使ってる人はいればいいのだけど

Let's Postgressのpgpool記事
http://lets.postgresql.jp/documents/technical/pgpool/

pg9.0で、全体のレプリケーション機能入ったからpgpool組み合わせて参照だけ分散もできるみたいだね。
この記事は、既存のレプリケーションとの比較も載ってる
http://lets.postgresql.jp/documents/technical/9.0/
33NAME IS NULL:2011/03/02(水) 15:31:07.17 ID:???
(´・ω・`)
34NAME IS NULL:2011/03/02(水) 22:36:22.06 ID:???
>>32
もし知ってたら教えてほしいんだけど
pgpoolで、デッドロックの対処とかsqlのキャンセルとかしたいときって
どういうやり方が一般的なのかな。
35NAME IS NULL:2011/03/03(木) 00:01:55.34 ID:???
オンラインリカバリの説明見てて気になったんだけど
マスタとスレーブでアーカイブモードをONにする理由ってあるの?
マスタだけアーカイブONにしてスレーブにWAL持っていけばいいのでは?
36NAME IS NULL:2011/03/03(木) 00:20:48.19 ID:???
そもそも可能なの?
37NAME IS NULL:2011/03/03(木) 14:01:42.79 ID:9rBiI8AH
where句にヒットしたデータのみダンプする方法ってありますか?
38NAME IS NULL:2011/03/03(木) 19:29:53.32 ID:???
>>37
一旦テーブルに保存してpg_dump
39NAME IS NULL:2011/03/04(金) 02:05:29.10 ID:???
>>37
COPY (SELECT ... WHERE ...) TO 'file'.
40NAME IS NULL:2011/03/06(日) 13:08:14.44 ID:???
直接PostgreSQLには関係ないのですが、全文検索用のテーブルは他のテーブルとは別DBなりに分けたほうがいいものなんでしょうか?
41NAME IS NULL:2011/03/06(日) 13:32:06.10 ID:???
なんていうか、ググレカスっていいたくなる質問が多いな。
全く考えてない。
42NAME IS NULL:2011/03/06(日) 16:30:37.95 ID:o1vJgI9f
ポスグレカス
43NAME IS NULL:2011/03/06(日) 16:50:55.61 ID:???
googleSQLってデータベースを検索しろ、ってことか
44NAME IS NULL:2011/03/06(日) 16:58:03.62 ID:???
でしょうね
45NAME IS NULL:2011/03/06(日) 17:21:06.92 ID:???
>>40
postgresqlみたいにインデックスとして全文検索データ持ってる設計思想の場合を除いて、
一般的な全文検索エンジンは、別管理の場合が多い。

と、思ってるだけなので、違ってたらご指摘ください。
46NAME IS NULL:2011/03/06(日) 20:00:51.82 ID:???
要件による。タダで答える気はない。
並の知能があればどうしたほうが良いかは思いつく。
47NAME IS NULL:2011/03/06(日) 20:13:49.39 ID:???
全文検索ってXMLDBのほうが向いてんじゃないの
48NAME IS NULL:2011/03/06(日) 20:31:57.19 ID:???
ぷ、全文検索する為にxml形式サポートしたようなもんじゃん
49NAME IS NULL:2011/03/06(日) 20:44:13.78 ID:???
>>46
お前には答えてない
50NAME IS NULL:2011/03/06(日) 20:46:04.36 ID:???
とにかく簡単にやりたいなら分けなくてもいいよ
パフォーマンス気にするなら別DBっていうよりも別ドライブに分ける
http://thinkit.co.jp/free/tech/10/4/1.html
このあたり読んでみるとイメージ掴めるかも
51NAME IS NULL:2011/03/06(日) 20:50:24.48 ID:???
>>47
monetdb含めてxmldbは、XqueryのようなDOM構造の枝を検索するため出来ているので、
単純な全文検索に特化している訳ではない。
52NAME IS NULL:2011/03/06(日) 21:04:52.37 ID:???
>>51
そんなこと言うならDB使う前に単純なファイルを正規表現で検索すればいい話
53NAME IS NULL:2011/03/06(日) 21:17:27.51 ID:???
>>52
そうですね、
全文検索の性能向上の仕組みは、インデックス付けにあるので、
毎回舐める程度のパフォーマンスでいい場合、
ドキュメントをテキストファイルで管理してるなら、それでいいし、
RDB管理なら、SQL文にGREP書けばいい。
54NAME IS NULL:2011/03/10(木) 19:22:29.13 ID:???
Windows版って、ちゃん動くのぉー
バグは減ったかな??
55NAME IS NULL:2011/03/10(木) 19:40:22.31 ID:???
おすすめのレンタルサーバーってどこ?
MySQLオンリーのとこが多いねぇ(´・ω・`)ショボーン
56NAME IS NULL:2011/03/10(木) 20:08:43.04 ID:???
どうしても専鯖とかVPSになっちゃうよね
あれこれしようと思うと共有サーバじゃどうしようもないことあるし
57NAME IS NULL:2011/03/10(木) 23:10:15.97 ID:???
where句を使っていながら
すべてのレコードを抽出する書き方教えて
58NAME IS NULL:2011/03/10(木) 23:15:21.17 ID:???
where 0 = 0
59NAME IS NULL:2011/03/10(木) 23:42:08.25 ID:???
where true
60NAME IS NULL:2011/03/10(木) 23:43:18.05 ID:???
まさかのインジェクション?
61NAME IS NULL:2011/03/10(木) 23:58:17.14 ID:???
mysqlとpgsql共通化するなら、
trueのみのパターンだとmysqlが駄目だった気がする
昔試したのでmysql4.0の頃かもしれないが
62NAME IS NULL:2011/03/11(金) 04:47:44.90 ID:???
query = "where 1=1 ";
if (foo) query += " and col1 = 〜 ";
if (bar) query += " and col2 = 〜 ";

というときに、常に真となる条件がよく使われるかも。
63NAME IS NULL:2011/03/11(金) 07:42:42.70 ID:???
>>62
これってCかなんかの記法ですか?
64NAME IS NULL:2011/03/11(金) 11:46:11.53 ID:???
プログラム内で検索条件組み立てるときの例
65NAME IS NULL:2011/03/11(金) 13:47:25.32 ID:???
何でレンタルサーバーでPostgreSQL使えるところが少ないの?
せめてサクラで使えるようにして欲しい
66NAME IS NULL:2011/03/11(金) 13:51:37.11 ID:???
>>65
まあ、時代はこちらだから。そのうち良くなるよ。
67NAME IS NULL:2011/03/11(金) 14:04:57.02 ID:???
>>63
ただの擬似コードだよ
68NAME IS NULL:2011/03/11(金) 22:54:08.47 ID:???
JavaScript なら通るな。
69NAME IS NULL:2011/03/11(金) 23:01:16.40 ID:???
C#でも通ると思う。けど、まぁ、擬似コードなんでどれでも
70NAME IS NULL:2011/03/18(金) 10:09:40.42 ID:???
http://textsearch-ja.projects.postgresql.org/textsearch_ja.html

textsearch_jaをインストールしたいんだけど
インストール用のSQLファイルを実行したら
ERROR: ライブラリ"C:/Program Files (x86)/PostgreSQL/9.0/lib/textsearch_ja.dll"をロードできませんでした: The specified module could not be found.
って出てインストールできない。
DLLファイルはちゃんと上記パスのとおりに配置されている。

mecabはインストールして、
C:\windowsフォルダにlibmecab.dllをコピーした。
コマンドプロンプトでlibmecab.dllって打ったら
「指定されたプログラムは実行できません」
って出るのでパスは通ってる...

ダメ元で上記二つのDLLアクセス許可を
Everyone:フルコントロール にしたけど、変化なし。

何が間違ってるか
わかる方いらっしゃいませんか。

以下、環境
Win2008R2 sp1
PostgreSQL 9.0.3
mecab 0.98
textserch_ja 9.0.0

どうかお願いします。
71NAME IS NULL:2011/03/18(金) 18:47:59.65 ID:???
serial型を主キーにしたテーブルにレコードをinsertし、
そのレコードの主キーを得たいです。

max関数では、insert直後に他者がinsertした場合、不正な
値になってしまいますよね。

どうしたらよいでしょうか?
72NAME IS NULL:2011/03/18(金) 19:08:26.88 ID:???
RETURNING句を使う
73NAME IS NULL:2011/03/18(金) 20:07:25.92 ID:???
もしくはcurrval関数を使う
74NAME IS NULL:2011/03/19(土) 03:15:11.33 ID:???
>>73
解決になってない。
排他制御しろと思うかもしれないが、それならもともと大丈夫
7573:2011/03/19(土) 04:12:56.80 ID:61olq/JC
>>74
同じ接続プールを他人と共有しているなら話は別だが、
そうでない場合は、currval関数の戻り値はセッションごとに独立だよ。
http://www.postgresql.jp/document/current/html/functions-sequence.html
を参照。
試してみるとよくわかる。

当然だが、接続を他人と共有しているなら、同じ接続の中では排他制御できない。
76NAME IS NULL:2011/03/19(土) 08:51:37.21 ID:???
>>72,73,74,75
素早い回答ありがとうございました。

RETURNING句、currval関数とも、正しい解決策であること
をPostgreSQLの日本語マニュアルで理解しました。

今回の場合RETURNING句で実装することにしますが、
currval関数を知ったことは大きな収穫です。

ありがとうございました。
77NAME IS NULL:2011/03/19(土) 10:17:13.49 ID:???
>>70
今時、UAC悪さしてるとか?
64bitが悪さしてるとか?
なんだろう
7870:2011/03/22(火) 14:05:16.04 ID:???
>77

お返事ありがとうございます。

WinServerでAdministratorでログインしてるので、
UACはスルーして常に管理者権限で動作しています。

64bitについては、postgreSQLもMecabも32bit版をインストールしてるので、
関係ないと思ってるのですが...

よくわかりませんね...
79NAME IS NULL:2011/03/23(水) 01:57:10.97 ID:dwOuswKE
全文検索エンジン今Ludia使ってますが
textsearch_sennaに乗り換えたほうがいいですかね?

PG8.3以上を使える以外にメリットありますか?
80NAME IS NULL:2011/03/23(水) 02:40:34.64 ID:???
AdministratorだからといってUACが完全に回避されるわけじゃないんだけど。
UAC切ってるってことなら話は別ね。
みんな当たり前のようにAdministratorでWindowsを使うようになってるから、Administratorにも制限を設けた。それがUACの本質。
81NAME IS NULL:2011/03/23(水) 08:22:34.86 ID:???
>>70
"The specified module could not be found." だと実行権限まわりの
問題のことが多いんだけど、すでにやってるみたいだしなぁ。
Everyoneの代わりにpostgresユーザを名指ししてもダメ?
82NAME IS NULL:2011/03/23(水) 23:36:41.60 ID:???
chroot的なことされてるってことはないのかな
8370:2011/03/24(木) 10:15:18.56 ID:???
>80,81,82
ありがとうございます。

UACをOFFにしたり、
postgresとEveryone両方にフルコントロール権限あげたり、
〜/PostgreSQL/bin フォルダにパスを通してみたり、
PostgreSQLとMeCabを再インストール/インストールパスの変更 してみたり、

してみましたが、依然解決してません...

あきらめて textsearch_senna に変えてみましたが、
同様のエラーでインストールできませんでした。

libmecab.dll / libsenna.dll へのアクセスが失敗してるんだろうなぁという
予想はできるので、たぶん同様の原因で失敗してると思うのですが、

アクセス権限周りってほかに設定変更すべきところありますでしょうか。
84NAME IS NULL:2011/03/24(木) 10:53:24.39 ID:???
32bitOSで64bitDLLを使おうとしてるとか
85NAME IS NULL:2011/03/26(土) 17:04:11.05 ID:IkoGAxpk
PG8.2をサーバエンコードをutf8でインストールしたんですが
psqlはsjisなので
psql起動のたびにクライアントエンコードをsjisに変更するのがめんどくさいです。
何か解決策があったら教えてください
86NAME IS NULL:2011/03/27(日) 00:15:58.15 ID:???
$HOME/.psqlrc に SET CLIENT_ENCODING='SJIS'; ってのはどう?
87NAME IS NULL:2011/03/27(日) 00:34:30.49 ID:tM5GbfFL
ありがとうございます。自己解決しました。
環境変数
PGCLIENTENCODING

SJIS
と設定することで解決しました。
88NAME IS NULL:2011/03/27(日) 15:00:04.74 ID:IYaxdkvE
テーブルtesttblをphpPgAdminで以下のように作りました
id (serial) プライマリキー
date (date) NOT NULL
name (text) NOT NULL

SQLはINSERT INTO testtbl VALUES(NULL, NOW(), '{DATA}')を実行すると
ERROR: 列"id"内のNULL値はNOT NULL制約違反ですってエラーが出ます
mysqlのオートインクリメントみたいに挿入すると連番にするにはSQLをどのように修正したらよいのでしょうか?
89NAME IS NULL:2011/03/27(日) 15:07:53.64 ID:IYaxdkvE
自己解決しました
INSERT INTO testtbl(date, name) VALUES(NOW(), '{DATA}')と書いたら動きました
90NAME IS NULL:2011/03/28(月) 01:52:02.82 ID:bqybqGt+
LudiaのパフォーマンスチューニングのTipsあったら教えてください
9170:2011/03/28(月) 10:14:38.20 ID:???
OSの再インストールを含むいろいろやってみましたが、
どうにもならなかったので結局MySQL+Sennaでとりあえず作業するようにしました。

Postgres9.1がNGram対応らしいので
正式リリースしたときに戻ってきます。

いろいろありがとうございました。
92NAME IS NULL:2011/03/29(火) 00:19:31.86 ID:f/9wZGST
おれはtextsearch_sennaで同様の症状が出た。
PCによってうまくいったり行かなかったりで安定しない
パスは合ってるはずだし何が悪いのかわからない
93NAME IS NULL:2011/03/29(火) 10:47:20.31 ID:yhdycnL0
何でPostgreSQLiってないのですか?
MySQLiはあるのに
94NAME IS NULL:2011/03/29(火) 11:07:51.98 ID:???
必要と思う人がいないからだろ
95NAME IS NULL:2011/03/30(水) 00:04:31.62 ID:???
必要と思う人が作ればみんな幸せ
96NAME IS NULL:2011/03/30(水) 01:45:21.99 ID:???
>>70, 92
MSVC C++ 2010 ランタイムがインストールされていないのでは。
97NAME IS NULL:2011/03/30(水) 02:43:54.72 ID:Ljvz7rtW
>>96

サソクス
そんな前提条件があったのか。。
それ入れてみてやってみます。

それとは関係ないけど
RDBで数百万以上の文書に対する検索をするのは
ムリかなと思うこのごろ。
Solrやnosqlでの実装を考えようと思っています。
98NAME IS NULL:2011/03/30(水) 11:33:40.87 ID:yqbcjZjz
日付、id、名前、コメント、IP
この5つの項目をデータベースに入れたいのですが
どのようにテーブルを設計したらよいでしょうか?
全部1つのデータベースに入れないほうがいいですかね?
99NAME IS NULL:2011/03/30(水) 11:52:15.56 ID:???
ほっほっほ
100NAME IS NULL:2011/03/30(水) 12:21:13.48 ID:???
>>98
http://hibari.2ch.net/test/read.cgi/db/1269585561/
で聞く方がいいと思う。
掲示板でも作るのかな?
とりあえずその項目の中で、複数行に同じ意味のものが出てくる場合があるなら、
その項目を別テーブルにする。

名前が同じでも、同一人物か分からないとかならそのままでも悪くないと思う。
101NAME IS NULL:2011/03/30(水) 13:29:21.85 ID:???
>>98
全部バラバラにする。共通の組識別子を付加して、

日付
--------------
組識別子 | 日付

id
------------
組識別子 | id

名前
--------------
組識別子 | 名前

コメント
-------------
組識別子 | コメント

IP
-------------
組識別子 | IP
102NAME IS NULL:2011/03/31(木) 09:42:55.86 ID:o4kjoUAR
再起動後のposgtreSQLの起動をいつも
Postgresのアカウントになってから
手動でスタートしているのですが
これを自動起動させる方法はあるのでしょうか。
OSはubuntu10.10 、postgresqlはソースからコンパイルしたものです。
103NAME IS NULL:2011/03/31(木) 12:32:52.49 ID:???
>>102
標準のpostgresのパッケージから、起動スクリプトを取り出して、
pathの記述をちょっと変更した後、設定すればいいはずだけど、
詳しくはUbuntuのスレで起動スクリプトの追加方法を聞いたほうがいいかもしれない。
104NAME IS NULL:2011/03/31(木) 12:43:35.26 ID:???
>>103
いやいや、パッケージのスクリプトをソースから入れたものに適用するのはかなり大変よ。

>>102
今時のソフトは大抵起動スクリプトの例とか同梱されているから、それを参考にすると良い。
PostgreSQL なら
contrib/start-scripts/linux
をどうぞ。
105NAME IS NULL:2011/03/31(木) 12:56:41.61 ID:???
>>104
そうなんだ。同梱されているのは知らなかった。
ちなみにFedoraの場合は、パッケージのものが簡単に流用できたよ。

debian系はよく知らないんだけど、update-rc.dコマンドで起動スクリプトを登録するのかな?
起動順の数字は、何番目くらいを指定するんだろう。
106NAME IS NULL:2011/03/31(木) 23:09:53.26 ID:wkIoyyn8
下記のように,サブクエリの結果を参照すると、testにNULLが返ってしまいます。
testにkosuu_sumの値が入っていて欲しいのですが、どうすればいいでしょうか

SELECT
(SELECT SUM(kosuu) FROM shouhin sh where sh.id = 123 ) AS kosuu_sum,
kosuu_sum AS test
107NAME IS NULL:2011/03/31(木) 23:16:52.19 ID:???
このスレに腐ったSQL貼らないでよろし

SQL質疑応答スレ 11問目
http://hibari.2ch.net/test/read.cgi/db/1299305530/
108NAME IS NULL:2011/04/01(金) 21:28:40.81 ID:Wpf/mh7O
Windows版 PostgreSQL9.0 と
FreeBSD版 PostgreSQL9.0 を
レプリケーションさせたいのですが
参考になるサイトなどあれば教えてください。
109NAME IS NULL:2011/04/02(土) 01:30:03.16 ID:???
>>108
異種混合はSlonyじゃないと無理じゃないか?
110NAME IS NULL:2011/04/02(土) 11:31:44.82 ID:ULc2Q9iC
>>109
pgpoolだと無理ってことですね
111NAME IS NULL:2011/04/02(土) 19:08:46.41 ID:???
>>110
いや、pgpoolでもいけるかもしれない。pgpoolもSlonyもSQLを送るタイプだから。
物理イメージを送る、9.0組み込みのレプリケーションは無理。
112NAME IS NULL:2011/04/05(火) 19:55:34.97 ID:g4jC/4Ok
>>111
サンクス!
pgpoolで逝けたわ!
113NAME IS NULL:2011/04/06(水) 05:54:41.60 ID:???
Ver9.1 で、SQLのMERGEがサポートされるとLetsに書いてあった
のだが、今は書いてない。

なくなっちゃったのかなぁ・・・
114NAME IS NULL:2011/04/06(水) 10:16:35.38 ID:rFyVB0oq
Mysqlスレって厨が多くて荒れすぎてるのに
このスレは大人が多くていいね
しばらくpg使うか
115NAME IS NULL:2011/04/07(木) 01:01:22.74 ID:FUS61YfR
ポスグレとオラクルとかHiRDBで性能差はどのくらいあるんですかね

ぶっちゃけあまり変わらない?
116NAME IS NULL:2011/04/07(木) 07:08:13.34 ID:???
>>113
MERGEは9.1には採用されず。その前提機能は採用されたので、次に期待ですな。
117NAME IS NULL:2011/04/07(木) 21:22:51.07 ID:???
GPLが怖いという理由でMySQLを避けた
118NAME IS NULL:2011/04/08(金) 01:34:47.00 ID:???
>>117
それに加えて、Oracleの物になっちゃったしねい。
119NAME IS NULL:2011/04/10(日) 13:28:29.94 ID:cBez4FYu
postgresql 8.4 (linuxにて動作)で
PCからlibpq.dllを使って接続しています
有線でLANが引けない場所があり仕方なく無線LANで飛ばして処理
しているのですが、時々DBから切断されていてエラーになります
おそらく無線の状態が悪い時がありセッションが切れているのだと思いますが
セッションのタイムアウトをこの無線LANの端末だけ
2分や5分に変更できないものでしょうか?
120NAME IS NULL:2011/04/10(日) 14:44:59.65 ID:???
>>119
PostgreSQLの設定ではなくて、無線LANやOSの設定が必要だと思うよ。
スレ違い。
121NAME IS NULL:2011/04/10(日) 20:45:14.21 ID:cBez4FYu
>>120
今の無線LANは切れないように出来ないのでここで書いています
無線LAN側の設定やOSの設定はもう済んでいます
dBのログも取ったのですが、常時100%の状態で接続できているわけではなく
20秒ほど切れることがあるようでメーカー側の認識も同様です

で、例えば、有線でもLANケーブルを5秒ほど抜いてもセッションは切れません
PostgreSQL側でこの時間はどこかに設定があるのでは?
と思い書いたのですが・・・
まあいいです、ソース解析してがんばります、ありがとう御座いました
122NAME IS NULL:2011/04/10(日) 20:57:07.80 ID:???
>>121
> まあいいです、ソース解析してがんばります、ありがとう御座いました
無理だと思うよ。
123NAME IS NULL:2011/04/10(日) 21:14:53.85 ID:???
無理だろ
ネットワーク接続が新しくなってんだろ
124NAME IS NULL:2011/04/10(日) 21:32:18.57 ID:???
物理層のセッションが変わってるなら無理だろうね
それよりリトライする方が確実だろう
125NAME IS NULL:2011/04/10(日) 23:53:51.62 ID:???
無線LAN側の設定やOSの設定はもう済んでいます
無線LAN側の設定やOSの設定はもう済んでいます

大事なことなので二度書きました
126NAME IS NULL:2011/04/11(月) 00:43:41.85 ID:???
二度書いたところで君じゃ無理だよ
127NAME IS NULL:2011/04/11(月) 00:46:55.18 ID:kJ1QTiO2
Corei7、メモリ8GB程度で
ポスグレで何百万レコードくらいまで扱えますか?
128NAME IS NULL:2011/04/11(月) 00:52:11.99 ID:???
そうだな。車種を提示されて、どこまで行けますかと問われてるような、そんな気分だな。
129NAME IS NULL:2011/04/11(月) 14:10:22.31 ID:???
どこまでもいけるよな。
130NAME IS NULL:2011/04/11(月) 14:12:37.48 ID:???
心の翼を広げれば。
131NAME IS NULL:2011/04/11(月) 14:17:33.21 ID:???
トリガってむずいな
132NAME IS NULL:2011/04/11(月) 15:17:22.97 ID:???
セッション切れるって人、試しにVPNでつないでみても同じかな?
133NAME IS NULL:2011/04/11(月) 17:07:36.94 ID:???
その根拠は?
134NAME IS NULL:2011/04/11(月) 23:54:01.21 ID:???
VPNがセッションキープしてくれることを期待してるんじゃないの?
135NAME IS NULL:2011/04/12(火) 23:43:00.71 ID:???
Postgres の設定なら tcp_keepalives_idle とかは効果無いかな?
136NAME IS NULL:2011/04/13(水) 22:57:25.37 ID:S0k43l6n
どなたか縦持ちのテーブルから
横持ちのテーブル作るストアド例
教えてください。
137NAME IS NULL:2011/04/13(水) 23:05:41.21 ID:???
crosstab
138NAME IS NULL:2011/04/14(木) 07:54:05.12 ID:???
>>136
鍵に対して横持ちを作る際、昇順、降順などルールが必要なのではないかな。
それも設計する必要があるのかな?
139NAME IS NULL:2011/04/14(木) 14:26:01.34 ID:???
>>138
質問されていることがよくわからないのですが...

結果としては

こういう縦持ちテーブルから...
id name
-------
1 a
2 b
3 c

こういう横持ちテーブルにするストアドがほしい...
a b c
-----
140NAME IS NULL:2011/04/14(木) 21:09:50.59 ID:???
そう言うのを縦持ち、横持ちって言うんだ
一般的なの?

で、横餅テーブルはその都度実表作ってデータを転記?
141NAME IS NULL:2011/04/14(木) 22:01:33.10 ID:???
>>140
一般的かどうかは知りませんが...

一時テーブルで。
142NAME IS NULL:2011/04/14(木) 22:21:26.62 ID:???
縦持ち横持ちは業界内では一般的だろ。
で、crosstab
143136:2011/04/14(木) 22:28:00.04 ID:???
>>142
crosstabやってんだけどうまくいかん。
144NAME IS NULL:2011/04/15(金) 00:48:25.06 ID:???
一般的なんですね。聞いたことが無かったもので… orz

で、ttp://www.postgresql.jp/document/current/html/tablefunc.html にある方法とか?
145NAME IS NULL:2011/04/15(金) 02:33:26.98 ID:???
縦持ちから配列にするまでは簡単だけど、そこから横持ちにするのは手間がかかる。
146NAME IS NULL:2011/04/15(金) 03:13:01.99 ID:???
>>144
だからcrosstabだと。
詳細な情報が出てこない以上、そこから進まないんだ。
147NAME IS NULL:2011/04/15(金) 05:30:52.03 ID:???
>>139
ここではPKがidでしかもソートされていてという例だが

一般には4月,5月, ... (次年度の)1月,2月,3月などの場合が
多い。順に並んでいる保証はもちろんない。
12ヶ月分データが揃っていなければ作れない。

等々、いろいろあるものだ。
148136:2011/04/15(金) 08:09:10.47 ID:???
やっとでけた

SELECT * FROM crosstab
(
'select id, sec, colval from section'
)
AS
(
id integer,
p1 char(6),
p2 char(6),
p3 char(6),
p4 char(6),
p5 char(6)
);

で、これsec, colvalが可変の場合のストアド教えてください
149NAME IS NULL:2011/04/15(金) 08:24:30.88 ID:???
SQL実行前に、結果のテーブルの型が決まってないといけないから無理じゃないかな。
いっそのこと hstore で 列名→値 のハッシュとして持ってみては?
150NAME IS NULL:2011/04/15(金) 11:34:51.65 ID:???
p1 char(6),のとこが増えるのか。
そのSQLの文字列を作るのなら出来そうだけど。
ストアドの引数に数を渡してループさせてくっつける。
colvalが可変って textじゃダメなん?
151136:2011/04/15(金) 18:13:32.39 ID:???
>>150
> colvalが可変って textじゃダメなん?
間違いです。textでOKです。
152NAME IS NULL:2011/04/16(土) 09:16:12.11 ID:V3FnIgss
select id, sec, colval from section
のレコード数を変数cntに格納して
FORで回しながら
p + cnt + char(6),みたいなイメージでやればいいのだろうか?
153NAME IS NULL:2011/04/16(土) 23:37:00.65 ID:???
Postgres+Apache+PHPで全文検索の質問はここでいいのですか
154NAME IS NULL:2011/04/17(日) 20:04:38.91 ID:???
PostgreSQLの起動を
パソコンの立上げの度にユーザーpostgresになって起動しているのですが
自動起動になるようにrc.localあたりに書き加える方法はないのでしょうか。
155NAME IS NULL:2011/04/17(日) 20:19:54.58 ID:???
>>154
runuser -l postgres -c "起動のコマンド"
156NAME IS NULL:2011/04/18(月) 13:33:47.60 ID:???
SQLで
複数のサブクエリで参照される
一段グローバルなサブクエリを宣言できませんか?
157NAME IS NULL:2011/04/18(月) 14:33:45.01 ID:???
>>156
その結果を一時テーブルに入れる
158NAME IS NULL:2011/04/18(月) 14:36:35.60 ID:???
>>156
バージョン8.4から、共通表式 WITH 句というのが使える
http://lets.postgresql.jp/documents/technical/with_recursive

バージョン8.3以前なら、一時テーブルを作成する
159NAME IS NULL:2011/04/18(月) 19:43:23.03 ID:???
>>157-158
パフォーマンスが3倍弱に向上しました
あり^^
160NAME IS NULL:2011/04/19(火) 00:27:37.32 ID:???
postgresお勧めの書籍についてですが
postgresをインストールした時、デフォルトpostgresDBが作成されてますが、
postgresDBがなんぞや、とか、アーキテクチャや概念の説明がされているような
良書は何かありますでしょうか?公式のマニュアル以外でお願いします。
161NAME IS NULL:2011/04/19(火) 00:45:18.10 ID:???
>>160 講演資料じゃだめ?
PostgreSQLアーキテクチャ入門@PostgreSQLカンファレンス2011
http://www.uptime.jp/ja/resources/techdocs/2011/02/postgresql/
162160:2011/04/19(火) 01:05:29.08 ID:???
>>161
入門としては分かりやすくて良いと思いますが、
もっと詳細でボリュームがあるのが良いです。
あいまいな例になってしまいますが、O'Reillyが出版しているような
分厚くてコアな部分を説明しているような書籍でしょうか?
163NAME IS NULL:2011/04/19(火) 06:01:34.58 ID:???
>>158
共通表式 WITH 句というのを初めて知る事ができました。
ありがとうございます。

ところでこのWITH句は、create temp table と比較して速度は速いので
しょうか?
164NAME IS NULL:2011/04/19(火) 08:36:32.01 ID:???
>>163
プレーンなTEMP TABLEと比べれば、概ねWITHのほうが速い。
内部形式をテーブルの形に整形せずに済むからね。
ただ、さらにTEMP INDEXまで張るようなケースだとインデックスぶんの差が出るかも。
インデックスを張る時間も含めて比べてみてくれ。
165NAME IS NULL:2011/04/19(火) 09:13:17.07 ID:???
>>163
WITH句をロクでもない機能追加と思っている
データベース使いもまた多いから注意。
166NAME IS NULL:2011/04/19(火) 09:48:28.85 ID:???
:(;゙゚'ω゚'):マジで!?
167NAME IS NULL:2011/04/19(火) 10:37:37.11 ID:???
>>166
私も含めてだけど、Codd原理主義者は多いから。
168NAME IS NULL:2011/04/19(火) 11:19:15.72 ID:???
Codd教による宗教戦争か
169NAME IS NULL:2011/04/19(火) 17:16:55.31 ID:???
そんな話は、よそでやってね。
170NAME IS NULL:2011/04/19(火) 19:50:20.88 ID:???
pg_dumpで他ホストのDBをダンプしたときに、自ホストじゃなくてそのホストにファイル保存するような事ってできないかな?
171NAME IS NULL:2011/04/19(火) 20:13:42.95 ID:???
>>170
そのホスト上でコマンドを実行してはいけないの?
172NAME IS NULL:2011/04/19(火) 20:20:13.30 ID:???
>>170
pg_dump単体にそんな機能はないが、運用でどうにでもなる。
あとはスレ違いですな。
173NAME IS NULL:2011/04/20(水) 01:12:06.30 ID:???
うまく回答した体で
174NAME IS NULL:2011/04/20(水) 01:52:27.09 ID:???
>>170
リモート経由して他ホスト上でダンプする
ダンプしたファイルの保存先にネットワーク経由での他ホストを指定する
あとはスレ違いですな。
175PostgreSQL入門以前者:2011/04/20(水) 11:59:25.05 ID:tSpG0ynk
PowerMacG5Quad(PPC) OSX10.5.8 にPostgreSQLをインストールしたいが、
The 9.x installers are supported on Mac OS X 10.5 and above (Intel 32 and 64 bit).
となっていれば、やはり Version 9.0.4-1 は無理で、Version 8.4.8-1 しかだめなのですか?。
176NAME IS NULL:2011/04/20(水) 15:06:28.84 ID:???
gcc入れてコンパイルしちゃえばどうよ
177PostgreSQL入門以前者:2011/04/22(金) 09:11:04.13 ID:tgKyx0+u
>>176
やはり、それしかないですか・・。
ありがとうございました。
178NAME IS NULL:2011/04/27(水) 19:36:28.59 ID:JcDOOqZw
すみません
/usr/local/postgresql-9.0.3/bin/pg_ctl stop -m f /opt/postgresql-9.0.3
しようしたら、pg_ctl: unrecognized shutdown mode "/opt/postgresql-9.0.3"
と出てシャットダウンできないのですが、何方か解決方法を教えて頂けませんか?
/usr/local/postgresql-9.0.3/bin/pg_ctl stop -D /opt/postgresql-9.0.3/
/usr/local/postgresql-9.0.3/bin/pg_ctl start -D /opt/postgresql-9.0.3
は通ります。
http://d.hatena.ne.jp/sin-j/searchdiary?word=*[PostgreSQL]
を参考にインストールしました。
179NAME IS NULL:2011/04/27(水) 20:08:33.16 ID:???
>>178
/usr/local/postgresql-9.0.3/bin/pg_ctl stop -m f /opt/postgresql-9.0.3
をしようとしているつもりが
/usr/local/postgresql-9.0.3/bin/pg_ctl stop -m /opt/postgresql-9.0.3
になってるとかじゃないの?
180NAME IS NULL:2011/04/27(水) 20:11:23.67 ID:JcDOOqZw

/usr/local/postgresql-9.0.3/bin/pg_ctl stop -m f /opt/postgresql-9.0.3
で駄目です。
ちなみに、
/usr/local/postgresql-9.0.3/bin/pg_ctl kill -QUIT 3955 /opt/postgresql-9.0.3
も受け付けません。
とりあえずサーバーをrebootしてデータベース止めましたが、根本的な解決が出来てない状態です。
181NAME IS NULL:2011/04/27(水) 20:35:02.13 ID:???
/usr/local/postgresql-9.0.3/bin/pg_ctl stop -m f -D /opt/postgresql-9.0.3
こうじゃなくて?
182NAME IS NULL:2011/04/27(水) 20:35:48.48 ID:???
あと、killはこう。マニュアルからの引用だけど。
pg_ctl kill [signal_name] [process_id]
183NAME IS NULL:2011/04/27(水) 21:14:20.67 ID:JcDOOqZw
すみません。 -D オプション付け忘れてました。
ご迷惑をお掛けしました。
184NAME IS NULL:2011/05/02(月) 13:10:18.43 ID:nb/Rz/pD
MySQLでいう所のmysqladmin statusみたいな出力をしてくれるアプリって何ですかね?
MySQLだとmysqladmin versionとかでも↓みたいな出力を吐いてくれるんで
RDToolでグラフ化して利用してたんですけど、PostgreSQLだとどうにも勝手が分からなくて…………
Uptime: 1473624 Threads: 1 Questions: 39487
Slow queries: 0 Opens: 541 Flush tables: 1
Open tables: 19 Queries per second avg: 0.0268

なんかドキュメント見てもps使えとか、一々ビューから引っぱってこいとか、postgresサーバの
状態が知りたいだけなのにトンチンカンな事しか書いてないんで心配になっちゃって……
185NAME IS NULL:2011/05/02(月) 13:51:19.47 ID:???
トンチンカン?何をトンチンカンなことを言っているのかね。
186NAME IS NULL:2011/05/02(月) 14:09:54.33 ID:???
mysqladmin stausの実装って、sqlで取ってくるだけじゃないの?
187NAME IS NULL:2011/05/02(月) 14:47:36.51 ID:???
監視スクリプトの例 munin pgとmy
http://munin-monitoring.org/wiki/plugin-mysql_status_
http://munin-monitoring.org/attachment/wiki/plugin-pg__all_tables_activity/pg__all_tables_activity

まあ、mysqlのが至れり尽くせりかもしれないね。
ps auxでsql実行リストが見える
uptimeは、上のようなstatusテーブルから、sqlで引くなりかな
http://archive.linux.or.jp/JM/html/procps/man1/ps.1.html
188NAME IS NULL:2011/05/03(火) 00:17:15.75 ID:???
>>184
Postgres だと組み込みの pg_stat* 系のビューが充実している。
定型処理用の既製品なら pg_top, pgstatspack, pg_statsinfo のあたりかな。
189NAME IS NULL:2011/05/03(火) 19:28:18.17 ID:???
postgresql-9.0.3で以下のような
テーブルを作ってデータを常時insertする場合
postgresqlだと何兆件ぐらいまで
現実的な処理時間で扱えるのでしょうか。

create table test (
key char(064) primary key,
data1 char(512),
);
190NAME IS NULL:2011/05/03(火) 20:15:11.21 ID:???
それが確認できる環境の人いないと思うから石井さんとかにメールしてみたら
191NAME IS NULL:2011/05/03(火) 20:16:50.23 ID:???
と思ったけど現実的な処理時間で扱える件数しかそのテーブルに入らなかった
192NAME IS NULL:2011/05/03(火) 20:23:19.76 ID:???
つーか、質問の仕方も知らない馬鹿な厨房なんか相手にすんなよ
193NAME IS NULL:2011/05/03(火) 20:35:04.25 ID:???
PenPRO+MEM32MBで100兆件まで余裕でいけるよ!
194NAME IS NULL:2011/05/04(水) 15:38:02.46 ID:???
1兆件で500TB超えるのでマトモには動かないだろうなあ
195NAME IS NULL:2011/05/05(木) 15:18:53.93 ID:???
PgCon 2011でPostgres-XC1.0
について何か言及あるの?
196NAME IS NULL:2011/05/06(金) 00:26:37.18 ID:hR3GPIpU
エロい人教えてください。

func_a("key" integer);
ってストアドファンクションがあるとして
Npgsqlを使ってC#で値を引数"key"に入れたいんだけど
どうしたらいいの?

da.command = new NpgsqlCommand
(
"select func(:key);",conn
);
if (combobox1.SelectedItem == null)
{
da.command.Parameters.Add(new NpgsqlParameter("key",
NpgsqlTypes.NpgsqlDbType.Integer, 0, "key",
ParameterDirection.Input, false, 0, 0, DataRowVersion.Current,
DBNull.Value));
}
else
{
// SelecteItemがある場合
DataRowView row = (DataRowView)combobox1.SelectedItem;
da.command.Parameters.AddWithValue("key", row["key"]);
}
では、keyに値が入ってこないんだけど...
197196:2011/05/06(金) 00:27:57.51 ID:hR3GPIpU
× "select func(:key);",conn
○ "select func_a(:key);",conn
スマソ
198NAME IS NULL:2011/05/06(金) 03:06:54.82 ID:???
何でもっと簡素化したコードで確認しないのだろうと思う。
199NAME IS NULL:2011/05/08(日) 11:19:07.36 ID:???
9.1って凄いの?
200NAME IS NULL:2011/05/08(日) 14:45:28.31 ID:???
なにが?
201NAME IS NULL:2011/05/08(日) 15:46:46.09 ID:???
CREATE FUNCTION 初体験何ですが
パラメータのデフォルト値としてサブクエリが使えないなら

どうやってパラメータが省略された場合にテーブルの全行数とするなんて定めることができるのでしょうか?
202NAME IS NULL:2011/05/09(月) 02:21:33.04 ID:???
SQL書いて。
203NAME IS NULL:2011/05/10(火) 17:39:23.00 ID:???
>>201
トリガーは?
204NAME IS NULL:2011/05/10(火) 22:00:59.44 ID:???
SQLAdminが日本語文字化けするんです
SQL入力するとき日本語文字がロロロロロってなります

エラー時のステータスバーには正しい日本語エラー通知文が出るんですが
不便です

設定の仕方を教えて下さい
205NAME IS NULL:2011/05/10(火) 22:16:40.66 ID:???
フォント
206NAME IS NULL:2011/05/11(水) 04:37:38.27 ID:???
>>205
あり^^
207NAME IS NULL:2011/05/11(水) 14:07:53.56 ID:???
>>202
なるほど、
(範囲の最後をデフォルトで0にして)
SQL(のCASE式の方で分岐させる形で)書いて。

そういうことですね?
できました。有り難うございました
208NAME IS NULL:2011/05/11(水) 22:57:26.34 ID:???
藻前ら!エスパーかよ
209NAME IS NULL:2011/05/11(水) 23:19:56.32 ID:???
データベース初心者なんですけどMysqlとPostgreSQLを掛け持ちで覚えるのってやめたほうがいいですか?
どちらか一つ1年ぐらいいじってからのほうが効率いいですか?
210NAME IS NULL:2011/05/11(水) 23:37:48.90 ID:???
その質問には意味があるのだろうか。
不安なの?
211NAME IS NULL:2011/05/12(木) 00:19:24.55 ID:???

無駄な煽りレスは控えようか
212NAME IS NULL:2011/05/12(木) 05:32:23.46 ID:???
やめた方がいいですよーっていえばいいの?それとも、全然大丈夫ですよーっていえばいい?
人それぞれでしょそんなの。
213NAME IS NULL:2011/05/12(木) 08:08:16.99 ID:???
基本的な部分はおんなじだから両方使ってみればいいんでないの?
214NAME IS NULL:2011/05/12(木) 11:03:01.79 ID:???
片方に慣れちゃうともうかたほうやるのがおっくうになるから
今のうちに並行でやった方がいいかもなw
215NAME IS NULL:2011/05/14(土) 20:29:29.85 ID:???
one_side the_other value
30 31 23
31 30 23
4 31 20
31 6 20
6 31 20
31 4 20
19 30 19
30 19 19
7 27 17
35 18 17
: : :

one_sideとthe_otherのペアとして認識して
逆順になっているだけのペアは纏める方法を教えて下さい
216NAME IS NULL:2011/05/14(土) 21:06:45.38 ID:???
宿題を持ち込まないように
217NAME IS NULL:2011/05/14(土) 21:08:09.70 ID:???
[1, 2] と [2, 1] を同列に扱いたいってこと?
sort 使っていいなら、こう。
(手元に 9.xないから動くか分からないけど)

SELECT k, count(*) FROM (
SELECT sort(ARRAY[one_side, the_other]) AS k, value
FROM data_table
) tmp GROUP BY k;

使えないなら、卑怯だけど2つ限定でこう。

SELECT k, count(*) FROM (
SELECT ARRAY[least(one_side, the_other), greatest(one_side, the_other)] AS k, value
FROM data_table
) tmp GROUP BY k;

っていうネタを思いついた。
ちゃんとやるにはどうするんだろう?
218NAME IS NULL:2011/05/14(土) 23:14:54.57 ID:???
>>217
SELECT DISTINCT
  trim( both '''' from split_part(
    (one_side::text ||' '|| the_other::text)::tsvector::text,
    ' ', 1))::int one_side,
  trim( both '''' from split_part(
    (one_side::text ||' '|| the_other::text)::tsvector::text,
    ' ', 2))::int the_other,
  value

でいけました。
が、パフォーマンスが心配です。。。
219 ◆XEE2zLj0dE :2011/05/15(日) 10:07:03.31 ID:???
こうかな。
SELECT * FROM table T1
WHERE one_side <= the_other OR NOT EXISTS(SELECT * FROM table T2 WHERE T1.one_side = T2.the_other AND T1.the_other = T2.one_side)

列の順番崩していいならこうかな。
SELECT DISTINCT
CASE WHEN one_side < the_other THEN one_side ELSE the_other END AS one_side,
CASE WHEN one_side < the_other THEN the_other ELSE one_side END AS the_other,
value
FROM table
220NAME IS NULL:2011/05/15(日) 17:18:50.93 ID:???
あり^^
221NAME IS NULL:2011/05/15(日) 21:54:20.40 ID:???
ウィンドウ関数の作り方が分かりません
点数列からその点毎の偏差値を計算する関数を作ろうと思ったのですが
これはウインドウ関数に属しますよね?
22270:2011/05/18(水) 17:34:12.21 ID:???
遅くなりましたが、事故解決いたしましたので投稿します。

以下のランタイムをインストールすることで
エラーがでなくなります。

Microsoft Visual C++ 2010 Redistributable Package (x86)
http://www.microsoft.com/downloads/en/confirmation.aspx?FamilyID=a7b7a05e-6de6-4d3a-a423-37bf0912db84
22370:2011/05/18(水) 17:36:53.28 ID:???
>96

>222の内容ですが、
すでに96で指摘されていたんですね。
気づかなくて申し訳ありません。
224NAME IS NULL:2011/05/18(水) 18:44:00.27 ID:???
2ヶ月も無駄にしたのか・・・
225NAME IS NULL:2011/05/18(水) 23:36:11.88 ID:???
GUIベースだと標準エラーが表示され無いから分からんよな。
ダウンロードページにも書いてないし、同時にインストールされないのは、この規模のソフトウエアでは、あまり見かけないかも

http://www.postgresql.org/download/windows
226NAME IS NULL:2011/05/20(金) 23:09:48.42 ID:???
こだまでしょうか?
いいえ、ばかです。
227NAME IS NULL:2011/05/23(月) 23:17:33.87 ID:???
postgresって拡張やら色々出来て便利なんだが
色々出来すぎて時々何が何やらわからなくなる

ごめんなさい。ただ俺が病んでるだけです
あぁ辛い、もう体が持たん
228NAME IS NULL:2011/05/24(火) 06:34:06.49 ID:???
色々やらずに基本的な機能だけ使えばおk
229Shingo Amemiya:2011/05/24(火) 19:55:12.70 ID:4mD3ni9s
I will be out of the office starting 2011/05/24 and will not return until
2011/05/25.
230sage:2011/05/26(木) 02:34:47.29 ID:???
Oracleからポスグレに乗り換えることを検討していますが、やはりバックアップが大変気になります。
運用として、フルバックアップと差分バックアップを使い分けて実施すると思いますが、皆さんはどんなバックアップを運用されてますか?
231NAME IS NULL:2011/05/26(木) 17:33:56.56 ID:???
http://enterprisezine.jp/article/detail/3149?p=2
15分ルール、ポスグレでも似たようなもんなんだろうけど、Winのインストーラーがなんか今一歩残念なんだよな。
232NAME IS NULL:2011/05/30(月) 10:52:35.19 ID:???
地域のオプションで通貨の小数点以下の桁数を2にして
Windows2000で9.0.3をインストールしたのですが
表示が変です

単純に数値の2桁めと3桁めの間に小数点を打ってるだけのようです
つまり\320が\3.20などと表示されるのです
正しくは\320.00の筈です

そこで地域のオプションで通貨の通貨の表示をデフォルトに戻し
OSを再起動しましたが

一向に変わりません

再インストールしかないでしょうか?
233NAME IS NULL:2011/05/30(月) 17:39:42.42 ID:???
そりゃそうなるだろ
具体的に何をどう設定して、実際は何が欲しいのさ
234NAME IS NULL:2011/05/30(月) 21:19:29.24 ID:JWqkOLWP
すみません、急にPOSTGREが起動できなくなりました。
これまでは良かったのに。

Is the server running locally and accepting
connections on Unix domain socket "/tmp/.s.PGSQL.5432"?

というエラーが出ます。ちなみに.s.PGSQL.5432というものは
どこにも存在しません。ちなみに8.3でubuntuです。
どの辺をいじればいいのでしょうか。ノイローゼ気味です。
助けてください。
235NAME IS NULL:2011/05/30(月) 21:35:15.56 ID:???
>>234
ls -a /tmp/.s.PGSQL.5432
で存在が確認できるはず。
236NAME IS NULL:2011/05/30(月) 21:37:42.64 ID:???
237NAME IS NULL:2011/05/30(月) 22:27:51.58 ID:JWqkOLWP
>>235さま
ありがとうございます。そこには何もないんです。また/var/run/postgresql/の
下にあるというのも読んだので、調べましたが、ないんです。何もないのが
問題なんでしょうか?

>>236amaさま
そこも実は見たのですが、解決方法がわかりません。pg_hba.confをいじって
local all all trust
などにすればいいんでしょうか?
238NAME IS NULL:2011/05/30(月) 22:51:42.94 ID:???
Is the server running locally and accepting
 connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
のエラーはクライアントが「サーバー立ち上がってねーぞゴルァ!」って言ってるエラーだと思う
つまりクライアントだけ立ち上げようとしてるんじゃね?

ちなみにウチの環境だと鯖立ち上がってると/tmp/.s.PGSQL.5432は存在するね
239NAME IS NULL:2011/05/30(月) 23:22:01.71 ID:JWqkOLWP
>>238さま
まさにおっしゃるとおりかなと思って、
postgres@XXXXX:/$ pg_ctl start
してみても、
bash: pg_ctl: コマンドが見つかりません
と出てきます!postmasterも駄目です。
もうあきらめて再インストールとか、再initdbしたほうがいいんでしょうか。
昨日までは動いていたのにグレちゃったんでしょうか?不思議です!!
240NAME IS NULL:2011/05/30(月) 23:29:56.57 ID:???
多分コマンドの打ち間違いとか、パス通ってないとか、動かす権限がないユーザー
で起動しようとしてるとかそういう人的なミスだと思うから焦らずじっくりもう一度
見直してみたら?
241NAME IS NULL:2011/05/30(月) 23:43:34.75 ID:???
>>234
つか動かなくなる直前に何をしたかくらい覚えてないのかい。
242NAME IS NULL:2011/05/30(月) 23:44:28.14 ID:JWqkOLWP
>>240さま
そうですね、もう一度一つ一つチェックしていきます。
今日はもう寝ます。つきあってくださり本当にありがとうございました。
243NAME IS NULL:2011/05/30(月) 23:45:35.94 ID:???
ディスク溢れてるんじゃない?
244NAME IS NULL:2011/05/31(火) 03:58:06.42 ID:???
>>233
monetary型の平均を取ろうとしたら小数点切り捨てられるので
下2桁まで表示して欲しくて、ロケール設定しました

でも期待した通りどころか普通の金額表示までおかしくなってしまった為
諦めて元に戻そうかとコントロールパネルでロケール設定を戻しても
もはや言うことを聞かず今だにおかしな表示のままなのです

現状   : \12,345,678,900 → \123,456,789.00
最善の要求: \12,345,678,900 → \12,345,678,900.00
次善の要求: 元に戻す
245NAME IS NULL:2011/05/31(火) 09:48:58.60 ID:???
monetary型っての使ったこと無いから良く判らんが整数の型に入ってるっぽいね
246240:2011/05/31(火) 11:24:36.69 ID:fzGRftAT
昨日起動できなくなってしまった者なのですがpostgresql.confの
tcipip_socket = trueの行を消して
/etc/init.d/postgresql-8.3 restart
で復活しました。
お騒がせしました。
アドバイスくださった皆様ありがとうございます。
247NAME IS NULL:2011/05/31(火) 11:47:54.80 ID:???
・・・それ、解決してるのか?w
248NAME IS NULL:2011/05/31(火) 12:37:26.96 ID:???
多数のビューから参照されているテーブルが壊れました

作り直そうと思いますが
削除するにも依存関係でズブズブです

要領よくテーブルを作り直す手順を教えて下さい
249NAME IS NULL:2011/05/31(火) 14:36:59.94 ID:???
いったん、依存関係を切って消してまたつける、とかでもいいのかな?
250NAME IS NULL:2011/05/31(火) 14:42:53.34 ID:???
>>246
tcipip_socketは7.xまでの設定用だ
8.3なのに古いconfigからわけもわからずコピーしてきたのか?
251NAME IS NULL:2011/05/31(火) 15:30:08.41 ID:???
pgfoundry.orgに繋がらん・・
252NAME IS NULL:2011/05/31(火) 16:24:36.21 ID:???
>>248
dumpして該当テーブル書き換えて
253NAME IS NULL:2011/05/31(火) 18:40:19.18 ID:???
>>249
そんなこと出来るんですか?
教えてくだしあ
254240:2011/05/31(火) 20:26:07.87 ID:fzGRftAT
>>250
そうなんです。
他からコピペしてきたのが問題だったようです。
おかげですっきりしました。
255232:2011/06/01(水) 04:18:35.50 ID:???
自己解決しました

管理者でもカレントユーザーでもなく
postgresアカウントの方の地域のオプションだったとは……
うっかりしてました
256NAME IS NULL:2011/06/01(水) 11:50:14.24 ID:???
>>253
マニュアルにあったと思う。
ALTER TABLE 〜 DROP CONSTRAINT なんちゃら
とかかな
作業終わったら
ALTER TABLE 〜 ADD FOREIGN KEY なんちゃら
で付けなおす
257NAME IS NULL:2011/06/01(水) 13:39:58.94 ID:UJoI79+i
ライセンス表記と無保証表記を書いたテキストファイルを置いておけば、
商用のウェブサーバに導入しても良いという認識であっていますか?

ちなみに、置く場所は、ユーザがアクセスできない場所(WEB-INFフォルダ下など)です。
258NAME IS NULL:2011/06/01(水) 14:09:54.54 ID:???
それは再配布、再利用に関する話で、
通常の利用に関してそういうものはない。
BSDライセンスと付属のドキュメント見てみよう
259NAME IS NULL:2011/06/01(水) 18:18:15.28 ID:???
>>258
レスありがとうございます。

PostgreSQLのインストーラ等を納品物の一部として含める場合は必要で、
別途ダウンロードしてインストールする場合は不要、
という認識でよろしいでしょうか?
260NAME IS NULL:2011/06/02(木) 00:48:34.97 ID:???
だいたいあってる
261NAME IS NULL:2011/06/02(木) 07:18:45.09 ID:gmaEZeJk
>>260
ありがとうございました。
262NAME IS NULL:2011/06/02(木) 20:43:28.39 ID:???
ウェブサーバにPostgreSQLを導入した場合、セキュリティホールになりますか?
263NAME IS NULL:2011/06/02(木) 22:35:08.17 ID:???
どちらかというと、ウェブサーバーのセキュリティ破られたとき、root取られたらそのままデータが漏れるのが問題。
なるべく低いレイヤーで、localhostかlocal networkのみにdb接続制限すれば、
、非公開dbサーバーとほぼ同じ脆弱性になる。
264NAME IS NULL:2011/06/02(木) 22:37:46.16 ID:???
って、サーバー分けても、一般接続のDBパスワードもれるのか
265NAME IS NULL:2011/06/02(木) 23:11:09.83 ID:???
そのDBユーザー/パスワードでシェルログインできなければまだマシなんじゃない?
266NAME IS NULL:2011/06/03(金) 00:42:08.68 ID:???
Webサーバがやられた時点でもうアウトだろw
てか、きっちりFW設定してhttpdも最新にした上で、
アプリがカスでなければPort80/443から問題が起きるとかそうそう無いだろ
物理的に分かれてた方が、そりゃぁマシだけれど
267NAME IS NULL:2011/06/03(金) 03:41:09.68 ID:???
ウインドウ関数は簡単には登録できないのですか?
268NAME IS NULL:2011/06/03(金) 05:59:55.63 ID:???
指定された型のテーブルを引き数にとる関数定義は不可能ですか?
269262:2011/06/03(金) 07:18:01.48 ID:v2spQfh9
ありがとうございました
270NAME IS NULL:2011/06/03(金) 07:19:32.56 ID:???
エクリプスのエミュレータでの動作は信頼できませんか?
271270:2011/06/03(金) 07:58:03.82 ID:???
すみません、誤爆しました。
272NAME IS NULL:2011/06/03(金) 08:06:00.22 ID:???
ユーザ関数定義で
VARIADIC 引き数名 テーブル名.カラム名%TYPE[]
ってできないんですね

ここだけ直接型名書かないといけないなら
参照するテーブルの型が変更になったら面倒くさいですね
273NAME IS NULL:2011/06/03(金) 11:16:11.37 ID:???
まさかとは思うが
先頭に.がついてるから見えないとか言うオチはないよな
274NAME IS NULL:2011/06/03(金) 11:26:50.02 ID:???
.テーブル名.カラム名%TYPE[]とやっていやしないかということですか?
いいえ
275NAME IS NULL:2011/06/03(金) 12:32:45.53 ID:???
>>274
273のものです
誤爆でしたごめんなさい
276NAME IS NULL:2011/06/03(金) 15:21:26.84 ID:???
enum を 'a','A','b','B','c','C'…と作ってしまいました

後になって今更'a','b','c',…,'A','B','C'…の方が良い事に気づきましたが
pg_enumをいじって変更すると
この型を使うテーブルのデータが狂ってしまうでしょう

円満に解決できませんか?
277NAME IS NULL:2011/06/04(土) 06:49:25.54 ID:???
ひょっとして関数作る時にplpgsqlはあんま使わない方が良いの?
これ使おうとすると原因不明のエラーに悩まされる事が多い気がする
278NAME IS NULL:2011/06/04(土) 10:06:06.36 ID:???
>>277
原因不明のエラーなんて無いよ。エラーメッセージを読もうよ。
279NAME IS NULL:2011/06/04(土) 10:19:01.98 ID:???
○○してしまうでしょう、なんて占い師が使うような言い回しに振り回されずに
エラーメッセージを元に対応すべきですね
280NAME IS NULL:2011/06/04(土) 10:55:50.97 ID:???
>>276
テーブルサイズにもよるけど、新しいenum型と新しいテーブルを作って
データを移し変えたほうが、悩んでいる時間よりも早いのでは。後から rename すれば良い。
281NAME IS NULL:2011/06/05(日) 07:29:48.01 ID:???
>>278
○○付近でエラー
っていうふわふわしたヒントしかくれないんだもん……
sqlに戻すと上手く行ったりするし
これ独自拡張でしょ?実装にまだ不備があんじゃないの?って思ってしまう
282NAME IS NULL:2011/06/05(日) 07:33:31.68 ID:???
>>279
問題はエラーとして補足されない事実上のエラーのことなんですよ
283NAME IS NULL:2011/06/05(日) 07:34:30.19 ID:???
>>280
あり^^
284NAME IS NULL:2011/06/05(日) 09:26:10.37 ID:???
>>281 ○○付近でエラー
ふわふわしたエラーを、さらにふわふわさせて書き込まれても助けられないよ。
実際の入力と、実際のエラーをさらすべき。PL/pgSQLは10年以上の実績が
あるわけで、普通に考えて、あなたのミスである可能性のほうが高い。
285240:2011/06/06(月) 16:05:29.47 ID:PRzZI/xi
byteaのカラムを作って、画像を格納&取り出ししようとしているのですが、
PHPのサンプルどおりに作ると、画像でなく長い文字列で表示されてしまいます。

PHPのサンプル画像格納
http://jp.php.net/manual/en/function.pg-escape-bytea.php

PHPのサンプル画像取り出し
http://jp.php.net/manual/en/function.pg-unescape-bytea.php

ヘッダーもサンプルどおり出力しているのですがどうすればいいのでしょうか?
ノイローゼ気味です。教えてください。

ポスグレは8.3です。よろしくお願いします。

*pg_escape_byteaのところでいろんなコメントと崩れるのを回避するコードが
ありましたが、どれもゴミコードで動きませんwww
286NAME IS NULL:2011/06/06(月) 16:43:22.71 ID:???
出力をファイルに保存したら画像として開けてるの?
287240:2011/06/06(月) 19:44:36.15 ID:PRzZI/xi
>>286
そうですね。ちょっとテストしてみます。
288NAME IS NULL:2011/06/07(火) 10:26:25.10 ID:???
MIME_TYPE
289285:2011/06/07(火) 13:41:23.28 ID:LcV5pV7u
>>286さま,>>288さま
PHPでローカルフォルダのファイルをいきなり表示するコードを
書いたらちゃんと画像が出たので、原因はbyteaにあるような
気がします。が、先に進めないので、別の保存方法を考えます。
みなさん、ありがとうございました。
290NAME IS NULL:2011/06/07(火) 14:21:00.75 ID:???
差分とったらいいじゃない
291NAME IS NULL:2011/06/07(火) 15:40:59.00 ID:???
ちょっと調べてみたけど、phpのバージョンとlibpq.soのバージョンによるみたいだぞ
292NAME IS NULL:2011/06/07(火) 15:50:01.30 ID:???
CentOSでyumで入れたPHP5.1.6にlibpq 8.1.22
だと同様の結果になるが、
自分でソースからビルドした PHP5.2.17にlibpq 9.0.3
だとうまくいった。
DBとlibのバージョンあわせてみ?
293NAME IS NULL:2011/06/07(火) 18:48:46.16 ID:???
あとはpg_unescape_byteaを自分で作ってしまえばいい、
そんな手間じゃないだろうし、ソースもあるだろ
294NAME IS NULL:2011/06/07(火) 23:07:56.13 ID:???
商用のWEBサーバを構築するのに使用する場合、ライセンス費用が掛かりますか?
商用ライセンスというのがあると聞いたのですが、いくらくらい掛かりますか
295NAME IS NULL:2011/06/08(水) 10:11:32.43 ID:???
>>294
ライセンス費用はかかりません。
商用ライセンスというのもありません。
MySQLとの勘違いじゃないかな?
PowerGresのように、PostgreSQLを独自に改造して販売している製品や、サポート業務を有料で請け負ってくれる会社ならあるよ。
296NAME IS NULL:2011/06/08(水) 14:04:13.02 ID:???
PostgreSQLライセンスはBSDライセンスとほぼ同じで緩いライセンス。
ライセンス記述だけ残しておけば、改変しても、ソースなしでのバイナリ配布も販売も可能。

http://www.postgresql.org/about/licence
297NAME IS NULL:2011/06/08(水) 14:05:50.26 ID:???
あ、copyrightの文も必要ですね。

MITライセンスに近いそうだ。
http://postgresql.g.hatena.ne.jp/pgsql/20101009
298NAME IS NULL:2011/06/08(水) 23:28:53.43 ID:???
>>295-297
ありがとうございます。
すみません、MySQLと勘違いしていたようですね。
ライセンス違反しないように留意します。
299NAME IS NULL:2011/06/13(月) 22:40:35.70 ID:bgOKQ0eV
PostgreSQL 8.3.14 を使っているのですが、テーブル数の制限数はるのでしょうか?
max_fsm_relationsに最大テーブル数を設定するようなことを見たことがあるのですが、実際に試してみると、max_fsm_relationsに設定した数よりも多くテーブルを作成することができました。
max_fsm_relationsよりも多くテーブルを作成すると、何か問題が発生するのでしょうか??
300 ◆XEE2zLj0dE :2011/06/13(月) 22:57:46.72 ID:???
その項目をそのように説明しているサイトのことを思い出す必要はないが、
その項目がなにを意味するかをマニュアルで読む必要はあると思う
301NAME IS NULL:2011/06/14(火) 00:19:59.66 ID:???
PostgreSQL 8.1.11を使っています。
内部エンコードはUTF8です。

'9:9ド'や'0:0あ'などの文字を追加すると
'9$1ド'や'0$1あ'などに勝手に置き換わってしまいます。
'9:あ'や':9あ'では問題ないのですが、原因は何でしょうか?
302NAME IS NULL:2011/06/14(火) 00:39:52.15 ID:???
9.0 でレプリケーション中、プライマイリ側がダウンした場合、
スタンバイ側は、どういう風にしたら、参照オンリーから更新も可能になるようになりますか?

スタンバイ側にトリガーファイルを設定したら、recovery.done になって、
それまで起動して参照できていたのに、スタンバイ側のPostgreSQLもダウンして参照もできなくなってしまいます。
303NAME IS NULL:2011/06/14(火) 01:46:40.68 ID:???
>>299
max_fsm_relations よりも多くのテーブル / インデックスが
更新されるようだと、VACUUMの効果が弱まることがある。
予め多めに設定しておくか、設定する必要の無くなった 8.4 以降を使いましょう。
304NAME IS NULL:2011/06/14(火) 01:48:51.47 ID:???
>>302
トリガーファイル → recovery.done までは正しい手順だと思うよ。
スタンバイがダウンするのは謎。何かエラーメッセージがログに残っている?
305NAME IS NULL:2011/06/14(火) 12:02:58.29 ID:???
>>304
ありがとうございます。

再度調べたところ、トリガーファイル作成でダウンではなく、
プライマリ側をダウン(サービス停止)させると、スタンバイ側もダウンしてしまいます。

トリガーファイルを作成する前にダウンです。
プライマリ側をダウンさせる前までは、レプリケーション状態は正常でした。

ログをみて原因を調べたところ、
フォルダ構成が間違っていたためダウンしたようです。

ログを見るというご指摘で原因がわかりました。
ありがとうございました。

リアルタイムなレプリケーションと
プライマリの障害後のスタンバイの正常稼働も確認、ログも正常に

『トリガファイルが見つかりました』
『アーカイブリカバリが完了しました』
『データベースシステムの接続受付準備が整いました。』
『自動バキュームランチャプロセス』

などと吐き出されました。
これで、少しは安心ですね。

あとは運用時に実際に障害が起きた時に
きちんとスタンバイ側が稼働することを祈るだけです。
306NAME IS NULL:2011/06/14(火) 13:33:48.41 ID:???
>>301
追加とあるけど、どうやって追加をしたのか
こちらで再現できるだけの環境とやり方書いてくれないか?
307NAME IS NULL:2011/06/14(火) 21:33:24.84 ID:???
>>305
レベル低すぎやろ・・・
めんどくさがらず自分を過信せずやらんと。
信じる物はDBのソースとマニュアルとログ。
2chで泣きつく奴はこの程度
308NAME IS NULL:2011/06/14(火) 23:31:03.47 ID:???
>>307
レベル低くてもなんとか、>>304 さんのおかげで、できました。
まだ細かい点で不明な点もあり問題はありますが。

Linux版 は情報があるからそのとおりにすれば比較的簡単だけど、
Win版は情報がないから苦労しました。

わかってしまえば単純で簡単だけど、
わからないことに気づくのはなかなか大変ですね。

もう少しマニュアルやサンプルがあると私のようにレベルが低い人にもわかりやすくなるんですけどね。
309NAME IS NULL:2011/06/15(水) 00:06:50.56 ID:???
>>308
そういうのをブログとかで公開していくといいんだよ。
マニュアル読んですぐ分かる内容はだめだけど。
310NAME IS NULL:2011/06/16(木) 07:43:00.33 ID:R1vBe+KD
日本PostgreSQLでLinux用の9を探したけど、ソース版しかなかった・・・
コンフィグ実行してgmakeするだけとはいえ、なんで面倒なんだよな・・・
どうしてrpmを用意してないんだ?
311NAME IS NULL:2011/06/16(木) 07:53:15.87 ID:???
おいおい大丈夫かw
312NAME IS NULL:2011/06/16(木) 09:01:22.75 ID:???
313NAME IS NULL:2011/06/16(木) 18:36:56.61 ID:???
関数定義のあとのOWNER TOとCOMMENT ONの方の関数の型には
デフォルト引き数書いちゃイケないのか!
そういうことはもっと早くにいってよ!
314NAME IS NULL:2011/06/16(木) 21:35:17.29 ID:???
基本的な質問で申し訳無いですが、
UTF-8 使用時の varchar のサイズって、
1 文字あたり 3 バイトで合っていますか?

あと、開発に使う PostgreSQL JDBC Driver ですが、
サーバ上に置いて使ったり配布したりする場合は、
ライセンスを書いたテキストを置いておく必要がありますか?
315NAME IS NULL:2011/06/16(木) 21:39:37.87 ID:???
カラムサイズミロ
316NAME IS NULL:2011/06/16(木) 22:57:46.84 ID:???
>>315
ありがとうございます。
カラムサイズの見方を調べます。
317NAME IS NULL:2011/06/17(金) 00:27:28.86 ID:???
>>314
>ライセンスを書いたテキストを置いておく必要がありますか?
ずばりそのライセンスに書いてある
http://jdbc.postgresql.org/license.html
より、一部抜粋
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.

参考訳文
バイナリ形式で再配布する場合、上記著作権表示、本条件書および下記責任限定規定を、配布物とともに提供される文書 および/または他の資料に必ず含めてください。
318NAME IS NULL:2011/06/17(金) 07:23:10.86 ID:78HPp+Du
>>317
ありがとうございます。
ライセンス条項を書いたファイルを、
jar ファイルと同じフォルダ内に配置するようにします。

ライセンスを気にするようになってから、
英語をまじめに勉強しておけばよかったと後悔しています。
319NAME IS NULL:2011/06/17(金) 08:53:36.41 ID:???
>>314
UTF-8 は可変長エンコーディングだから、1文字あたり 1〜6 バイト。
(PostgreSQLは4バイト以上になる文字もちゃんと扱える)
日本語の文字は概ね3バイトずつなので、概算なら3バイトで計算しても良いとは思う。
320NAME IS NULL:2011/06/17(金) 12:52:50.17 ID:???
なぜ text型があるのに、varchar で文字数制限するんだろう?
321NAME IS NULL:2011/06/17(金) 14:01:42.60 ID:???
varchar(n)の見積もりってどうするんでしょうね?
ある程度文字数が増えると勝手に圧縮されたり
ページサイズをまたぐ長さになるとTOASTが働いたりと
正確な見積もりしづらそうなんですが・・・

自動で圧縮する機能とトーストって別物だと思っていいですよね。
322NAME IS NULL:2011/06/17(金) 14:03:07.76 ID:???
昔nが文字数を示してることすら知らない奴が
postgreSQLのテーブル設計しててイラついた。
しかも先に言ってよとか、死ねばいいのに。
何をもとに設計してたんだよ屑。
323NAME IS NULL:2011/06/17(金) 14:25:17.61 ID:???
>>310-312

日本PostgreSQLユーザー会のホームページは、
ダウンロード先も含めて、わかりやすいとは言えないだろうね。
http://www.postgresql.jp/PostgreSQL/9_0/9_0_4

各種rpmがあったほうが便利だけど、それを積極的にしないのが、
Linuxユーザーの悪いところかもね。
324NAME IS NULL:2011/06/17(金) 14:35:26.77 ID:???
バカを育てるマネを要求するなよ。
325NAME IS NULL:2011/06/17(金) 20:20:25.61 ID:???
Linux使ってる以上、コマンドラインからコンパイルするくらいデフォだよな
むしろ、ダブルクリックひとつでインストールできるWindowsがおかしいんだよ
326NAME IS NULL:2011/06/17(金) 20:38:07.43 ID:78HPp+Du
select octet_length(列名) で調べたところ、
半角文字は一文字 1 バイト、全角文字は一文字 3 バイトでした。
ただ、ここのレスを見ていると、最大 1 文字 6 バイトもあるようですね。
可変だと想定する最大のディスク容量の計算が困りますね。
6 バイトで計算してしまうと、英語しか使わなかった場合には、
単純計算で 6 倍も計算が狂ってしまいます。
最大件数格納しても、ディスクはガラガラのスッカンカンということになっていまう。
うーん、どうすれば・・・。
327NAME IS NULL:2011/06/17(金) 20:48:20.30 ID:???
無駄な領域はできないよ。
そもそも最大を制限するために使うんだろ?
何を心配しているんだ?
328NAME IS NULL:2011/06/17(金) 20:52:20.75 ID:???
>>326
保存を想定しているデータの一文字あたりの平均バイト数を
サンプリングなどして調べるか、
それができないなら、適当に分布を仮定して計算するしかないのでは?
329NAME IS NULL:2011/06/17(金) 20:56:49.91 ID:???
>>327
仕事で使うので、ストレージとかパーティションサイズとか、
十分かどうか見積もって計算しないといけないことになってるんじゃないかな?

まあ、ディスクがガラガラになっても、それほどもったいないほどにはならないかも知れないけど
330NAME IS NULL:2011/06/17(金) 21:54:57.26 ID:???
ストリーミングレプリケーションを使ったときって
スレーブ側のpg_catalogに現われる統計値なんかマスタのものになりますか?

見たところ違うような気もしますが・・・
331NAME IS NULL:2011/06/17(金) 22:25:39.56 ID:???
>>330
pg_catalog の統計地はマスタと一致する。ただ、含まれている統計情報は
データの分布に関するもの (ANALYZE) なので、特に問題はないはず。
逆に、アクセス統計情報 (pg_stat*) は、マスタとスレーブで別集計。
バッファヒット数などの統計なので、こちらも違って当然。
全体として、矛盾は無いはずだよ。
332NAME IS NULL:2011/06/17(金) 22:27:50.77 ID:???
>>329
ただ、それって、文字あたりのバイト数なんて、些細な問題なんじゃ?
varchar(1000) だって、常に1000文字ではないだろうし、
NULLがあれば、ほぼゼロバイトになるわけで。
333NAME IS NULL:2011/06/17(金) 22:42:19.59 ID:???
文字コードのお話しは難しくてかんわ
334NAME IS NULL:2011/06/17(金) 22:48:13.60 ID:???
実際に1バイト埋めで想定文字数まで埋めまくって
実際に6バイト埋めで想定文字数まで埋めまくって
どうなるかやればバイト数の計算が無意味なことに気付くんじゃないの?
335NAME IS NULL:2011/06/17(金) 23:23:30.40 ID:???
336NAME IS NULL:2011/06/17(金) 23:58:52.78 ID:???
>>334
本番運用中にディスク容量不足とかなったら怖いやん
客に土下座とかしたくねーよ
安心なのは想定最大サイズ+α以上の容量を用意しておくことだけど

>>335
UTF8は1-4バイトってなってるね
名前欄20文字としたら80バイトと考えりゃ安心だな
337NAME IS NULL:2011/06/18(土) 00:12:31.10 ID:???
ディスク容量の見積もりしたいのかな
みんな言ってるけど、可変長のカラム使う時点で正確に見積もるのは
かなり難しいよ
入るデータのサンプルをある程度準備して
突っ込みまくって統計的に
丼勘定するのが一番早いよ

toastもあるし
運用してると無駄なタプルとかでるし
vacuumのタイミングでトランザクション走ってて
回収出来なかったりとか。autovacuumかも知れないけど。
見積もっても運用上その通り行くとは限らない。
338NAME IS NULL:2011/06/18(土) 01:31:24.50 ID:???
>>336
>>321くらいは最低調べてから質問してよ
339NAME IS NULL:2011/06/18(土) 09:28:38.98 ID:???
知らないから調べて教えてほしいのかな?
340NAME IS NULL:2011/06/18(土) 15:43:17.37 ID:???
>>321
マニュアルに見積もりの方法が書いてないのは
わざとだろと思える。varchar text xml型以外は何とかなるが
341NAME IS NULL:2011/06/21(火) 12:08:39.80 ID:???
textよりvarcharの方が空間・時間的効率がいいの?
342NAME IS NULL:2011/06/21(火) 12:56:40.91 ID:???
varchar の実体は text と同じだから、むしろ長さチェックする分のオーバーヘッドがある、っていう記述をどこかで見かけた気が…
343NAME IS NULL:2011/06/21(火) 13:39:42.63 ID:???
まあ、長さチェックがあったところで、実態が同じなら(格納の)空間・(検索の)時間効率は一緒な希ガスるあるよ
344NAME IS NULL:2011/06/21(火) 13:56:03.22 ID:???
じゃあ婆ちゃんは何のために居るの?

もう使わないでください。将来的には削除されますって張り紙しといてよ
345NAME IS NULL:2011/06/21(火) 13:58:17.63 ID:???
346NAME IS NULL:2011/06/21(火) 14:02:16.41 ID:???
通常はtextでいいけど、primary keyにする項目はvarcharにしとかないと、
ODBC経由のAccessとかで表示するときに不具合でるのな。
その他の項目はtextで充分なんだけど。
347NAME IS NULL:2011/06/21(火) 14:33:08.22 ID:???
SQL の標準() に合わせるためでしょ。
348NAME IS NULL:2011/06/21(火) 14:50:16.57 ID:???
>>346-347
ポスグレローカルだったのねtext
あり^^
349NAME IS NULL:2011/06/22(水) 01:01:30.00 ID:???
PostgreSQL 9 では、多数同時アクセス時の制御はどうなっていますか?
例えば、あるサーバに PostgreSQL 9 を導入し、そこに 10 台の PC からアクセスするとします。
PC のユーザは、各々 SELECT や INSERT, UPDATE, DELETE を行います。
この時、あるユーザが行った更新が反映されなかったり、削除したレコードを読めてしまったり、
といった問題が発生することはありますか?
350NAME IS NULL:2011/06/22(水) 01:06:44.70 ID:???
351NAME IS NULL:2011/06/22(水) 01:33:51.11 ID:???
>>349
そんなの気にしないといけないようだったら、DBなんかどれも使えないよ。
352NAME IS NULL:2011/06/22(水) 03:24:27.76 ID:???
トランザクション制御の用語知ってれば、マニュアル読めば分かるし、
知らないならかみ合わない気がする。
http://www.google.co.jp/search?q=db%E6%AF%94%E8%BC%83%20%E3%83%88%E3%83%A9%E3%83%B3%E3%82%B6%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%20%E5%88%86%E9%9B%A2%E3%83%AC%E3%83%99%E3%83%AB&ie=UTF-8&oe=UTF-8&hl=ja
353NAME IS NULL:2011/06/22(水) 03:27:34.04 ID:???
>350あれば352は無用だったか、、、
354NAME IS NULL:2011/06/22(水) 08:22:08.82 ID:???
>>350-353
ありがとうございます。
勉強不足でした。
ちゃんと整合がとれるようにできているのですね。
355NAME IS NULL:2011/06/22(水) 09:07:10.65 ID:???
今時こんな質問来るとは
356NAME IS NULL:2011/06/22(水) 11:01:37.50 ID:G4ugddjo
何のためのデータベースなんだか・・・
357NAME IS NULL:2011/06/22(水) 21:33:28.79 ID:???
英明な王者の質問です。

そもそもその為に作られたのに、なおその機能を心配しおたずねになるのは、
それこそ会社を安泰にする道です。

おたずねのことは、トランザクション―― 一貫した行動 ――と名付けます。
358NAME IS NULL:2011/06/23(木) 01:15:18.75 ID:???
最初は誰もが初心者
359NAME IS NULL:2011/06/23(木) 01:48:28.31 ID:???
いやいや、初心者というか
明らかにRDBMSのトランザクションの説明をしながら、、
明らかにRDBMSなpostgresをみて、トランザクションという言葉も使わずに、「これ実装されていますか?」

ってな質問をするところに、えも言われぬ矛盾を感じるんだ…
360NAME IS NULL:2011/06/23(木) 03:53:43.53 ID:???
そもそも
> この時、あるユーザが行った更新が反映されなかったり、削除したレコードを読めてしまったり、
> といった問題が発生することはありますか?
みたいな問題が発生するDBってあるの? そんなことあるなら、それはDBじゃないよね。
361NAME IS NULL:2011/06/23(木) 04:55:44.72 ID:???
トランザクションの概念はデータベースと共に産声をあげたの?

教えて歴史に詳しい人
362NAME IS NULL:2011/06/23(木) 07:22:16.52 ID:???
>>355
フリーソフトなので、どうなっているのか気になったのです。
これでも旧一種試験の合格者なので、排他制御の概念は理解しています。
363NAME IS NULL:2011/06/23(木) 07:27:14.69 ID:???
誰でも受かる低レベルな試験合格したからって
理解してることにはならんよ。
364NAME IS NULL:2011/06/23(木) 07:38:08.55 ID:???
>>361
関係なし。
365NAME IS NULL:2011/06/23(木) 07:58:37.36 ID:???
>>362
Linuxをサーバ用途に使えますか? と同じくらいの質問ですよ。
366NAME IS NULL:2011/06/23(木) 08:08:35.30 ID:???
>>362
俺も旧一種持ちだがさすがにそこまでアホな質問はしないわ・・・
気になったとしても、まず自分で調べるけどね
367NAME IS NULL:2011/06/23(木) 08:58:20.07 ID:???
>>358
いや新しい事を始めた奴はその時点で専門家
368NAME IS NULL:2011/06/23(木) 10:21:41.32 ID:???
トランザクションはマスタに対しての更新要求データのことだから、
データベースとのみ関係するものではないけど、
トランザクション制御となると、データベースからではないかな。
369NAME IS NULL:2011/06/23(木) 15:13:37.32 ID:???
>>360
>> この時、あるユーザが行った更新が反映されなかったり、削除したレコードを読めてしまったり、
>> といった問題が発生することはありますか?
>みたいな問題が発生するDBってあるの? そんなことあるなら、それはDBじゃないよね。

あるだろ。
だれか説明してやれ
370NAME IS NULL:2011/06/23(木) 19:20:48.86 ID:???
分離レベルによって、ファントムリードは基本
updateは
371NAME IS NULL:2011/06/23(木) 21:12:10.64 ID:???
マニュアル読めば全て解決
372NAME IS NULL:2011/06/23(木) 22:48:30.52 ID:???
テーブルの継承って未だにPKも外部キーも使えないんだな
もうかれこれ5,6年前からまだ実装されないのかと思っているが、この機能は詰んだのかなw
373NAME IS NULL:2011/06/23(木) 23:17:37.46 ID:???
>>372
開発の労力に見合わないってことなんだろうね。
PKも外部キーも無くても、アプリとしては動いちゃう部分だし。
374NAME IS NULL:2011/06/25(土) 00:03:31.24 ID:???
テーブルの継承を使いたい場面は結構あるんだがな
モデリングツールが対応してても物理モデルに落とせないんじゃ意味が無い
375NAME IS NULL:2011/06/25(土) 06:32:25.70 ID:???
継承を魔法の言葉と勘違いしてんじゃねーの
オブジェクト指向論者の間違った理解だよ
376NAME IS NULL:2011/06/25(土) 10:20:49.80 ID:???
Postgresではパーティショニング=継承を使うことになるし、
「オブジェクトタイプ」のような列があるなら、継承に置き換えられなくも無い。
使おうと思えば使えるケースはそれなりにあるのでは。
377NAME IS NULL:2011/06/25(土) 15:20:11.91 ID:???
IOと負荷分散考えるとテーブルスペース+パーティショニングしないと
ならないから大規模な商用案件だったら使うでしょ。
慣れれば簡単だがなんで俺がこんなことしないといかんの?
と思う糞実装方法ですが・・・
378sage:2011/06/26(日) 10:59:11.56 ID:lJOfLRBH
PL/Javaって使っている人いますか?
PL/pgSQLに比べて実行速度とかどうなんでしょう?
379NAME IS NULL:2011/06/26(日) 17:08:16.44 ID:???
自分で試してから聞けよ屑
380NAME IS NULL:2011/06/27(月) 02:29:41.63 ID:???
今、RubyからPostgreSQLにつなごうとすると、
どの拡張モジュールを使うのが定石 ?

主に将来性という面で。

今、ruby-postgresを使っているんだけど、
更新が2006年からされていないし.........

ruby-DBIをつかうべきなのかなぁ。
381NAME IS NULL:2011/06/27(月) 08:33:16.74 ID:???
Ruby界隈はよくわからんが、ruby-pgというものはメンテが続いているようだ。
382NAME IS NULL:2011/06/28(火) 02:25:46.75 ID:???
>>379
先人の経験談をちょっと聞いてみるってのがそんなに悪いこと?
383NAME IS NULL:2011/06/28(火) 03:34:11.50 ID:???
何も努力しない教えて君は無視されるものだよ
384NAME IS NULL:2011/06/28(火) 14:13:37.02 ID:???
まあそりゃそうだな
385NAME IS NULL:2011/06/28(火) 22:16:40.86 ID:???
基本的に一から十まで聞こうなんてのは虫が良すぎる
金貰ってるサポートじゃないんだから受ける方の身になって考えろ
でも中にはうまく聞き出すことが出来る人もいる
聞き方も工夫が足りない
すぐに言い返しちゃう辺りも我慢が足りない
もしかしたら情報を持っている人がまだ見てないだけかもしれない
386NAME IS NULL:2011/06/28(火) 22:47:33.05 ID:???
実行速度とかは、データとかマシンとかに依存すること多いから、
結局自分で試すしかないと思う ... って >>378 は言いたいんちゃうか?
387NAME IS NULL:2011/06/28(火) 22:48:23.97 ID:???
>>378 ちゃうわ >>379 やったな。
388NAME IS NULL:2011/06/29(水) 22:13:54.02 ID:???
教えてあげたら、いいじゃん
389NAME IS NULL:2011/06/29(水) 22:42:31.50 ID:???
じゃあ見積もりの仕方教えて
糞サイトの教える気のないURLいらないからwww
390 ◆XEE2zLj0dE :2011/06/30(木) 13:38:06.23 ID:???
>>386
「データとかマシンとかに依存する」ような比較なんかな。
Java使うつもり無いのでやる気は無いが、PL/pgSQLとの速度差が有意なものであるならもっとそのアピールがなされているようには思うね。
391NAME IS NULL:2011/06/30(木) 21:15:33.50 ID:???
さすが2chである。
生産性のかけらもないw
ゴミはいくら集まってもゴミだわ
392NAME IS NULL:2011/06/30(木) 22:18:38.61 ID:???
そうですね!先輩!
393NAME IS NULL:2011/07/01(金) 20:01:36.77 ID:???
ゴミも今では資源
394NAME IS NULL:2011/07/01(金) 20:12:57.72 ID:???
場所や形を変えてもゴミはゴミ(放射性廃棄物)
395NAME IS NULL:2011/07/01(金) 21:48:36.18 ID:???
ヘドロから肉を作ることができる世の中だというのに
396NAME IS NULL:2011/07/01(金) 22:02:58.56 ID:???
放射性廃棄物はゴミではない。
処理の方法も確立されてない、やっかいなもの。
397NAME IS NULL:2011/07/03(日) 08:35:03.37 ID:KjioPXpn
それって態度の大きい教えてくんと同じじゃないか!
398NAME IS NULL:2011/07/04(月) 00:20:14.36 ID:KUzfu3CJ
CREATE TABLE table1 (
col1 bigint ARRAY[2] NOT NULL DEFAULT '{0,0}'
);

↑のテーブルの配列に0xAAAAAAAAAAAAAAAAをinsertしたいのですが、どのようなSQLを書けばいいでしょうか?
よろしくお願いします。
399NAME IS NULL:2011/07/04(月) 10:40:29.37 ID:???
INSERT INTO table1 VALUES (ARRAY[get_byte(decode('FFFFFFFF', 'hex'),0), get_byte(decode('FFFFFFFF', 'hex'),0)];

こんな感じ?
400NAME IS NULL:2011/07/04(月) 10:41:21.00 ID:???
あ、FFFF・・・じゃなくてAAAA・・・か
0x取っちゃまずかったかな?
401NAME IS NULL:2011/07/04(月) 10:56:40.57 ID:???
ああこれbyteaを長さ分intに変換しないとならんか
402NAME IS NULL:2011/07/04(月) 20:00:53.35 ID:???
いい加減
range between
がちゃんと動くようにしてくれ
403NAME IS NULL:2011/07/05(火) 13:19:33.04 ID:???
こんなとこで文句言ってないで
自分で実装してみたらどうだ?
お前さんが使ってるのはオープンソースだぞ?
404NAME IS NULL:2011/07/05(火) 18:43:59.59 ID:???
いや
マニュアル上できるって書いてて
やってないから
405NAME IS NULL:2011/07/05(火) 20:45:23.16 ID:6j9mrdxt
結論:資料の豊富なMySQLを使うべき
406NAME IS NULL:2011/07/05(火) 21:34:47.08 ID:???
いつからオープンソースがマニュアルの記述を意味するようになったんだ?
ソース読めよ
407NAME IS NULL:2011/07/05(火) 22:20:35.89 ID:92Awo2ly
>>405
今となっては最高のジョークだな
408NAME IS NULL:2011/07/06(水) 06:11:35.66 ID:???
>>406
偉そうに言うなら
お前作ってよ
409NAME IS NULL:2011/07/07(木) 20:51:37.98 ID:???
数字の入ったテーブルどうし(行数は同じに揃えてある)の各行を掛け算して、
ひとつのテーブルを得たいのだが、そんなことって1クエリだけでできる?
410NAME IS NULL:2011/07/08(金) 00:40:09.63 ID:???
>>409
説明不足で何がやりたいのか分からない。いくらなんでも
CREATE TABLE multi AS SELECT t.i * s.j AS k FROM t, s;
じゃないでしょ?
411NAME IS NULL:2011/07/08(金) 01:05:15.78 ID:???
たぶん rownum 的な考え方なんだろうなぁ。
412NAME IS NULL:2011/07/08(金) 01:17:16.55 ID:???
各行がそれぞれ相関があるなら
select table_a.value * table_b.value as result from table_a left join table_b on table_a.hoge = table_b.fuga;
じゃないの
413NAME IS NULL:2011/07/13(水) 09:32:39.99 ID:???
いい加減
plpgsqlでの関数定義
がちゃんと動くようにしてくれ
414NAME IS NULL:2011/07/13(水) 15:32:02.84 ID:???
PostgreSQL9.0.4で
WARNING: there is already a transaction in progress
ってログに書き込みがずーっと続くんだけど、なんでだろ。

MovableTypeの為に入れてるDBD:Pgかなぁ?
415NAME IS NULL:2011/07/13(水) 16:57:45.09 ID:???
beginしといてcommitしてないタコプラグインがいるとかじゃねーの?
416414:2011/07/13(水) 21:48:30.84 ID:???
>>415
サンクス。



つか、MT5でPostgreSQLのサポート対象外になってんのに気付かずにPostgreSQL使ってる時点でもう知らん。
俺の管理してるサーバーじゃねーし。

Perlのバージョン落とすなり何なりで対応してくれや。
んなのこっちに投げるなよな。
417 忍法帖【Lv=6,xxxP】 :2011/07/14(木) 00:58:25.60 ID:???
ふぅー
418NAME IS NULL:2011/07/19(火) 15:19:05.69 ID:esCP6IX8
ユーザー作成する時にNo file suchになるんですけど、
419NAME IS NULL:2011/07/19(火) 15:59:17.68 ID:???
パス通ってないんだろ
/usr/local/pgsql/bin/createuser
ってフルで入れて御覧
420NAME IS NULL:2011/07/20(水) 05:41:08.97 ID:TRRE0hmK
>>419
No such file or directory っていう表示がでます。
421NAME IS NULL:2011/07/20(水) 08:27:11.01 ID:???
>>420
ユーザの作成前にPostgresのインストールが必要だぞ。
何を使って、どこにインストールした?
422NAME IS NULL:2011/07/20(水) 13:35:43.50 ID:???
この辺が参考になるかも。


http://lets.postgresql.jp/map/install
423NAME IS NULL:2011/07/21(木) 11:01:46.61 ID:???
全文検索エンジン「Ludia」はすでに死んだのですか?
424NAME IS NULL:2011/07/22(金) 16:51:55.77 ID:???
>>420
postgresユーザでやれば?

>>419
ソースからのインストール前提みたいな空気がイヤ。
425NAME IS NULL:2011/07/26(火) 15:08:12.14 ID:???
>>424
ソースから入れたんじゃ無けりゃ、大抵はパス通ってるとこに
入ってるんじゃないの?/usr/binとか
そう思ってあえて書いてないわけだが
426NAME IS NULL:2011/07/26(火) 17:51:17.63 ID:???
むか〜し のPostgreSQL-CE 7.4 Silver っての持ってんだけど、
OSS-DB の GOLDが受験できるみたいですね。

皆さんはどうするんですか?
427NAME IS NULL:2011/07/27(水) 00:57:35.25 ID:zdIJsTw6
Ubuntuの端末でインストールしました。
428NAME IS NULL:2011/07/27(水) 01:15:55.72 ID:???
>>427
インストールできてないんじゃない?
まずユーザを作ろうとするまでに実行した操作手順や入力したコマンドを教えて
429NAME IS NULL:2011/07/27(水) 15:21:58.69 ID:ACg1rbJy
ルートでsudo apt-get install postsql
sudo passwd postgresql
パスワードを入力しました。
su postgres
パスワードを入力しました。
createdb testdb

createdb testdb
createdb: could not connect to database postgres: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
$ exit
labishinjuku@labishinjuku:~$ createdb testdb
createdb: could not connect to database postgres: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
labishinjuku@labishinjuku:~$ sudo psql
psql: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
こんなエラーが発生しました
ご回答お願いします。
430NAME IS NULL:2011/07/27(水) 16:36:40.28 ID:???
インストールしたら、initdbして、pg_ctl start して
createuser して createdb しないとね。

どっから説明したもんだか・・・
431NAME IS NULL:2011/07/27(水) 16:45:20.28 ID:???
まあとにかく、オプションはヘルプ(--help)見てもらうとして
postgresユーザーが書き込めるディレクトリ決めて
initdb --pgdata=そのディレクトリ --encoding=UTF-8 --no-locale
そのディレクトリの下のpostgres.confを書き替えて
pg_ctl --pgdata そのディレクトリ start
してからcreatedbしてごらん
432NAME IS NULL:2011/07/27(水) 16:49:35.89 ID:???
>>429
つか何を参考に作業してる?
433NAME IS NULL:2011/07/27(水) 17:01:20.56 ID:???
>>429
sudo apt-get install postsql
の後にしなくてはいけないのが、データベースの初期化
ubuntu使って無いのでちょっと違ってるかもしれないけど、
sudo /etc/init.d/postgresql initdb
でできるんじゃないかな?

次にサーバの起動
sudo /etc/init.d/postgresql start
そうすると、サーバに接続できるようになって、
>createdb: could not connect to database postgres:
などというエラーにはならなくなるはず
434NAME IS NULL:2011/07/27(水) 17:08:56.39 ID:???
createuser で
Shall the new user be allowed to create databases? (y/n) y
として作成し
あとからデータベースを作成できなくするには
どうすればいいのですか?
435NAME IS NULL:2011/07/27(水) 17:13:23.55 ID:???
ALTER USER username NOCREATEDB
とかかな
436NAME IS NULL:2011/07/27(水) 17:18:04.88 ID:???
あー、NOSUPERUSER も入れないと何でもできちゃうかな
437NAME IS NULL:2011/07/27(水) 17:48:54.92 ID:???
>>435
>>436
出来ましたサンクス!!
438NAME IS NULL:2011/07/27(水) 22:44:34.96 ID:ACg1rbJy
sudo /etc/init.d/postgresql-8.3 startを入力すると↓なります。
* Starting PostgreSQL 8.3 database server * Error: The cluster is owned by user id 110 which does not exist any more
[fail]
どうすればいいですか?
ご回答お願いします。
439NAME IS NULL:2011/07/27(水) 23:47:40.31 ID:???
>>438
http://comments.gmane.org/gmane.linux.debian.jp.user/19531
>ユーザpostgresがない状態になっているように見えます。そのために
>/var/lib/postgresql/8.3/main の所有者ユーザが不明でエラーが
>発生しているのではないかと。
440NAME IS NULL:2011/07/27(水) 23:53:16.04 ID:???
>>438
ひとつ言い忘れました。エラーメッセージが分かっていれば、
それで検索すると原因と対策がすぐに見つかる事が多いです。
「Error: The cluster is owned by user id」でググって
4番目が上記ページでした。
441NAME IS NULL:2011/07/28(木) 01:28:30.28 ID:???
ググるという言葉があるがGoogle以外はダメ検索エンジンなのですか。
それとも検索することをググるで代表させているだけなのですか。
442NAME IS NULL:2011/07/28(木) 04:26:36.64 ID:???
>>438
postgresというユーザを、自分で削除した?
消してしまったのだとしたら、とりあえず
sudo useradd -u 110 postgres
とすると再作成できるはず

>>441
>それとも検索することをググるで代表させているだけなのですか。
こっちが正解
443NAME IS NULL:2011/07/28(木) 22:36:03.66 ID:???
こんなんに任せてヤマダ電機だいじょうぶなん
444NAME IS NULL:2011/08/03(水) 02:51:08.24 ID:???
PostgreSQL関連の書籍がすくなくね。MySQLに圧倒されている。
445NAME IS NULL:2011/08/03(水) 07:54:11.47 ID:???
postgresはオワコン
446NAME IS NULL:2011/08/03(水) 07:59:18.77 ID:???
馬鹿には使えないからね
447NAME IS NULL:2011/08/03(水) 10:33:59.78 ID:???
はんぱなく速くなったからどうやら某DB会社がmysqlを
表に出して、情報操作してるらしい。

140倍速くなったらしいしw
448NAME IS NULL:2011/08/03(水) 23:34:16.88 ID:???
まじか
うそくせー

つかInnoDBもういらない
ポスグレのほうがいいと思うんだ
449NAME IS NULL:2011/08/04(木) 00:30:38.48 ID:wLTN6z0J
ttp://osb.sraoss.co.jp/event_seminar/2011/pgpool-II-V3.1.pdf

の9ページ見るとびっくりしますよ。

トンドモな人 ならわかるんだけど、あの石井さんだかんね。
どうやら 遅かったクエリが激速になったって感じかな。
全部が全部 速くなったわけではないと思う。
どでしょ。

たしかにVer.9以降 WEBのニュースで見なくなったような...
450NAME IS NULL:2011/08/04(木) 07:19:52.68 ID:???
今まで悪い検索プランが選ばれていたクエリで、適切なプランが選ばれるようになっただけの気がする。
数百万件のデータの結合なら、ちょっと失敗すれば検索時間は極端に遅くなってしまう。
451NAME IS NULL:2011/08/04(木) 10:34:38.37 ID:???
はげしく同意
452NAME IS NULL:2011/08/04(木) 11:47:34.86 ID:???
今までが悪すぎたって感じか
453NAME IS NULL:2011/08/04(木) 13:51:22.98 ID:???
結合の場合はアルゴリズムの改良が大きい
そして適切にそのアルゴリズムを採用するオプティマイザーの改良のたまものだろ
454NAME IS NULL:2011/08/04(木) 14:20:44.09 ID:???
クエリでどのインデックスを使用するか明示的に指定できるRDBMSってあるの?
455NAME IS NULL:2011/08/04(木) 14:55:00.32 ID:???
これでもう mysqlに速度で負けてるってとこはないの?
456NAME IS NULL:2011/08/04(木) 17:01:48.39 ID:???
>>454
Oracleはヒント句っていうのがあって、使用するインデックスやアルゴリズムを指定できる。
457NAME IS NULL:2011/08/04(木) 19:12:50.27 ID:???
サンクス
カメラにもAFとMFがあるように手動で操作できるのはいいよね。
RDBMSの思想からは反するんだろうけどさ。
458NAME IS NULL:2011/08/04(木) 23:15:36.71 ID:???
>>453
joinなんてそうそう画期的な新しいアルゴリズムが出てくるもんじゃないだろ。
もし新しいアルゴリズムで140倍も速くなったんだとしたらB木並の大発明だわ。
459NAME IS NULL:2011/08/05(金) 08:13:24.40 ID:???
>>450
だね。LIKEで統計情報の扱いが変更されたあたりの影響な気がする。
デフォルトのパラメータ設定が改善された、とは言えるんだけど、例としては微妙だな。
460NAME IS NULL:2011/08/05(金) 08:15:16.61 ID:???
>>455
8.4くらいから、PostgreSQLのほうがMySQLよりも速いよ。
特に、CPUコア数が増えたときの伸びが段違いに良い。
461NAME IS NULL:2011/08/05(金) 10:42:09.26 ID:???
抜いた抜かれたを繰り返してはいるけど
いま最新版同士だと多コアの伸びはPostgreSQLがリード。

でもOracleと比べるとどんぐりの背比べなのが悲しい
462NAME IS NULL:2011/08/05(金) 11:58:05.08 ID:???
Oracleはそんなに違うのか...
463NAME IS NULL:2011/08/05(金) 12:40:56.67 ID:???
値段が・・・
464NAME IS NULL:2011/08/05(金) 13:24:33.87 ID:???
>>460
いい報告 どうもです。
でもIT ニュースでは不思議にmysqlしかないんだよな。
なんで?

>>463
わはは
でも今は11gR2が無料でダウンロード出来るよ。
CentOS5.6に普通に入った。
やっぱOracleの方がまだ速いんですか。
465NAME IS NULL:2011/08/05(金) 13:38:27.27 ID:???
>>464
>でも今は11gR2が無料でダウンロード出来るよ。
>CentOS5.6に普通に入った。
>やっぱOracleの方がまだ速いんですか。

無償なんだから自分で試そうとは思わないのかね?

俺が作っているぐらいの規模だと機能・性能ともにどちらでも十分。
でもとらぶったときにお客に言い訳するには Oracle のブランドが必要。
466NAME IS NULL:2011/08/05(金) 13:45:55.43 ID:???
客騙しておいていい気なもんだな
467NAME IS NULL:2011/08/05(金) 14:00:29.19 ID:???
普通の客ならOracle選ぶだろ
468NAME IS NULL:2011/08/05(金) 16:12:46.81 ID:???
まあお客側の担当もトラブルを上層部に報告するには
Oracle のブランドが必要だからな。

>>466 は、単なる素人。
469NAME IS NULL:2011/08/05(金) 16:47:40.17 ID:???
上司騙しておいていい気なもんだな
470NAME IS NULL:2011/08/05(金) 16:51:04.00 ID:???
そんなことは客先の担当者に言ってくれ。
471NAME IS NULL:2011/08/05(金) 19:40:27.12 ID:???
>>468の最後にカチンときたんだな>素人さん
472NAME IS NULL:2011/08/05(金) 21:16:22.86 ID:???
仕事取られまいと必死な奴がだいぶ前からスレに張り付いてる。
473NAME IS NULL:2011/08/05(金) 22:33:36.93 ID:???
そうだったのかw
474NAME IS NULL:2011/08/05(金) 23:28:14.03 ID:???
相変わらず生産性のないスレで笑わしてもらった
475NAME IS NULL:2011/08/06(土) 00:29:14.91 ID:???
クソも食えば栄養になる
476NAME IS NULL:2011/08/06(土) 02:17:08.13 ID:???
営業上インパクトある数字が必要って解ってるから140倍みたいな数字を出してるんでしょ
技術者はベンチマーク取るからそういう数字に誤差やカラクリがあるって解るけど
導入時の資料作成には(場合によっては)140倍速いですってのがあると売り込みやすい
477NAME IS NULL:2011/08/06(土) 03:14:49.40 ID:???
>>476
しかし、書いているのは石井さんだよ。
478NAME IS NULL:2011/08/06(土) 03:38:18.47 ID:???
石井さんが書いてたらなんでも信用するのかお前は
479NAME IS NULL:2011/08/06(土) 03:53:09.68 ID:???
サポートを生業にしてるからそりゃ宣伝するわな。
ほかに比べて料金高すぎだがなw
480NAME IS NULL:2011/08/06(土) 05:00:55.19 ID:???
石井さんだから書いてるんじゃねむしろ
採用されるためにはハッタリも必要ってのあるだろうし
481NAME IS NULL:2011/08/06(土) 05:04:09.63 ID:???
なにがいいたいんでちゅか〜
482NAME IS NULL:2011/08/06(土) 06:12:36.68 ID:???
これがおまいらのメディアレテラシーか
483NAME IS NULL:2011/08/06(土) 06:13:10.01 ID:???
これがおまいらのメディアレテラシーか
484NAME IS NULL:2011/08/06(土) 10:15:05.80 ID:???
石井さんはポスグレ厨ですからねw
(悪口じゃないよ)

改修され続けてるって事を言いたかったんだろうね。
pgpoolも本体に入れちゃえばいいのに。
485NAME IS NULL:2011/08/06(土) 12:26:51.86 ID:???
200万レコードの中から下手な検索の場合には数万件がヒットするのでSQL文でLIMIT 100と付けています。
しかし、生のヒットした数が知りたい場合も多く、その場合、
SELECT count(*) FROM でLIMITなしでもう一度クエリーしないといけないでしょうか。
486NAME IS NULL:2011/08/06(土) 12:29:54.11 ID:???
そうれす
487NAME IS NULL:2011/08/06(土) 15:46:11.10 ID:???
何件あるのかわからんならしかたないわな
488NAME IS NULL:2011/08/07(日) 10:06:23.74 ID:???
そんなあなたに count(*) OVER() 。
489NAME IS NULL:2011/08/07(日) 13:04:19.83 ID:???
>>488
対応は8.4以上、でもすばらしい。
490NAME IS NULL:2011/08/07(日) 13:52:09.08 ID:???
>>488
う わかんねっす
491NAME IS NULL:2011/08/07(日) 14:27:04.54 ID:???
count(*) over()はリミット前の件数か。φ(..)
492NAME IS NULL:2011/08/07(日) 19:48:25.44 ID:???
2つのいずれかのカラムに検索文字列があるかどうかを知りたいとき

SELECT * FROM table WHERE col1+col2 LIKE '%string%';

col1とcol2を結合するにはどのような演算子を使えばいいのですか
493NAME IS NULL:2011/08/07(日) 19:52:42.04 ID:???
>>492
SELECT * FROM table WHERE col1 LIKE '%string%' or col2 LIKE '%string%';
494NAME IS NULL:2011/08/08(月) 03:29:43.11 ID:???
ちなみに結合は || 。これが標準のはずなんだがな……。
495NAME IS NULL:2011/08/08(月) 09:46:51.11 ID:???
>>492
>2つのいずれかのカラムに検索文字列があるかどうかを知りたいとき
>SELECT * FROM table WHERE col1+col2 LIKE '%string%';

col1 = 'abcs', col2 = 'tringdef' とかもヒットしちゃうけどいいの?
496NAME IS NULL:2011/08/08(月) 11:41:46.53 ID:???
>>495
それでもokです。

>>493
下記でうまくいきました。thx!
SELECT * FROM table WHERE col1 LIKE '%string%' or col2 LIKE '%string%';

>>494
下記は何もヒットが出なくなりました。??
SELECT * FROM table WHERE col1||col2 LIKE '%string%';
497NAME IS NULL:2011/08/08(月) 12:39:47.87 ID:???
>>496
||の結合は、col1 = 'abcs', col2 = 'tringdef'のとき
'abcstringdef' が含まれるものを検索になるけど
そういうデータはあるの?
498NAME IS NULL:2011/08/08(月) 19:36:18.00 ID:???
ありません。
しかし、なぜそういうことに。
499NAME IS NULL:2011/08/08(月) 20:11:38.32 ID:???
>>498
col1とcol2のどちらかがnullだったんじゃないの?
500NAME IS NULL:2011/08/09(火) 12:01:32.84 ID:???
元の質問の結合って文字列の連結の話じゃないの?
文章もそうだし、+ 使ってるからそう見えるけど。
文字列の連結は、標準SQLだと ||
501NAME IS NULL:2011/08/09(火) 23:38:50.04 ID:???
文字列連結する時nullの可能性あるならCOALESCEあたりでnullをブランクに置き換えないと全部nullが返る
502NAME IS NULL:2011/08/09(火) 23:41:01.99 ID:???
そんなあなたに concat() @9.1
503NAME IS NULL:2011/08/12(金) 10:39:50.66 ID:???
会社の蔵書検索ページを作りたいのですが
書名(title)、出版社(publisher)、著者(auther)、ISBN番号(isbn)で入力欄を作る予定です。
検索時に、どの入力欄がいくつが埋まるのかが検索毎に変わります。
そのような場合のSELECT文の作り方がわかりません。

WEHRE title LIKE '%$1%' && ....

ですが、書名が空白の場合もあります。
入力に応じて、SELECT文をどのように作ったらいいのでしょうか。
504NAME IS NULL:2011/08/12(金) 11:54:32.59 ID:???
フリーソフトを使った方が幸せになれるw
505NAME IS NULL:2011/08/12(金) 13:20:14.48 ID:???
>>503
投げる前に組み立てろよ
506503:2011/08/12(金) 15:15:49.97 ID:???
日本語が下手なので、質問し直し。

データベースには、書名、出版社、著者、ISBN番号はいずれもデータが入っている。

検索ページはWEBページ上に作る。TEXT入力欄を4箇所配置する。
検索者は、上記4項のうち、書名もしくは出版社等、分かっているものしか入力できないので、どの項目に検索単語が入力されているかは、検索毎に変わる。

入力のある・なしの組み合わせは2の4乗になる。

このような場合に、SELECT文は、どう書き下すように作るのでしょうか。

全項目が埋まっていれば、アンドを使って簡単に書けるのですが。。。
507NAME IS NULL:2011/08/12(金) 15:30:38.13 ID:???
お前馬鹿だろ>>>503
こんな馬鹿な質問するようじゃ、そもそも基礎が全く無い
まず本なりセミナーなりで一から勉強しろ
じゃないと下らない質問繰り返して赤っ恥をかき続けるだけで終わるぞ
508503:2011/08/12(金) 15:35:22.43 ID:???
なんか解決しました。

TEXT欄が空白(NULL)の場合でも、空白でない場合でも、なんでもいいからandで繋げれば良かっただけです。

title like '%%' and publisher like '%%' and .... ←カラムが空白の場合

単純に並べるだけでした。
509NAME IS NULL:2011/08/12(金) 15:45:23.50 ID:???
こういうSQLで検索が糞遅いシステムができ上がるんだな。
510NAME IS NULL:2011/08/12(金) 15:49:56.96 ID:???
ねじれてないか。
511NAME IS NULL:2011/08/12(金) 19:06:09.95 ID:???
>>508
本当にANDでいいのか?
512NAME IS NULL:2011/08/12(金) 23:32:02.43 ID:???
ばかばっかだなこのスレ。
513NAME IS NULL:2011/08/15(月) 00:51:15.74 ID:???
画面から入力されたデータを確認しないのかい?
なんか怖いんだけど。

会社名に数字が入ったりしてたら?
ISBNに全角が入ったりしてたら?
514NAME IS NULL:2011/08/15(月) 01:08:16.85 ID:???
>>513
>画面から入力されたデータを確認しないのかい?

これは重要なことだけど...

>会社名に数字が入ったりしてたら?
>ISBNに全角が入ったりしてたら?

これらはヒットしないだけで問題ないだろ。

むしろ SQL インジェクション等を心配すべき。
515NAME IS NULL:2011/08/15(月) 08:46:09.02 ID:???
>会社名に数字が入ったりしてたら?
>ISBNに全角が入ったりしてたら?



>画面から入力されたデータを確認しないのかい?

の部分集合じゃないのか?
516NAME IS NULL:2011/08/16(火) 01:09:25.03 ID:???
入れてはいけないデータは入れてはいけない。
単純だけど後で楽するよ。
517NAME IS NULL:2011/08/16(火) 23:38:18.60 ID:???
以下の環境でcygtermからpsqlを実行すると反応が無くなってしまいます。
(Cygwin Bash Shellからなら正常に動作します。)
Windows7 64bit SP1
PostgreSQL 9.0.4, compiled by Visual C++ build 1500, 64-bit
cygterm(teraterm) 4.70
GNU bash, version 4.1.10(4)-release (i686-pc-cygwin)
psqlをうまく使えるようにする方法があれば教えてください。
518NAME IS NULL:2011/08/18(木) 18:54:41.13 ID:???
プログラム側で必要な検索条件だけでSQL作れよ
なんでぜんぶSQLで吸収しようとするんだ
519NAME IS NULL:2011/08/20(土) 14:17:17.21 ID:???
WHERE ($1 IS NULL OR title LIKE '%' || $1 || '%') とかやると
けっこういい感じに動いてくれたりもするけどね。
520NAME IS NULL:2011/08/20(土) 20:31:50.74 ID:???
ちゃんとチェックしてるもんね
521NAME IS NULL:2011/08/29(月) 18:24:26.01 ID:???
PostgreSQLで文字をエスケープするpg_escape_string() はPHPにあるけれど、perlでも同等のものはありますか。
522NAME IS NULL:2011/08/30(火) 15:49:56.36 ID:???
>>519
>WHERE ($1 IS NULL OR title LIKE '%' || $1 || '%')
これって$1が空文字列の時に展開されると
WHERE ( IS NULL OR title LIKE '%'%')
ってならないの??
523NAME IS NULL:2011/09/01(木) 14:52:06.47 ID:???
>>522
空文字列=''
だから、いうなれば
WHERE ('' IS NULL OR title LIKE '%' || '' || '%')
ってなるよ?
524NAME IS NULL:2011/09/01(木) 18:29:23.53 ID:???
プログラム側で、SQLを組み立てたほうがいいんじゃないの

if textbox1.text = "" then
else
sql = sql & " 書名 = '" & textbox1.text & "'"
end if

などのように。
525NAME IS NULL:2011/09/01(木) 18:34:04.02 ID:???
あんな下らない質問を相手にするお前らに呆れる
526NAME IS NULL:2011/09/01(木) 22:46:13.29 ID:???
そんなくだらない発言をするお前に呆れる
527NAME IS NULL:2011/09/01(木) 23:03:10.96 ID:???
>>526
そんなくだらない発言をするお前に呆れる

528NAME IS NULL:2011/09/01(木) 23:39:07.38 ID:???
餓鬼は放置で
529NAME IS NULL:2011/09/02(金) 10:18:00.71 ID:???
くだらない質問でも、答えてあげたら。

出し惜しみするほどのものじゃないし。
530NAME IS NULL:2011/09/02(金) 13:45:17.01 ID:???
スレは荒れるし本人のためにもなりません
531NAME IS NULL:2011/09/02(金) 19:59:12.94 ID:???
前、ここで質問したことあるけど、
結局、知らないことは、答えられない連中だしな。
532NAME IS NULL:2011/09/02(金) 23:29:42.18 ID:???
>>523
なるほど。シングルクオートが自動的に付加されるってわけですか。
ちょっと違和感あるな
533NAME IS NULL:2011/09/03(土) 00:20:24.11 ID:???
>>531
>結局、知らないことは、答えられない連中だしな。

そりゃ当たり前だと思うが。
知らん奴らの適当な答えでも欲しいのか?
534NAME IS NULL:2011/09/03(土) 09:04:00.30 ID:???
豪語するわりには、たいして知らないってことだろ。
535NAME IS NULL:2011/09/03(土) 11:21:54.94 ID:???
誰が豪語してたの?
536NAME IS NULL:2011/09/03(土) 14:27:46.59 ID:???
オーストリア人
537NAME IS NULL:2011/09/03(土) 15:09:52.82 ID:???
墺と豪を間違えてないか?
538NAME IS NULL:2011/09/03(土) 16:01:32.43 ID:???
気にしないw
539NAME IS NULL:2011/09/03(土) 19:30:13.35 ID:???
Win x86-64のOne click installerて落とせる?
なんか試用版とかに飛ばされるんだけど
zip版は落とせるけどインストールの解説すらないし
540NAME IS NULL:2011/09/04(日) 04:17:46.27 ID:???
541NAME IS NULL:2011/09/04(日) 11:21:53.01 ID:???
>>540
直リンサンクス
542NAME IS NULL:2011/09/06(火) 12:14:20.71 ID:???
>>521
libpqのバージョンによる
543NAME IS NULL:2011/09/07(水) 01:19:01.40 ID:ob/8JfxO
すみません、DBが読み込めなくなり、
/etc/init.d/postgresql restart
で解決しようとしたら、
bash: /etc/init.d/postgresql: Permission denied
となってしまいます。
postgres ユーザー、 root ユーザー共に駄目みたいです。
これを解決する方法はありませんか?
所有者変更、パーミッション変更した後も同様のメッセージが出ます。
544NAME IS NULL:2011/09/07(水) 01:36:40.86 ID:???
>>543
記載内容が全て正しいように見えません。
環境、エラー内容、実際にやったことなど、きちんと報告してください。
そもそもDBが読み込めなくなったってどういうことですか?
545NAME IS NULL:2011/09/07(水) 02:01:34.99 ID:ob/8JfxO
>>544
有難う御座います。
サイトがクラッシュし、エラーをチェックしたところ、
php のほうに、エラーでDBの呼び出し失敗の記述があり、アパッチ再起動とかも色々試したのですが、上記手順も含めて解決できなかったのです。
もう少し詳しい状況を確認してからまた書き込みます。
ハッキングとかで書き換えられたとかの可能性もあるんでしょうか。
情報漏えいとか怖いな
546NAME IS NULL:2011/09/07(水) 02:59:29.40 ID:???
>>545
とりえあず鯖止めたら? rootkit入ってたらもう手遅れに近い。
547NAME IS NULL:2011/09/07(水) 03:06:15.94 ID:???
多分ご本人も状況を把握できてない。
断片情報で一々レスしてると、却って混乱に拍車をかけるだけかも。
状況の整理が出来るまで待った方がよろしいかと。
548NAME IS NULL:2011/09/07(水) 03:12:45.91 ID:???
情報漏洩を心配するやつが2chで解決策を求めようとするか?
549NAME IS NULL:2011/09/07(水) 09:57:44.68 ID:???
バックアップを取っていなかったということなんだろね。

みなさんは、
バックアップを自動実行するツールは何をつかってますか?
550NAME IS NULL:2011/09/07(水) 10:11:33.53 ID:???
>>549
cron
551NAME IS NULL:2011/09/07(水) 23:19:02.88 ID:???
改ざん検知のソフトくらい入れろよ屑。
切り分けできない素人並みのスキルw
552NAME IS NULL:2011/09/08(木) 02:47:19.83 ID:???
>>551
改ざんされてるかもしれない状況で改ざん検知のソフトを入れると、問題の切り分けが可能になるの?
553NAME IS NULL:2011/09/08(木) 08:05:47.47 ID:???
>>552
事前に入れとけって話だろ
後の祭りだけど、後学のためにはなる
554NAME IS NULL:2011/09/08(木) 12:38:25.81 ID:???
まあ実際は単に設定ミスのトラブルなんだろうけど
見当違いの対策をしてわけがわからなくなってるとこだろうな
555NAME IS NULL:2011/09/09(金) 14:20:54.63 ID:???
>>553
だから>>551は素人以下だって話だろ
556NAME IS NULL:2011/09/10(土) 03:27:58.62 ID:STaf8KKW
>>555
お前、言っちゃ悪いけど馬鹿だろ
557NAME IS NULL:2011/09/10(土) 05:10:14.72 ID:???
起きてしまったトラブルに対して、なんでアレやってなかったの?なんていいだすやつはいらんだろ。
解決した後ならいいが。
558NAME IS NULL:2011/09/10(土) 05:11:45.19 ID:???
連レスすまんが、>>551は今から改ざん検知のソフトを入れることで切り分けができるって書いてんだろ。
>>553みたいに裏を読む必要はないわ。自演かと思う。
559NAME IS NULL:2011/09/10(土) 07:38:18.81 ID:???
>>557-558
無理やり誤解して貶めて叩いても、お前が馬鹿にしか見えないんだが。
>>553は裏読みでも何でもない、ごく普通の解釈だろ。
お前みたいに無駄に難癖つけても、それこそ何の助けにもならないぞ。
お前は一体何故そんなに必死なの?
560NAME IS NULL:2011/09/10(土) 10:13:43.47 ID:???
>>559が凄い勢いで必死な件
561NAME IS NULL:2011/09/10(土) 14:35:38.53 ID:???
次回同じ失敗を繰り返すような
ほんものの馬鹿になってほしくないから
言ってあげたのに・・・
ほんとここの連中はくずですねえ(笑)

どうせ起動しない理由も自分自身が原因の
くだらない理由なんでしょ
562NAME IS NULL:2011/09/10(土) 15:21:05.49 ID:???
>>561は何故ここまで上から目線になろうと必死なのか
563NAME IS NULL:2011/09/10(土) 15:45:15.28 ID:???
ここ以外で上から目線になれる機会が無いんだろ
564NAME IS NULL:2011/09/10(土) 17:14:06.72 ID:???
内容の薄いスレですね
565NAME IS NULL:2011/09/10(土) 19:39:14.53 ID:???
「薄い」とかやめろよ
566NAME IS NULL:2011/09/10(土) 20:57:57.34 ID:???
>>565
そんな言い方よせよ。>>564は「内容の薄いスレですね。これからはボクが充実したスレにします」って言ってるんだから。
567NAME IS NULL:2011/09/10(土) 21:00:24.29 ID:???
教えてもらう内容の薄いスレと言ってるのだ。
568NAME IS NULL:2011/09/10(土) 21:09:19.06 ID:???
煽ってばかりで内容が薄いですよね。
569NAME IS NULL:2011/09/10(土) 21:29:53.79 ID:???
おまえだろうが
570NAME IS NULL:2011/09/10(土) 22:55:26.97 ID:???
>>543
ざまぁw
571NAME IS NULL:2011/09/10(土) 23:19:35.25 ID:???
DBの話なのにアパッチ再起動とかこいつの行動意味わかんないわぁ。DB起動できなくなったらDB単体から調査していけよなぁ。普通はログ出力してるはずなのにそれすら報告しないとかないわぁ・・・客だったら顔も見たくないわぁ。
572NAME IS NULL:2011/09/11(日) 00:55:35.96 ID:???
某所のサーバ管理を手伝っているけど、
そこの管理者がよく >>543 >>545 みたいな
問い合わせを送ってくるから、半分キレながらエスパーしてる。
MLの怖いオジサン達の気持ちが分かったわ。
内容無くてごめんな。
573NAME IS NULL:2011/09/11(日) 01:22:08.90 ID:???
日本語が通じない客は困るんだよ。
小学生に聞くつもりでYESorNOの回答リスト
作ったことがあるが、>>543なんて大きな幼稚園児だよ。
574NAME IS NULL:2011/09/11(日) 02:55:30.25 ID:???
逆にこういうレベルが居るからお前等に仕事があるんじゃね
575NAME IS NULL:2011/09/11(日) 13:58:15.69 ID:???
薄いという言葉に敏感なやつがいるな
576NAME IS NULL:2011/09/11(日) 16:24:52.34 ID:???
まあいろいろあるけど、何かが起きた時にまず
自分がやったことを疑わないで、他のせいにしようとするから
何も調べてないうちからウイルス等を疑うようになるんだな。
577NAME IS NULL:2011/09/11(日) 23:58:38.47 ID:PE57i2Y8
578NAME IS NULL:2011/09/12(月) 01:15:05.61 ID:???
http://www.postgresql.jp/
ここではまだだね。
579NAME IS NULL:2011/09/12(月) 11:10:15.45 ID:???
9.1はもうすぐですか。
レプリケーション設定などが簡単になるようで、便利ですね。
レプリの設定は苦労したからなぁ。
580NAME IS NULL:2011/09/12(月) 12:08:51.04 ID:8E9Cw67j
苦労って程じゃない
581NAME IS NULL:2011/09/12(月) 15:53:24.44 ID:???
Linux版は比較的簡単だけど、
Win版のレプリはLinux版と違うからね。
なにせ情報が少ないし。

9.1 はツールなどで簡単設定できればいいけど。
582NAME IS NULL:2011/09/15(木) 15:08:23.75 ID:???
石井さんのpgpoolのセミナあるよ。
無料だって。
早速 申し込みました。
ttp://www.sraoss.co.jp/event_seminar/2011/1005.php
583NAME IS NULL:2011/09/22(木) 03:02:14.73 ID:???
SQLを出して、タイムアウトで失敗するということはないですか?
584NAME IS NULL:2011/09/22(木) 04:05:25.03 ID:LaI+LSkf
はいダウト、こいつにかまうな
585NAME IS NULL:2011/09/22(木) 17:04:09.85 ID:???
9.1、リリースされたんだね
586NAME IS NULL:2011/09/22(木) 21:19:03.08 ID:???
PostgreSQL 9.1 の新機能を読んだけど理解できたのは10%未満。
587NAME IS NULL:2011/09/23(金) 14:15:21.71 ID:???
9.1 のレプリケーション、少しツールなどが追加になっているようだけど、
簡単設定というほど、簡単になるわけじゃないみたいだね。
588NAME IS NULL:2011/09/23(金) 15:15:36.37 ID:???
どうなれば簡単なんだよw
pgpooladminみたいな中途半端な管理ツールを
postgresqlでも作れと?
589NAME IS NULL:2011/09/23(金) 15:24:40.06 ID:???
中途半端なのじゃなくて完璧なの作れよ
590NAME IS NULL:2011/09/23(金) 16:20:01.98 ID:???
今のまんまでも馬鹿よけになっていいじゃない。
591NAME IS NULL:2011/09/23(金) 23:39:29.81 ID:???
ウィザード形式みたいな簡単設定があるといいね
592NAME IS NULL:2011/09/24(土) 01:46:36.72 ID:???
あとになって変更できましぇーん
とかいってここに泣きつくガキが出てくるからいや
593NAME IS NULL:2011/09/24(土) 19:05:27.14 ID:???
PostgreSQLは商用データベース並と言われるのはまだ劣る部分があるということ?
594NAME IS NULL:2011/09/24(土) 19:31:34.64 ID:???
とりあえず性能は負けてる
595NAME IS NULL:2011/09/25(日) 05:42:59.95 ID:???
RDBMS 本体としてはそれほど差はなくなってきていますが、周辺ツールなどの面では商用RDBMS が対応が多いというのが現状でしょう。

http://lets.postgresql.jp/documents/tutorial/rdbms-hikaku
596NAME IS NULL:2011/10/05(水) 23:31:43.92 ID:???
公式マニュアルの「15.4. インストール手順」の以下の記述ですが、なにかわかりますか?
http://www.postgresql.jp/document/current/html/install-procedure.html

./configure
mkdir build_dir
cd build_dir
/path/to/source/tree/configure [options go here] ←こいつ
gmake
597NAME IS NULL:2011/10/05(水) 23:45:15.11 ID:???
深く突っ込まない大人の優しさも大事だよ
598NAME IS NULL:2011/10/06(木) 05:41:12.52 ID:???
こいつがどこを指してるのか。。
[options go here]なら、ここにオプション書くんだよっていう目印
599NAME IS NULL:2011/10/06(木) 09:03:35.65 ID:???
本来は「here」にリンク張ってアンカーに飛ばしたかったんじゃないの?
600NAME IS NULL:2011/10/06(木) 12:49:35.90 ID:???
一個目のconfigureにオプションつけないように書いたんだろ
601596:2011/10/07(金) 00:12:52.80 ID:???
マニュアルどおりにインストールしても、
/path/to/source/tree/configureは元々ないし、作成されもしないですよね、
本家のマニュアルにも書いてあるし
602NAME IS NULL:2011/10/07(金) 00:45:36.89 ID:???
[options go here] も /path/to/source/tree/ も、そのものを入力するわけではないぞ?
各自の環境に合わせろということだ。
603NAME IS NULL:2011/10/07(金) 01:16:29.74 ID:???
ありがちだ
604NAME IS NULL:2011/10/07(金) 02:04:19.07 ID:???
/ソースを/展開した/場所の/パス/configure (←必要ならオプションはここで指定)
とでもすれば分かってもらえたか。
というか、ユーザが置き換えるべきところはそのように表示してほしいよね。
あと、日本語訳は原文にある VPATH ビルド云々の説明が
ごっそり抜けているので誤解を招きそう。
605NAME IS NULL:2011/10/07(金) 05:41:16.96 ID:???
/path/to という文化に慣れてなかったというオチか。
最初からそう書いておいてくれれば話は早かったのに、「←こいつ」って。
606NAME IS NULL:2011/10/07(金) 06:58:54.41 ID:???
.configureだろ
607NAME IS NULL:2011/10/09(日) 12:19:24.96 ID:???
./configure です
608NAME IS NULL:2011/10/09(日) 17:31:03.88 ID:???
MySQL の日本語マニュアルだったか、
「コンフィギャ」と書かれていて、
のけぞったことがある。
609NAME IS NULL:2011/10/09(日) 18:53:53.43 ID:???
なぜ?
610NAME IS NULL:2011/10/09(日) 19:34:01.46 ID:???
独創的な訳だと思ったギャ
611NAME IS NULL:2011/10/09(日) 21:27:02.38 ID:???
オプションは何付けてる?xmlぐらいか?
612NAME IS NULL:2011/10/18(火) 09:30:36.93 ID:???
この前ossdb silver受けて合格はしたんだが・・・
あの問題が解けたところでPostgreSQL専門
DBAとしてはあまり意味ないよな。

それは置いといて9.1で新しくバックアップコマンド
追加されたのはいいけど差分orアーカイブのオンラインバックアップも
PostgreSQLで出来るように作って欲しいね。
ツールをいろんなところが作れるのはいいが、
バックアップは本家で管理してもらえるほうが・・・ねぇpg_rmanさん・・・
613NAME IS NULL:2011/10/18(火) 12:59:39.24 ID:???
>>612
> 新しくバックアップコマンド

ほほぅ。
614NAME IS NULL:2011/10/18(火) 22:03:08.16 ID:???
>>612
Silver は開発者、DBAならGold目指せ
615NAME IS NULL:2011/10/19(水) 12:26:02.31 ID:???
>>612
> PostgreSQL専門
> DBA

PostgreSQLで仕事になるのですか?
616NAME IS NULL:2011/10/19(水) 17:52:38.16 ID:???
dumpallすると12GB分(24万レコード)のデータベースなのですが検索で時間がかかるので、
メインメモリを12GB増設して、/usr/local/pgsql/data をメモリ上で
動かすことはLinux(Ubuntu)でできるのでしょうか?
617NAME IS NULL:2011/10/19(水) 18:21:39.05 ID:???
できるかもだけど、その程度で遅くなるのは作り方が間違ってるか
対象が広すぎるとしか・・・
618NAME IS NULL:2011/10/19(水) 18:47:22.14 ID:???
1レコードあたりのサイズがなんか大きい気がするけど、その検索はlikeだったりするの?
619NAME IS NULL:2011/10/19(水) 20:01:57.82 ID:???
>>618
> 検索はlikeだったりするの?

SQLはマニュアルでのサンプル通りに作ってます。
http://www.postgresql.jp/document/9.1/html/textsearch-controls.html

(全文検索でRankとヘッドラインもつけて日本語検索なので)

select *,ts_rank(to_tsvector('japanese',contents) ,to_tsquery('japanese','$querytext')) AS rank ,ts_headline(keywords,to_tsquery('japanese','$querytext')) AS headline
from report where to_tsvector('japanese',keywords) @@ to_tsquery('japanese','$querytext') ORDER BY rank DESC LIMIT 100;

1回のpg_query(sql)で8分ぐらいかかっている。


620NAME IS NULL:2011/10/19(水) 20:16:27.70 ID:???
>>616
圧縮しないでdumpallしたら12GBになったとしても、インデックスなどを考慮すると/usr/local/pgsql/dataは12GB以上の容量があるはず。duコマンドなどでフォルダのデータ量を見ればすぐに分かる。
サーバが停止したときに、メモリの内容が消えてもよければ、tmpfs上にデータフォルダを作ってもいい。

十分なメモリがあれば、必要なデータはメモリ上にキャッシュされるはずだから、よほど更新が多いとかじゃなければ、あえてそんなことをする必要はないとおもうけど。

>>619
explainで検索プランを見ると、どうなってるの?
621NAME IS NULL:2011/10/19(水) 20:39:31.14 ID:???
>>620
> インデックス

「対象の列が○○バイト以上なのでインデックスが作れません。」のようなメッセージが出てインデックスを作れてません。

explain ?
622NAME IS NULL:2011/10/19(水) 22:00:52.31 ID:???
>>619
ああ、やっぱ普通の検索じゃなかったんだね。
ディスクIOがボトルネックになってることも判明してるんだろうし
http://itpro.nikkeibp.co.jp/article/Keyword/20070330/267007/
この辺でも見てみたらどうでしょ
623NAME IS NULL:2011/10/19(水) 22:04:26.41 ID:???
>>622
ありがとう。
624NAME IS NULL:2011/10/19(水) 22:52:30.06 ID:???
>>621
tsvectorの転置インデックスが作れていないのなら、それが低速になっている主な原因の一つだろうだから、
まずインデックスを作れない問題を解決したほうがいい気がするよ。
625NAME IS NULL:2011/10/20(木) 01:20:19.83 ID:???
レンジパーティション
テーブルスペース
しないとキャッシュに乗るわけなかった
626NAME IS NULL:2011/10/20(木) 16:51:33.39 ID:???
インデックス作成対象のtextが長いためか

ERROR: index row requires ○○ bytes, maximum size is 8191

のエラーが出てインデックスが作成できません。

これを回避する方法はあるのでしょうか?
627626:2011/10/20(木) 16:58:14.67 ID:???
追記です。

SQLは>>619の内容なので
検索をハッシュ値で代替するのはできないのではと思っています。
628NAME IS NULL:2011/10/20(木) 18:10:22.14 ID:???
>>626
reportテーブルのcontentsのような長いテキストデータに対して、
b-treeインデックスを作ろうとすると、そういうエラーがでるようだけど、
どういう内容のコマンドを入力して、インデックスを作成しようとしたの?

CREATE INDEX ○○ ON report USING gin(to_tsvector('japanese', contents));
として、GINのインデックスを作成する必要があるよ。
629NAME IS NULL:2011/10/20(木) 18:16:11.41 ID:???
ちがった
必要なインデックスは、
CREATE INDEX ○○ ON report USING gin(to_tsvector('japanese', keywords));
のほうだった。
630NAME IS NULL:2011/10/21(金) 10:22:17.61 ID:???
>>629

ありがとうございます。

無事にインデックスが作れました。

クエリーの反応時間は、すこし向上したような気がします。
8分→7分?
631NAME IS NULL:2011/10/21(金) 17:40:23.88 ID:???
インデックス用の列を別に用意したら、応答が4倍早くなりました。

reportdb=# alter table report add tsvector_keywords tsvector;
reportdb=# update report set tsvector_keywords = to_tsvector('japanese',keywords);
reportdb=# create index tsvector_keywords_index on report using gin (tsvector_keywords);
632NAME IS NULL:2011/10/21(金) 18:09:18.63 ID:???
>>631
explain analyze "619のSQL文";
を実行すると、検索の詳しい処理手順や、時間がかかっている部分が分かるのだけど…

わりと時間がかかっていることから推察すると、keywordsに該当するreport行自体がとても多いのだろうから、これ以上の高速化は難しいのかもしれない。
日本語のtsvector化に何のライブラリを使っているか知らないけど、
to_tsvector('japanese',contents)
あたりもあらかじめ変換しておくと、若干のスピードアップにはなるかも。

それ以上は、データベースをメモリに載せるとか、奇抜な手を使うくらいしか思いつかない。
633NAME IS NULL:2011/10/21(金) 20:06:06.03 ID:???
>>632
> データベースをメモリに載せるとか、奇抜な手を使うくらいしか思いつかない。
>>616

うん。
634NAME IS NULL:2011/10/22(土) 20:58:56.91 ID:???
9.1 Win版
pgAdminVで、バックアップしたファイルをリストアしようとすると
エラーになります。
対処方法不明です。

pg_restore: [アーカイバ] 入力ファイルが有効なアーカイブではないようです
プロセスは、1 のリターンコードを返しました。

対処方法がなければ、バージョンアップは要注意かな。
635NAME IS NULL:2011/10/22(土) 21:03:10.61 ID:???
ふーん。とだけお返しします。
自分でバックアップコマンド打ってリストアした結果くらい
書いてくれないとねーーー(棒
636NAME IS NULL:2011/10/22(土) 21:14:33.90 ID:???
>>634
あ、それ俺も最初なんで?って思ったけど、バックアップの時に、
形式選ぶ選択肢があったと思う。
デフォルトだと何も選択していない状態だから、何か選べばいいよ。
637NAME IS NULL:2011/10/22(土) 21:25:17.71 ID:???
pg_restoreはテキスト形式のファイルは元に戻せません。

テキスト出力はsqlファイルとして実行して戻し
アーカイブ方式はpg_restoreコマンドを使用しないと戻せません。

という夢を見た
638NAME IS NULL:2011/10/22(土) 21:49:04.37 ID:???
俺はマニュアルを読まないお前のサポートじゃないんだ。
pgAdminの何を操作したのか知らないがこいつは9.1に対応してやがるのか?
まぁ、pg_dumpなんざバージョンアップ時に必至のコマンドだから
出来ないなんてことがあってはまずい。
ほぼ100%コマンドと動作を調査して使ってないと思われるので
下を読んで、1か月ROMってください

ttp://www.postgresql.jp/document/pg904doc/html/app-pgrestore.html
*******************************************
pg_restoreは、pg_dumpによってアーカイブされた
平文形式以外のアーカイブファイルを使って
*******************************************
639NAME IS NULL:2011/10/24(月) 13:59:32.19 ID:???
SQL条件で抽出されたレコードのエクスポートファイル出力とインポートって、
何かコマンドありますか?

プログラムで作るしかないのかな?
640NAME IS NULL:2011/10/24(月) 14:01:57.49 ID:???
マニュアル読んだ後ググれカス
641NAME IS NULL:2011/10/24(月) 17:28:21.74 ID:???
よくわからんが \o のことかい
642NAME IS NULL:2011/10/24(月) 17:38:14.06 ID:???
>>639
copyのこと?
643NAME IS NULL:2011/10/24(月) 18:40:08.49 ID:???
>>642
copy で可能なんですね。
ありがとう。
644NAME IS NULL:2011/10/25(火) 14:45:19.25 ID:???
一晩かけて考えたり調べたりして、完全に詰まったので質問させてください

Ubuntuにpostgresqlをインストールして、sudo apt-get install libpg-javaでjdbcドライバをインストールした
export CLASSPATH=$CLASSPATH:/〜/postgresql-jdbc3-8.4.jarでクラスパスを設定
javac file.javaでプログラムをコンパイルしてjava fileで実行
(file.javaは既存のデータベースにテーブルを追加してデータを入力するもの)
すると
org.postgresql.util.PSQLException: FATAL: ???"postgres"???????????????
と表示されてしまう
"postgres"はpostgresqlをインストールしたときに作ったユーザで、実行しているのも"postgres"
ここからjava file成功まで、どのように進めていけばいいのかわかりません
お教えいただけると助かります
645NAME IS NULL:2011/10/25(火) 15:35:11.09 ID:???
>>644
LANG=C
してもう一度例外メッセージが読めるかどうか試してみては
646NAME IS NULL:2011/10/25(火) 15:39:37.67 ID:???
肝心なところがモザイクっていうね。
647>>664:2011/10/25(火) 16:01:51.91 ID:???
>>645返信ありがとうございます
例外メッセージを表示するためにpostgresql.conf内でlc_messages = 'C'に変更して再度実行してみました
その結果、以下のように読めるようになりました
org.postgresql.util.PSQLException: FATAL: password authentication failed for user "postgres"

postgresユーザのパスワードの認証・・・?少しは進展したのでしょうか
648NAME IS NULL:2011/10/25(火) 16:07:14.69 ID:???
パスワードの設定してないでしょ
ローカルでpsql -U postgres で使える?
試しに、pg_hba.conf のlocalhostをtrustにして
アクセス時のサーバをlocalhostにしてみて
通るか確認してからパスワードの設定してみたらいいと思う
649>>644:2011/10/25(火) 16:29:29.13 ID:???
>>648ご指摘の通りで、修正したところjava fileが成功しました
まさかと思い、確認してみたところパスワードの設定が出来ていませんでした
一度、アップデート・マネージャに指摘されたアップデートを入れたところpostgresqlが起動しなくなったので削除→再インストールをしました
その時にpostgresユーザにパスワードが設定されているので(当然ですが)postgresqlのパスワードも設定されていると勘違いしていました

結果は単純なミスでしたが、昨晩から今まで色々なことを調べながら設定してきて少しは知識も増えたと感じています
ご指摘及び情報ありがとうございました
これからも精進していきたいと思います
650NAME IS NULL:2011/10/26(水) 13:15:24.45 ID:???
wwwワロタ
すごく失礼だけど、この程度(LANG=C)でPostgreに挑むという
>>644のチャレンジャー精神にあきれた
651NAME IS NULL:2011/10/26(水) 13:37:22.63 ID:???
俺も「???????????」でハマったから笑えませんわ。
ところで、最近のバージョンでも
日本語を使うならロケール無効で initdb した方が無難なの?
最近は Vine の起動スクリプトも --no-locale しなくなったみたいだけど
もう気にしなくていいのかな。
652NAME IS NULL:2011/10/26(水) 14:11:55.33 ID:???
>>651
/usr/local/pgsql/bin/initdb --no-locale --encoding=utf8 -D /usr/local/pgsql/data
653NAME IS NULL:2011/10/26(水) 16:23:01.32 ID:???
>>650
挑むとか、そんな気持ちで向き合わないといけないものかね。

割とすんなりlc_messagesに至ったり、pg_hba.confを編集したりと、ある程度の素養はある人だと思うよ。
なぜ自分で思いつけなかったのかが不思議なぐらいに。
654NAME IS NULL:2011/10/26(水) 23:24:13.64 ID:???
単にマニュアルすら読まない馬鹿ってことだろ。
655NAME IS NULL:2011/10/27(木) 00:01:37.56 ID:???
マニュアル読めって言うアドバイスなら、
小学生の自分でもできるよ。
656NAME IS NULL:2011/10/27(木) 00:05:09.75 ID:???
マニュアルすら読めない馬鹿は小学生以下なわけだが
657NAME IS NULL:2011/10/27(木) 00:57:19.15 ID:???
マニュアル読めって言うアドバイスしかしないなら、
ゴミと同じだな。
658NAME IS NULL:2011/10/27(木) 06:51:25.69 ID:???
そうだな。
日本の生活について問われて「民法嫁」というのと同じだな。
659NAME IS NULL:2011/10/27(木) 07:02:46.87 ID:???
マニュアル指摘されたくらいで過剰反応しすぎだよな。
常識なのに。
660NAME IS NULL:2011/10/27(木) 07:37:09.17 ID:???
ふーん
民法は日本の生活のマニュアルなんですね
661NAME IS NULL:2011/10/27(木) 08:07:24.88 ID:???
意味がないという意味で同じ。
人生相談に「常識」で答えるほど無意味なものはない。
662NAME IS NULL:2011/10/27(木) 08:44:44.40 ID:???
馬鹿が腹立てるとこんなもんだよなw
663NAME IS NULL:2011/10/27(木) 14:49:53.17 ID:???
我輩の辞書には、
『マニュアルを嫁』しかない。
664NAME IS NULL:2011/10/27(木) 14:52:03.29 ID:???
しかも、五時。
665NAME IS NULL:2011/10/27(木) 15:01:12.50 ID:???
>>663

おまえ、c言語のマニュアル読んでカーネル作れるか?
666NAME IS NULL:2011/10/27(木) 16:47:46.59 ID:???
原田大明神が
pgsql_fdwのパッチを送ってるね。
結局自分で作っちゃったんだ。
早く使いたい
667NAME IS NULL:2011/10/29(土) 07:22:10.44 ID:???
小学生程度の質問が人生相談だそうです
668NAME IS NULL:2011/10/29(土) 11:18:38.10 ID:???
我輩の辞書には、
『マニュアルを嫁』はあるが、
『マニュアルを読む』はない。
669NAME IS NULL:2011/10/29(土) 11:22:39.29 ID:???
>>668
そんな、俺を紹介しないでくれ
670NAME IS NULL:2011/10/29(土) 12:06:48.12 ID:???
oss-db gold も合格した。簡単すぎてこの資格意味ないね。
もっと掘り下げて記述式の問題にしないと実運用できない。
プラチナ作って、さらに上のマスターとかいうレベルがあってもいいくらいだよ。

そもそもPostgreSQL単体で稼働してるとこなんてないっつーのが
oracle様とは違うとこだよなwww
671NAME IS NULL:2011/10/29(土) 14:22:29.04 ID:???
oracleの方が金になるからね
672NAME IS NULL:2011/10/30(日) 03:04:01.19 ID:???
おまいひょっとしてやればできるんじゃまいか
673NAME IS NULL:2011/10/31(月) 00:15:17.63 ID:???
9.0のpgAdminV、バックアップするときクラッシュする。
9.1に切り替えた。
674NAME IS NULL:2011/11/05(土) 21:07:47.31 ID:wv2eL8wC
9.1でDBアプリを作ろうとしているのですが
5クライアントから1つのテーブルに対して頻繁にINSERTがあるDBで
さらにそのクライアントから入力した全てのレコードへの参照もある場合
CREATE VIEWを使うべきでしょうか?
それともCREATE TEMP TABLEを使うべきでしょうか?
両者ともINSERT中のレコードがあるとロックが発生するのでしょうか?
675NAME IS NULL:2011/11/05(土) 21:35:47.09 ID:???
>>674
PostgreSQLではMVCCと言って、ほぼロックが発生しない手法が採用されている。
http://www.postgresql.jp/document/current/html/mvcc-intro.html
なので特に何もする必要はない。

仮に一時テーブルなどの別テーブルにコピーしたとしても、別ディスクなどにテーブルスペースを作ったりしないと効果が小さいし、
Viewに至ってはselect文の別表現なので全く意味が無い。
676NAME IS NULL:2011/11/05(土) 22:00:20.63 ID:wv2eL8wC
>>675
わかりやすく説明していただきありがとうございました!
677NAME IS NULL:2011/11/06(日) 03:33:23.87 ID:???
最近のニュースはありますか?
678NAME IS NULL:2011/11/06(日) 18:45:17.47 ID:4Qd5Dq0Q
point順に並び替え、ランクを表示する

テーブル名 :tbl_point
フィールド名:point
name
gender

表示    :p_rank, name, gender, point

select rank() over (order by [point] desc) as [p_rank], name, point from [tbl_point];

p_rank | name | gender | point

1 | hoge | 1 | 98
2   | fuga | 2 | 80
3  | poyo | 2 | 70
4  | boke | 1 | 60

ここまではできるのですが

p_rank | mp_rank | wp_rank | name | gender | point

1 | 1 | | hoge | 1 | 98
2 | | 1 | fuga | 2 | 80
3  | | 2 | poyo | 2 | 70
4  | 2 | | boke | 1 | 60

gender毎のも表示するにはどうすればいいですか?


679NAME IS NULL:2011/11/06(日) 19:28:33.94 ID:???
>>678
こういうこと?
select rank() over (partition by [gender] order by [point] desc) as [p_rank], name, point from [tbl_point];
680NAME IS NULL:2011/11/06(日) 19:31:08.21 ID:???
>>678
ああ、実行例があったね
もう分かると思うけど、

select
rank() over (order by [point] desc) as [p_rank],
rank() over (partition by [gender] order by [point] desc) as [mp_rank],
name,
point
from [tbl_point];
681NAME IS NULL:2011/11/06(日) 19:33:36.29 ID:4Qd5Dq0Q
>>680
これだとmp_rank, wp_rank毎(フィールド毎)の順位が出ないですね。
682NAME IS NULL:2011/11/06(日) 19:33:44.26 ID:???
>>678
何度も書き込んですまないけど、
最後に
order by point desc
って付けないと、どういう順序で表示されるかは保証されないよ。
683NAME IS NULL:2011/11/06(日) 19:35:59.55 ID:4Qd5Dq0Q
イメージとしては
select
rank() over (order by [point] desc) as [p_rank],
rank() over (partition by [gender] where gender = 1 order by [point] desc) as [mp_rank],
rank() over (partition by [gender] where gender = 2 order by [point] desc) as [wp_rank],
name,
point
from [tbl_point];

ができればいいんですが...
684NAME IS NULL:2011/11/06(日) 19:36:42.95 ID:???
>>681
wp_rank(フィールド毎)ってのは、何の値で分割したグループのこと?
685NAME IS NULL:2011/11/06(日) 19:39:30.89 ID:???
>>683
gender=1の場合のwp_rankと、
gender=2の場合のmp_rankは、それそれぞれどうなってほしいの?
686NAME IS NULL:2011/11/06(日) 19:40:28.91 ID:4Qd5Dq0Q
説明不足ですいません。

p_rankが全体の順位
m_rankがgender=1グループの順位
w_rankがgender=2グループの順位
687NAME IS NULL:2011/11/06(日) 19:43:40.22 ID:4Qd5Dq0Q
gender=1の場合のwp_rankと、

gender=2の場合のmp_rankは、

できればNullになってほしいのですが...
688NAME IS NULL:2011/11/06(日) 19:48:55.31 ID:???
>>687
select
p_rank,
(case gender when 1 then gp_rank else null end) as [mp_rank],
(case gender when 2 then gp_rank else null end) as [wp_rank],
name,
point
from
(
select
rank() over (order by [point] desc) as [p_rank],
rank() over (partition by [gender] order by [point] desc) as [gp_rank],
gender,
name,
point
from [tbl_point]
) t
order by point desc;
689NAME IS NULL:2011/11/06(日) 20:09:36.93 ID:4Qd5Dq0Q
相関サブクエリ?の結果を使ってCASEで分岐した結果に別名付けているのですか?

できました、ありがとうございました!
690NAME IS NULL:2011/11/11(金) 19:12:42.13 ID:FA3LJ5nm
phpのpearにPEAR::DBというのがありますが、これを介してPostgreSQLに接続する利点、
直接pg_connectする場合に比べてのメリットはなんですか?
691NAME IS NULL:2011/11/11(金) 19:58:03.09 ID:???
抽象レイヤーをはさむという利点。
PDO実装以降のPHPならPearDBを使うメリットはないと思ってる
692NAME IS NULL:2011/11/20(日) 11:32:45.50 ID:lknyTq5F
自宅で以下の構成で作っているのですが、
JDBC と ODBC ともにクライアントからサーバーに接続出来ません。
サーバーには疎いので、ログファイルはどこを確認すればいいのかよくわかりません。
なにか設定すべきところや確認すべきところはありませんか?

○ サーバ側 (ubuntu 11.10 64bit)
postgresql.conf → 『listen_addresses = '*'』追加
pg_hba.conf → 『host all all 192.168.0.0/24 md5』追加
sudo ufw status ⇒ 『非アクティブ』確認

○ クライアント側 (winfows7 64bit)
ファイアウォール ⇒ 『OFF』に設定
Security Essentials ⇒ 『リアルタイム保護無効』に設定

○ ルータ(WZR-HP-G300NH)
とくに設定無し
693692:2011/11/20(日) 16:40:07.73 ID:???
解決しました。
正確な理由は不明ですが。
インストール直後では service postgresql reload が、効いてなかったのか、
pg_hba.conf の設定が間違っていて、効いていなかっただけなのかよくわかりません。

694NAME IS NULL:2011/11/20(日) 17:21:26.67 ID:???
クライアントのファイアウォールは戻しておいたほうがいいよ
695NAME IS NULL:2011/11/20(日) 17:29:07.76 ID:???
ウィルスソフトのファイアーウォールで
例外にしてあげればいいだけだろ・・・どんだけだよw
俺はpg_ctl reload派だがな。
pg_hbaはリロードで反映されるが間違っているかどうかは
ログに出力される。こんなの常識でつ。
696NAME IS NULL:2011/11/20(日) 18:34:28.27 ID:???
何を例外にするの?ufwの話には見えないけど。

pg_ctl reload派だとかいってるのはわがまま、頑固な人におおいね。環境に順応できないというか。
697NAME IS NULL:2011/11/20(日) 18:47:31.44 ID:???
serviceで起動シェル書いたことないな。
普通は絶対パスだろ
698NAME IS NULL:2011/11/20(日) 18:51:10.00 ID:???
おまえら自宅でやるレベルなんだから細かいこと言うなよ
699NAME IS NULL:2011/11/20(日) 19:23:54.05 ID:???
起動シェル使わない人って、やっぱりいつも手動で停止するの?
700NAME IS NULL:2011/11/20(日) 19:32:28.60 ID:???
>>697
何を言ってるかわからない
むしろ絶対パスで書かなくとも/etc/init.d配下を確実に参照してくれるserviceのほうがよくね
701NAME IS NULL:2011/11/20(日) 19:33:50.69 ID:???
>>698
自宅でやるからいろいろ試せるってのは相当なメリットだけどな
702NAME IS NULL:2011/11/22(火) 14:49:15.03 ID:???
service
環境依存。
どういう動作が定義されているかは実行される側のスクリプトによる。
そもそもOSによってこのコマンドが存在しない場合もある。

pg_ctl
posgres固有のコマンド。

どの環境でも確実に意図した動作をしてくれるのはpg_ctlだよな。
だけどserviceコマンドでもスクリプトで定義されている動作を
ちゃんと分かっているならまぁどっちでもいいわ。
絶対パス云々はコマンドにパスが通ってるかどうかの問題だから関係ないだろ。
703NAME IS NULL:2011/11/24(木) 22:52:39.89 ID:Ld9s4TyG
年代別集計をしたく以下のようにしていますが
結果が0でもその年代も表示したいのですができませんでしょうか?

SELECT CASE
when r.age between 0 and 9 then '0 - 9'
when r.age between 10 and 19 then '10 - 19'
when r.age between 20 and 29 then '20 - 29'
when r.age between 30 and 39 then '30 - 39'
when r.age between 40 and 49 then '40 - 49'
when r.age between 50 and 59 then '50 - 59'
when r.age between 60 and 69 then '60 - 69'
when r.age between 70 and 79 then '70 - 79'
when r.age between 80 and 89 then '80 - 89'
when r.age between 90 and 99 then '90 - 99'
when r.age >=100 then '100'
end AS "age_group"
,COUNT(CASE
when r.age between 0 and 9 then '0 - 9'
when r.age between 10 and 19 then '10 - 19'
when r.age between 20 and 29 then '20 - 29'
when r.age between 30 and 39 then '30 - 39'
when r.age between 40 and 49 then '40 - 49'
when r.age between 50 and 59 then '50 - 59'
when r.age between 60 and 69 then '60 - 69'
when r.age between 70 and 79 then '70 - 79'
when r.age between 80 and 89 then '80 - 89'
when r.age between 90 and 99 then '90 - 99'
when r.age >=100 then '100'
end) AS "age_count"
FROM rank as r
GROUP BY age_group
ORDER BY age_group;
704NAME IS NULL:2011/11/24(木) 23:04:19.18 ID:???
select (a-1)*10 || ' - ' || a*10-1 as range, count(age) from generate_series(1, 10) as s(a) left join table_1 on (age between (a-1)*10 and a*10-1) group by a order by a

100以上でてないけど
705NAME IS NULL:2011/11/24(木) 23:22:18.58 ID:Ld9s4TyG
>>704
スバラシイ
706NAME IS NULL:2011/11/25(金) 21:42:48.62 ID:KYZJ26CC
このスレにoledb経験のある勇者はいませんか
oledbでトランザクションを組むとコミット時に
XACT_E_NOTSUPPORTED(0x8004D00F)
が出ます
OLEDBは2006年から更新されていないのですがオワコンなのでしょうか
OLEDBで作成したオラクルアプリのコンバートを考えているので
npgsqlは出来れば避けたいのですが。

環境はPG9.1.1 OLEDB1.0.0.20 VB2008です
707NAME IS NULL:2011/11/26(土) 10:00:15.58 ID:???
>>706
いやもう出てるメッセージそのまんまじゃないのか。
708NAME IS NULL:2011/11/26(土) 13:05:07.00 ID:ydK+kBxB
え、使い方かなにかが悪いわけじゃないの?
トランザクションをサポートしてないとは
さすがに考えにくかったんだけど
709NAME IS NULL:2011/11/26(土) 15:03:30.10 ID:???
無料セミナーの案内きたお
710NAME IS NULL:2011/11/26(土) 15:09:41.59 ID:ydK+kBxB
706ですが、無理なようですのでnpgsqlにしました。
オブジェクト構成はoledbとほぼ変わらないようなので
機械的にConnection,Transaction,DataReader,Command等
のオブジェクトクラスを文字列置換するだけでそこそこいけました

ところでイケメンに聞きたいのですが、ググったら
pg8系では更新系の複数副問い合わせはサポートしていないようですが
現状も一緒でしょうか。書き方工夫すれば通りますでしょうか

UPDATE T1 SET ( F1, F2 ) = (SELECT F3, F4 FROM T2 WHERE T1.KEY=T2.KEY)

CREATE TABLE T1 (KEY NUMERIC(1),F1 NUMERIC(1),F2 NUMERIC(1));
CREATE TABLE T2 (KEY NUMERIC(1),F3 NUMERIC(1),F4 NUMERIC(1));
INSERT INTO T1 VALUES( 1,1,2 );
INSERT INTO T2 VALUES( 1,3,4 );
711NAME IS NULL:2011/11/26(土) 15:47:04.49 ID:???
>>710
現状とは? 9のことかいな?
712NAME IS NULL:2011/11/26(土) 16:15:54.21 ID:ydK+kBxB
>>711
はい、そうです。説明不足ですいません
713NAME IS NULL:2011/11/26(土) 16:22:43.80 ID:???
714NAME IS NULL:2011/11/26(土) 16:32:29.45 ID:fYDjQ7Qp
>>>712
>UPDATE T1 SET F1=F3, F2=F4 FROM T2 WHERE T1.KEY=T2.KEY;
715NAME IS NULL:2011/11/26(土) 18:02:33.83 ID:???
8.x, 9.xでも機能は増えるから、8系, 9系という情報では足りないよ。
716NAME IS NULL:2011/11/26(土) 18:22:24.31 ID:ydK+kBxB
>>714
おお、ありがとうございます。
初見の型式ですがFROM句があるんですね

>>713
>>715
参考になります
717NAME IS NULL:2011/11/28(月) 21:05:00.87 ID:???
pgsqlで
718NAME IS NULL:2011/11/30(水) 02:26:11.96 ID:???
最後から任意の件数を問い合わせたいのですが
select time from test order by time desc offset 0 limit 3;で
呼び出すと下記のようになりますが

time        
------------------
2011-11-28 08:20:16
2010-10-26 06:20:16
2009-09-24 04:20:16


↓のように更にソートして呼び出すにはどう書けばよいのでしょうか?
time          
------------------
2009-09-24 04:20:16
2010-10-26 06:20:16
2011-11-28 08:20:16
719NAME IS NULL:2011/11/30(水) 02:51:44.30 ID:???
select * from (select time from test order by time desc offset 0 limit 3) order by time;
720NAME IS NULL:2011/11/30(水) 03:56:42.99 ID:???
>>719
実行したのですが無理でした。
ERROR: subquery in FROM must have an alias
HINT: For example, FROM (SELECT ...) [AS] foo.
721NAME IS NULL:2011/11/30(水) 04:06:21.25 ID:???
HINT読もうぜ
722NAME IS NULL:2011/11/30(水) 04:06:33.97 ID:???
select * from (select time from test order by time desc offset 0 limit 3) you_must_read_the_error order by time;
723NAME IS NULL:2011/11/30(水) 10:34:51.97 ID:???
HINT通りなら
select * from (select time from test order by time desc offset 0 limit 3) foo order by time;
だなw
724NAME IS NULL:2011/11/30(水) 13:49:09.68 ID:???
>>723
fooにテーブル名をいれてみたらいけました。
ありがとうございます。

そしてレスをしていただいた皆様ありがとうございました。
725NAME IS NULL:2011/11/30(水) 15:18:28.10 ID:???
>>722うごかんの?
726NAME IS NULL:2011/11/30(水) 17:56:12.21 ID:???
>>725
今やったら動きました。
>>721のあとのレスだったので
悪い冗談(あなたは the_error を読まなくてはなりません。)かと思ってしまいましたw。
大変失礼しました。ありがとうございました。m( __ __ )m
727NAME IS NULL:2011/12/01(木) 13:40:26.33 ID:???
>fooにテーブル名をいれてみたらいけました。

いや何でもいいんだけどな。
you_must_read_the_error でも foo でもいい。
728NAME IS NULL:2011/12/11(日) 16:12:36.66 ID:2BDdxjrX
「俺の全文検索」のソースをアップロードした。

http://www.ne.jp/asahi/sun/patagonia/fulltext/fulltext.html

うまく全文検索できないときには掲示板に書きこんでくれ。
729NAME IS NULL:2011/12/12(月) 18:00:16.73 ID:tvQA515y
オークションサイト構築の課題をやっています。
SQLまわりで悩んでいます。(Postgres)

・出品物テーブル
shuppin
出品物ID(主キー),タイトル,開始時刻,終了時刻,説明・・・

・入札履歴テーブル
bid_history
入札ID(主キー),出品物ID,価格,入札ユーザー,入札日時・・・

出品物1レコードに対し、出品物IDで紐付けられた入札履歴が複数存在する形になります。

・やりたいこと:
出品物を一覧で取得する際に、出品物の各レコードに、入札件数を結合した状態で取得できるSQLを作りたいです。
「出品物テーブルにある出品物IDそれぞれについて値をカウントし、それをBID_CNTというカラム名で結合して取得する」

SELECT COUNT(*) FROM bid_history WHERE 出品物ID = '123'
このようにすれば、「出品物IDが123の件数を取得」することができます。
これを表の形式で取得したのちINNER JOINすればいいような気がしますが、
こういう複雑な処理をSQLだけで書ける方いらっしゃいましたら知恵を貸してください。
730NAME IS NULL:2011/12/12(月) 18:13:35.64 ID:???
select
*,
(select count(*) from bid_history where bid_history.出品物ID = shuppin.出品物ID)
from shuppin
731NAME IS NULL:2011/12/12(月) 18:16:04.76 ID:???
結合してからだとこうかな。
select
shuppin.*,
coalesce(bid_count_table.cnt, 0) as BID_CNT
from
shuppin left join (select 出品物ID, count(*) as cnt from bid_history group by 出品物ID) using (出品物ID)
732NAME IS NULL:2011/12/12(月) 18:17:12.52 ID:???
別名つけるの忘れた。。
× shuppin left join (select 出品物ID, count(*) as cnt from bid_history group by 出品物ID) using (出品物ID)
○ shuppin left join (select 出品物ID, count(*) as cnt from bid_history group by 出品物ID) bid_count_table using (出品物ID)
733NAME IS NULL:2011/12/12(月) 19:07:17.12 ID:tvQA515y
>>730-732
思い通りのことができるようになりました。
どうもありがとうございました!
734NAME IS NULL:2011/12/15(木) 11:38:44.08 ID:???
9.1用のtextsearch_jaってどこかにあります?
735NAME IS NULL:2011/12/15(木) 21:01:20.52 ID:???
736NAME IS NULL:2011/12/15(木) 22:05:40.56 ID:???
>>735
ありがとう
いまやってみたら
9.1.2でtextsearch_ja-9.0.0がインストールできた
前はうまくいかなかったんだけど何か間違えてたのかも
737NAME IS NULL:2011/12/20(火) 18:10:55.89 ID:???
slony-iでの同期処理が上手くいかないので、質問させてください。

PostgreSQL9.0.4 Windows2008R2にて、
http://developer.pgadmin.org/~hiroshi/Slony-I/Slony-I-JP.txt
一部を除いての通りに設定しました。

変更したのは、次の通りです。
・CREATE TABLE test
(
id serial, value text
); にテーブルを変更
 (各設定時やinsert時には、テーブルに対応して変更してあります)

・STORE NODEの引数に、[EVENT NODE = 1]を追加
 (こうしないと実行できませんでした。)


SUBSCRIBE SET を実行するまで
特にエラー無く進むのですが、
同期が行われません。

また、SUBSCRIBE SETには、次のようなメッセージが表示されます。

Slonik_subscribe.txt:4: NOTICE: subscribe set: omit_copy=f
Slonik_subscribe.txt:4: NOTICE: subscribe set: omit_copy=f
CONTEXT: SQL statement "SELECT "_slony_win32".subscribeSet_int(p_sub_set, p_sub_provider, p_sub_receiver, p_sub_forward, p_omit_copy)"
PL/pgSQL function "subscribeset" line 68 at PERFORM


何か間違などございましたら、
ご指摘をお願いいたします。
738NAME IS NULL:2011/12/21(水) 23:46:52.45 ID:???
>>737
slonyの同期処理はprimary keyに依存したものなので、
テーブル"test"に主keyが無いのがまず気になる。
主key無しのテーブルを同期させるときはset add tableコマンドの使い方を
何か変える必要があった気がする。

subscribe set で出力されるメッセージは、省略されたパラメータ「omit_copy」はfalseとして解釈しますよ、という意味。
>>737 が参照した文書がslony-I 1.x系であるのに対し、実際に使ってるのはslony-I 2.x系であるのが原因。subscribe setは2.x系で引数増えた。
同期されないのは、このメッセージが原因ではない。と思う。
他に同期されない原因のメッセージがどこかに出てるはず。
739736:2011/12/22(木) 14:47:46.56 ID:???
>738

ありがとうございます。

以下を修正して同期が取れるようになりました。
これで運用環境を構築できます。

たぶん、主キーの設定が主要因だと思いますが、
まとめて行ったので全て列挙いたします。

----
・idを主キーに設定
・conninfoにポート番号(port = 5432)を追加
・conninfoにパスワード追加(password=****)を追加


740NAME IS NULL:2011/12/31(土) 10:58:59.93 ID:???
Windows 64bitには対応していると思いますが、
Windows SBS 2011(Essentials)64bitでは、何か問題ないですか?
741NAME IS NULL:2012/01/01(日) 15:40:26.80 ID:???
SBSの制限以外には無いと思うが
742NAME IS NULL:2012/01/06(金) 01:09:19.45 ID:???
データベース関連のデータファイルって
デフラグかけても大丈夫ですか?
743NAME IS NULL:2012/01/06(金) 01:48:26.68 ID:???
うん
それがダメなデフラグソフトがあるとしたら、いろんなファイルが壊れるよ
744NAME IS NULL:2012/01/06(金) 10:18:05.23 ID:???
>>742
DB動かしながらやるんじゃないそ
745NAME IS NULL:2012/01/06(金) 10:24:58.93 ID:???
はあ?
746NAME IS NULL:2012/01/06(金) 17:16:10.95 ID:???
>>744
>DB動かしながらやるんじゃないそ

デフラグってどうやってるんだっけ?
747NAME IS NULL:2012/01/06(金) 17:25:35.01 ID:???
>>746
そりゃあデフラグ専用OSを起動して、そこからそれ以外のエリアを
748NAME IS NULL:2012/01/06(金) 17:43:36.67 ID:???
>>747
>専用OS

デフラグの間はサービスはストップ?
749NAME IS NULL:2012/01/06(金) 19:45:58.18 ID:???
ロック中のファイルはデフラグにスルーされるだけだろう
DB稼動しながらで何も問題はない
750NAME IS NULL:2012/01/07(土) 14:27:04.35 ID:???
ありがとうございました
751NAME IS NULL:2012/01/09(月) 03:17:09.96 ID:???


【スタッフ募集】路線名を擬人化させたエロゲ【鉄オタも】
http://hayabusa.2ch.net/test/read.cgi/news4vip/1326032146/

【wiki】
http://www38.atwiki.jp/train_erog/

【避難所】
http://jbbs.livedoor.jp/game/54004/
752NAME IS NULL:2012/01/14(土) 00:45:05.07 ID:???
pgadminで複数のクエリを実行した時(クエリの実行窓に、複数のSQLを羅列)、
エラーが出ても止まらず次のクエリを実行するって設定はあるでしょうか?

psqlで言うところのon_error_stop offの設定なのですが、
pgadminではそれらしきものが見当たらないようでして。。
753NAME IS NULL:2012/01/14(土) 18:54:19.85 ID:???
>>737
これって、serial型の列に対して暗黙的に作られるsequenceの同期も取らないとfailover上手く行かないんじゃないのかな?
データの同期としては十分なんだろうけど、気をつけておきたい。
754NAME IS NULL:2012/02/06(月) 16:36:15.27 ID:???
テーブルスペースに2バイト文字入りのパス使えるようにならんかなぁ
テーブル名やフィールド名には使えるのにー
replace into もほしいよー
755NAME IS NULL:2012/02/09(木) 15:25:43.84 ID:???
postgresqlの勉強を始めます。
今、いちばんおすすめの教材(Webサイトや書籍)はどれでしょうか。
今はこれをみています。
https://www.sraoss.co.jp/event_seminar/2008/what_is_postgresql.pdf
なお当方はSQLの基礎知識はありますので、主にpostgresqlの基本的なシステム管理面を知りたいです。
クラスタとかまでは必要としていません。
756NAME IS NULL:2012/02/09(木) 16:01:26.64 ID:???
>>755

>>1 は見た?
757NAME IS NULL:2012/02/09(木) 16:38:20.10 ID:???
カンファレンスのチケット完売したそうです。
おめであります。
自分もいくであります。
ttp://www.postgresql.jp/events/pgcon2012/top
758NAME IS NULL:2012/02/09(木) 19:19:23.78 ID:eR5KPAYs
>>755

http://www.postgresql.jp/document/pg912doc/html/

ここでしか解決しないものが多いよ。
759NAME IS NULL:2012/02/10(金) 00:40:40.56 ID:???
psqlで insert したときに
INSERT 0 1
というのが表示されますが、これはどういう意味ですか。
「1」はたぶんinsertした件数だと思うのですが。
760NAME IS NULL:2012/02/10(金) 00:54:01.99 ID:???
761NAME IS NULL:2012/02/10(金) 23:53:22.57 ID:???
>>760
ありがとうございます。
そのページみると、PostgreSQLのinsert文って、いろんな機能があるんですね。
762NAME IS NULL:2012/02/13(月) 18:17:31.85 ID:???
C#のアプリをOracleからPostgreSQLに変更しているのですが
とりあえずPostgreSQL8.4.10というのをWindowsにインストールしました。
C#からはNpgsql.Net というのでつないでみました。
特に問題なく見えたのですが、データを挿入すると「\」が
消えているのを発見しました。これはサーバー側の設定が
何か間違っているのでしょうか?ヒントがあれば教えてくださいませ。
763NAME IS NULL:2012/02/13(月) 18:49:09.15 ID:???
いみふ
764NAME IS NULL:2012/02/13(月) 18:58:35.15 ID:???
今まではミドルウェアが勝手にエスケープしてくれてたんだろ。
765NAME IS NULL:2012/02/13(月) 19:57:26.76 ID:???
PostgreSQL 9.0以前のデフォルトの設定では、バックスラッシュ「\」は特殊なエスケープ文字として扱われる、独自のSQL拡張が有効になっている。
何も設定していないなら、その旨の警告がログに残っているはず。
設定ファイルのstandard_conforming_stringsをonにすることで標準と同じ動作になる。
詳しくは
http://www.postgresql.jp/document/8.4/html/runtime-config-compatible.html
を参照
766NAME IS NULL:2012/02/13(月) 20:14:54.85 ID:???
>>765
ありがほー
さすが2ちゃんは頼りになる
767NAME IS NULL:2012/02/13(月) 21:32:27.19 ID:???
だってLet'sの人が張り付いてるんだもん☆
768NAME IS NULL:2012/02/15(水) 08:30:35.45 ID:???
>>763,764 と >>765 との差が際立つ結果になったなw
769NAME IS NULL:2012/02/15(水) 23:16:48.61 ID:???
「\」がなくなったって?
これは盗難、事件だ。
770NAME IS NULL:2012/02/16(木) 07:18:43.47 ID:???
>>767
それに較べてMySQLには
771NAME IS NULL:2012/02/17(金) 20:38:02.17 ID:???
create table するとテーブル名が強制的に小文字にぃぃぃぃ!
前からこんな仕様だったっけ?
772NAME IS NULL:2012/02/17(金) 20:54:57.20 ID:???
大でも小でも、どっちでもいいんじゃねえの?
だってSQLだもん☆
773NAME IS NULL:2012/02/17(金) 22:47:14.44 ID:???
普通にテーブル検索に引っかからなくてまいったよ!
大文字小文字区別するなんて、おまけにフィールドまで小文字にしないとだめなんて!
もうやってられないよ!
774NAME IS NULL:2012/02/17(金) 22:58:14.91 ID:???
>>773
""
775NAME IS NULL:2012/02/18(土) 04:13:43.06 ID:???
小文字で作った分には大文字小文字関係なく検索できるでしょ
…もしかして検索の時には""つけてるとか?
776NAME IS NULL:2012/02/18(土) 04:26:53.62 ID:???
777NAME IS NULL:2012/02/23(木) 01:30:58.27 ID:???
PC-KEIBAのバグが直ったことで、ポスグレの勉強を始めたROM専のヤツも多いだろうな
778NAME IS NULL:2012/02/24(金) 17:36:46.22 ID:???
postgreSQLカンファレンス行ってきました。
盛況盛況やんややんや。
トラックによっては立ち見が出るほどでした。

かっこよかったのは運用テク編のNTT坂本さんかな。
プロジェクトでは現実路線だとしても技術者としては妥協するな だそうです。

質問し忘れたんですけど、 pg_reorg があればもう
vacuume full って必要ないんですか?
今日までpg_reorgって知りませんでした。 修行が足りん。
779NAME IS NULL:2012/02/24(金) 20:06:30.74 ID:???
>pg_reorg があればもうvacuume full って必要ないんですか?

http://reorg.projects.postgresql.org/index-ja.html
このモジュールは CLUSTER や VACUUM FULL コマンドのより良い代替になります。

って言ってるのを信じるとするなら、要らないんじゃね?
780NAME IS NULL:2012/02/25(土) 00:19:19.53 ID:???
>>779
信じる 信じないの話ですかw

ヴァキュームをする必要なくなる(そのときの弊害がなくなる)
という事は凄い進歩だと思うんだけどなぁ。
781NAME IS NULL:2012/02/25(土) 01:21:18.61 ID:???
VACUUMとVACUUM FULLは全く違うぞ? VACUUM FULLは、HDDのデフラグみたいなもので、毎日やるもんじゃない。
VACUUMは自動バキュームが裏で適当にやってくれる。必要ないわけではないが、弊害もない。

PostgresSQL 9.0 より新しいバージョンでの VACUUM FULL と pg_reorg は似たような動きなので、
排他ロックがかかってしまってもよいなら、VACUUM FULLのほうが余分なことをしないだけ、時間がかからないかもね。
782NAME IS NULL:2012/02/25(土) 01:26:42.51 ID:???
pg_reorgはPostgreSQL Conference 2009でも紹介されてますね。
止めてはいけないシステムなら運用中に実行できるpg_reorg一択ですが、
止めてもよいならテーブルの3倍のディスク容量が必要なpg_reorgより
2倍のディスク容量で済み性能に差がないCLUSTERの方が良いのでは?
CLUSTERがあればもうVACUUM FULLは必要ない、とは言えそうですね。

PostgreSQL Conference 2012 プログラム詳細
http://www.postgresql.jp/events/pgcon2012/program#C3
>【 C3 】PostgreSQL 運用テクニック・レベルアップ編

PostgreSQL Conference 2009 Japan 1日目
http://www.postgresql.jp/events/pgcon09j/j/program_1#3a
http://www.postgresql.jp/events/pgcon09j/doc/a1-1.pdf
>PostgreSQL 適用推進に向けての取り組み

PostgreSQL導入に向けての取り組み 〜大規模システムへの適用を目指して〜(5)
http://lets.postgresql.jp/documents/case/ntt_comware/5
>pg_reorg は、CLUSTER 処理と同等のことが参照/更新処理をブロックせずに実施可能な、
>言わばオンライン CLUSTER とも呼べるツールです。
>対象テーブル+インデックスの2倍のディスク空き領域(ソート処理作業含む)が必要

PostgreSQL 9.0 の新機能
http://lets.postgresql.jp/documents/technical/9.0/
>VACUUM FULL の高速化
> VACUUM FULL のアルゴリズムが改められ、ゴミが多い場合の処理が大幅に高速化されました。
> 一方、ゴミが少ない場合にはむしろ遅くなっているので、
> 「毎晩 vacuumdb --full」するような運用は改める必要があります。
> また、処理中に元のテーブルと同じサイズの一時ディスク領域が必要になったため、
> ディスクフル間近の場合は実行できなくなりました。

PostgreSQL 9.1 の新機能
http://lets.postgresql.jp/documents/technical/9.1/
>CLUSTER が必要に応じてインデックス・スキャンとシーケンシャル・スキャンを使い分け
> CLUSTER の際に、断片化が進んでいる場合は SeqScan してくれるようになりました。
> 特に断片化が進んでいる大きなテーブルだと数倍高速です。
> 外部ツールにも pg_reorg という類似機能を持つ製品がありますが、
> 性能面では差は無くなったと言えます。
> もちろん、再編成中にも参照や更新できる pg_reorg の利点は残っています。
783NAME IS NULL:2012/02/25(土) 01:59:57.26 ID:???
>>782
ありがとうございます。
勉強します。
784NAME IS NULL:2012/02/25(土) 03:07:00.03 ID:???
>>780
そらそうよ。信じられるなら使う、信じられないなら使わない。
すごい進歩だと思い、技術者は妥協するなって言葉に感銘をうけたなら試せよ。
785NAME IS NULL:2012/02/25(土) 12:28:19.55 ID:???
>>784
お 恐れ入ります...
clusterなんてコマンドがある事も知りませんでした。
786NAME IS NULL:2012/02/25(土) 20:14:50.66 ID:???
知らないことなんて腐るほどあるんだから気にしたら負け
787NAME IS NULL:2012/02/26(日) 12:21:38.49 ID:???
MacOS X にPostgreSQLをインストールしました。
Satrt Server.appとかStop Server.appとか Restart Server.appとかあって
便利と言えば便利なんですが、起動時に勝手にPostgreSQLが起動するのを
止める方法がわかりません。
PostgreSQLは開発時にのみ使用するので、通常使用する時に起動してほしく
ありません。
MacOS XでPostgreSQLが勝手に起動するのを止める方法を教えて下さい。
なお http://lets.postgresql.jp/documents/tutorial/macosx/ には書いてませんでした。
788NAME IS NULL:2012/02/26(日) 15:08:16.21 ID:???
MacOS Xって中身はBSDだっけ?
もしそうならBSDでの、起動時に自動起動されるものの設定しているとこが
あるはずだから、そこをどうにかすればいいんじゃないか?
789NAME IS NULL:2012/02/26(日) 15:25:21.56 ID:???
>>787
MacOS Xでの自動起動設定の説明から考えると、
/etc/hostconfigの「Postgre何とか=-YES-」を
「Postgre何とか=-NO-」に変えればよいのでは?

MacOSXでLighttpdを自動起動する方法
http://homepage2.nifty.com/hippos/macosxlighty_autoexec/top.html
(5) Mac OS X 起動時に自動的に MySQL を立ち上げる方法
http://homepage1.nifty.com/alchemy/os_x/php_mysql.html#section1
790NAME IS NULL:2012/02/28(火) 12:39:25.02 ID:???
現在の日付から1ヶ月前の日付を求める方法を教えて下さい。
http://www.postgresql.jp/document/current/html/functions-datetime.html
を読んだのですが、いまいちわかりません。
ついでに '2012-01-01 11:22:33' を '2012-01-01 00:00:00' に変換する方法も教えてください。
791NAME IS NULL:2012/02/28(火) 13:27:24.61 ID:???
>>790
わかりました。
=> select current_date - interval '1 month'
?column?
---------------------
2012-01-28 00:00:00
(1 row)
でした。すごい。

さらに質問:「interval '1 month'」の部分を、カラムの値に合わせて変更できますか。
たとえば
select current_date - interval "#{t.mon} month"
from table1 as t
みたいなかんじです。
792NAME IS NULL:2012/02/28(火) 14:03:53.90 ID:???
>>791
select current_date - t.mon * interval '1 month' from table1 as t
でした。これはすごい。Postgresqlすてきだ。
793NAME IS NULL:2012/03/01(木) 10:37:26.43 ID:???
n:nのリレーションには中間テーブルを使いますが、このテーブルにはインデックスを張ったほうがいいでしょうか。

たとえば books と authors が n:n のとき、

create table books (
id serial primary key,
title varchar(200) not null
);

create table authors (
id serial primary key,
name varchar(200) not null
);

中間テーブルとして writings を用意します。

create table writings (
book_id integer not null references books(id),
author_id integer not null references authors(id)
);

このとき、このテーブルに対しても以下のようなインデックスを張ったほうがいいでしょうか。

create index writings_book_id on writings(book_id);
create index writings_author_id on writings(author_id);

もし張らなくてもいいというのであれば、理由も教えてください。お願いします。
794NAME IS NULL:2012/03/01(木) 10:46:18.62 ID:???
>>793
張ったほうがいいです。
この場合writingsからbooks、authorsへの参照整合性制約があると思うけど、
RDBMS製品によっては参照整合性制約を宣言した時点でwritingsにインデックスが
暗黙的に張られるものもあります。要するにインデックスがあってあたりまえです。
795NAME IS NULL:2012/03/01(木) 11:49:01.98 ID:???
>>794
ありがとうございます。
MySQLもPostgreSQLも、外部参照制約を指定しただけではインデックスを自動作成*しない*ようです。
しかし入門書を読んでも、中間テーブルを作成する時はカラムにインデックスを張りましょう、と書いてありません。
なので、もしかしたら primary key の場合と同じように、references ... を指定したらインデックスも自動的に作成するのかなと思い、質問しました。
これからは references を使う時は create index も忘れずしようと思います。
ありがとうございました。
796NAME IS NULL:2012/03/01(木) 17:34:38.41 ID:???
MySQLは作るよ。
mysql> create table parent (c1 int primary key, c2 varchar(100));
mysql> create table child (c3 int primary key, c1 int,
constraint c_fk foreign key (c1) references parent (c1));

mysql> show create table child\G
*************************** 1. row ***************************
Table: child
Create Table: CREATE TABLE `child` (
`c3` int(11) NOT NULL,
`c1` int(11) DEFAULT NULL,
PRIMARY KEY (`c3`),
KEY `c_fk` (`c1`), ★作られる
CONSTRAINT `c_fk` FOREIGN KEY (`c1`) REFERENCES `parent` (`c1`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
797NAME IS NULL:2012/03/01(木) 19:13:06.87 ID:???
postgresで、mysqlの「¥G」相当のことはできますか。
798NAME IS NULL:2012/03/01(木) 19:33:13.17 ID:???
>>797
\x
799NAME IS NULL:2012/03/01(木) 19:44:57.28 ID:???
>>796
そうなんですか?マニュアル
ttp://dev.mysql.com/doc/refman/4.1/ja/innodb-foreign-key-constraints.html
には

> InnoDB は、外部キーまたは参照キーに対して自動的にインデックスを作成しません。
> したがって、ユーザが明示的にインデックスを作成する必要があります。
> 外部キーのチェックを高速化し、テーブルスキャンを不要にするには、インデックスが必要です。

とあったんですが、ちがうのかな。
800NAME IS NULL:2012/03/01(木) 21:24:57.71 ID:5sB6rcpv
PostgreSQL8.4.10とPerl(5.14.2)との連携をしているのですが教えてください。
cgiでSQLを実行し、txtファイルをテーブルに書き込もうとしているのですが
COPY テーブル FROM textのパス
が、pgAdminで同じSQLコマンドを実行するとテーブルに書き込まれますが
cgiだと実行されません。
なお、データの書き込みの際は一旦TRANCATEでテーブルを空にして全データを
書きこむという手法を取っており、こちらはcgiで問題なく実行されます。
なので、perlとDBとの連携がうまくいっていないということは無いと思うのですが・・・
801NAME IS NULL:2012/03/01(木) 23:23:54.61 ID:???
>>800
PostgreSQLのログに何か出力されているかも。
802NAME IS NULL:2012/03/02(金) 01:01:27.98 ID:???
>>799
最新版のマニュアルを見ようぜ。4.1って2004年リリースだぞ
http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html

> Such an index is created on the referencing table automatically
> if it does not exist.
803800:2012/03/02(金) 21:28:37.66 ID:BzTarHSh
>>801
お恥ずかしい・・・データベースがEUC-JP、txtがUTF-8だったからという理由でした。
失礼しました。
(先に言っておくべきでしたがDB関係は初心者です)
804NAME IS NULL:2012/03/04(日) 19:21:16.20 ID:???
>>802
そうだったのか。ありがとう。まじ感謝する。
PostgreSQLもインデックスを自動的に作ってほしいなー。
805NAME IS NULL:2012/03/06(火) 00:24:37.48 ID:???
    
顕正新聞 平成24年2月5日号「原発全廃特集号」

原発は日本を滅ぼす、即時全廃せよ
人のDNAを破壊、国土を居住不能にする
代替は天然ガス・コンバインドサイクルで十分
惨禍もたらすを知って推進するは犯罪

ttp://d.hatena.ne.jp/kensho01/20120208/1328718592
806NAME IS NULL:2012/03/08(木) 23:08:21.19 ID:AaYThp7J
2000万件入っているテーブルAに行単位に動作するトリガーが付いています。
このトリガの中身は別テーブルBへのレコード追加処理となります。
で、テーブルAにDELETE文を発行するとレスポンスが返るまでに50秒かかります。
トリガを無効にするとレスポンスは1秒もかかりません。
トリガの中の処理を何も無しにしてもトリガが有効だとレスポンスはまた50秒でした。
この場合、どのような対処が必要でしょうか?
807NAME IS NULL:2012/03/09(金) 09:25:53.99 ID:???
トリガーを直すか外して自力でBへの処理を行う
808NAME IS NULL:2012/03/09(金) 09:52:45.70 ID:???
もっと高性能なPCに買い換える。
809NAME IS NULL:2012/03/09(金) 12:28:38.76 ID:???
>>807
トリガを空にしても遅くなるみたいだから前者は無理だろう
トリガの実行までの速度が件数に依存してるんだろうか。割と予想外
810NAME IS NULL:2012/03/10(土) 00:04:35.57 ID:???
delete文が1件deleteではなくて実は全件だったとか
811NAME IS NULL:2012/03/11(日) 11:42:02.86 ID:???
通常のDELETEとトリガあるときのDELETEの違いを
ソースおっかけて調べるとか
812NAME IS NULL:2012/03/11(日) 22:43:21.98 ID:???
試すのが一番かと。
813NAME IS NULL:2012/03/12(月) 08:02:49.84 ID:ExxOdv/p
関数定義読んでも
pg_start_backupの処理が何やってるのか明確にわからない
わかっている人いたら教えて頂けませんか
814NAME IS NULL:2012/03/16(金) 03:30:07.86 ID:6NdHTG36
9.xにしたら、bytea型に対するLIKE検索ができなくなった
815NAME IS NULL:2012/03/17(土) 05:40:41.42 ID:???
>>813
pg_start_backup以降に更新されたデータは
バックアップされない。直前の更新データは
バックアップされる。

少し前に簡単なテストをしたことがあるのだが、その記憶だけど。

テストしてみて、PITRバックアップのスタートポイントとしてマークする
イメージを持った。
816NAME IS NULL:2012/03/17(土) 05:44:05.00 ID:???
postgreSQLの管理とチューニングで参考本は何ですか?
817NAME IS NULL:2012/03/17(土) 08:40:03.43 ID:???
日本語でおk
818NAME IS NULL:2012/03/18(日) 00:58:06.29 ID:???
>>815 pg_start_backup以降に更新されたデータはバックアップされない。
はちょっと違う。どこまで復旧できるかはむしろ pg_stop_backup で決まる。
pg_stop_backup までにバックアップしたDBデータとアーカイブログを使って、
少なくとも pg_stop_backup 直後の状態までリストアできる。
それ以降は残りのアーカイブログ次第。
819NAME IS NULL:2012/03/18(日) 07:06:28.41 ID:???
>>818
あれ、そうだっけ?
手元にテストしたときの資料がないので、あいまいな記憶で
書いてしまいました。

818が本当ならば、pg_start_backup したときに書かれる
日時(どっかのテキストファイルに記録するよね)って、
何の意味があるんだろ。。。
pg_stop_backupの時点の日時を記録すべきだね。
820NAME IS NULL:2012/03/18(日) 09:36:20.17 ID:???
SSDをデータベースの記録装置にするのは危険ですか?
821NAME IS NULL:2012/03/18(日) 17:57:23.14 ID:???
>>820
ふつ〜にやってる
822NAME IS NULL:2012/03/18(日) 18:00:13.39 ID:???
RAMDISKにデータベース置いてる
823NAME IS NULL:2012/03/18(日) 21:53:50.55 ID:zffLo6VO
>>815
レスありがとう。
ストリーミングレプリケーション勉強してて疑問に思ったんだ
マスタ側でpg_start_backupして
それをtarとかでまとめてスレーブ側のサーバーに転送して
pg_stop_backupする
でスレーブとして立ち上げる
こういう手順がネット上にいっぱい転がってて実際にそれで動いたんだけど
なんでpg_start_backupするのかとか意味がわかってないから
トラブル発生した時うろたえちゃうんだ
例えばマスタでpg_stop_backupする前にスレーブを起動すると
FATAL: the database system is starting upて出て起動できなくなるとか。
どっかに詳しい本とかないかなあ。
824NAME IS NULL:2012/03/21(水) 23:12:00.28 ID:Gb9w0WNu
ログにこのようなものがでるんだけれど
FATALのところがどういう意味のエラーなのかわからない。

Mar 21 21:32:58 AEEms-Ba52E-EASTdebugB postgres[22750]: [3-1] LOG: entering
standby mode
Mar 21 21:32:58 AEEms-Ba52E-EASTdebugB postgres[22750]: [4-1] LOG: redo
starts at 0/D8000020
Mar 21 21:32:58 AEEms-Ba52E-EASTdebugB postgres[22750]: [5-1] LOG: record
with zero length at 0/D80000B0
Mar 21 21:32:58 AEEms-Ba52E-EASTdebugB postgres[22750]: [6-1] LOG: trigger
file found: /home/postgres/data/trigger_file
Mar 21 21:32:58 AEEms-Ba52E-EASTdebugB postgres[22750]: [7-1] LOG: redo
done at 0/D8000058
Mar 21 21:32:58 AEEms-Ba52E-EASTdebugB postgres[22750]: [8-1] FATAL: WAL
ends before consistent recovery point
Mar 21 21:32:58 AEEms-Ba52E-EASTdebugB postgres[22662]: [2-1] LOG: startup
process (PID 22750) exited with exit code 1
Mar 21 21:32:58 AEEms-Ba52E-EASTdebugB postgres[22662]: [3-1] LOG:
terminating any other active server processes
825NAME IS NULL:2012/03/22(木) 00:22:16.63 ID:???
pg_stop_backup()しなかったんじゃないかとか書かれてるけど
http://archives.postgresql.org/pgsql-hackers/2011-03/msg01627.php
826NAME IS NULL:2012/03/22(木) 23:23:34.56 ID:VZAm0Uxy
>>825
ありがとさん。どうやらそれっぽい。
827NAME IS NULL:2012/03/23(金) 10:51:45.75 ID:???
>>822
なんかアホくさいな
そんなにメモリ剰ってるならメモリをデータ保管場所にできるモードがあればいいのに
828NAME IS NULL:2012/03/23(金) 13:35:28.53 ID:???
メモリが十分にあって、適切に設定してさえあれば今もメモリ上に乗っかるでしょ。
829NAME IS NULL:2012/03/24(土) 05:53:00.51 ID:???
Windows 64bit版を実業務で使っている方いますか?

安定性はどうでしょう?
それと、4GBを超えた広大なメモリを使えるのですか?
830NAME IS NULL:2012/03/27(火) 10:37:07.41 ID:???
16GBまで使えたと思う。

RAMDISK使うならMySQLとH2のヒープテーブルほしいよね。
831NAME IS NULL:2012/03/29(木) 00:24:22.45 ID:???
create table foobar ( id serial primary key )
で作ったテーブルが、pg_dump すると
create table foobar ( id integer not null );
create sequence foobar_id_seq ... ;
になっちゃうんだけど、これって仕様なの?
pg_dumpしても serial を serial のままにするのはどうしたらいいの?
832NAME IS NULL:2012/03/29(木) 01:43:06.93 ID:???
>>831
pg_dumpに関係ない仕様のようだ。

「serialおよびbigserialデータ型は正確にはデータ型ではなく、テーブルの列に一意の識別子を作成する簡便な表記法です」
http://www.postgresql.jp/document/9.1/html/datatype-numeric.html#DATATYPE-SERIAL
833NAME IS NULL:2012/03/29(木) 11:01:43.43 ID:???
つかserial作ったらツールとか、\dとかで中見てみたらわかる。
834NAME IS NULL:2012/04/03(火) 21:25:45.10 ID:???
restore_commandの戻し元になるファイルは
pg_xlogを指定するのでしょうか
archive_commanで移動させている先を指定するのでしょうか
835NAME IS NULL:2012/04/11(水) 18:14:02.75 ID:XhFcvq4B
エンタープライズ領域へのオープンソースデータベースPostgreSQLの普及を推進する「PostgreSQLエンタープライズ・コンソーシアム」を設立

http://www.yomiuri.co.jp/adv/enterprises/release/detail/00033552.htm


だってさ
836NAME IS NULL:2012/04/12(木) 21:16:26.27 ID:???
ドットネット用のPostgreSQLのドライバ「Npgsql」ってOLE-DBなのでしょうか。
また、インストール方法を教えていただきたいです。
よろしくお願いします。
837NAME IS NULL:2012/04/12(木) 21:22:58.67 ID:???
スタックビルダでインストールできました。
お騒がせしました。
838NAME IS NULL:2012/04/12(木) 23:07:42.76 ID:???
エンタープライズなんて指向すべきじゃないだろうに。
要求されるモノが違う。逆にコミュニティーに悪い影響が出るだけだろう。
何処も食い扶持に預かろうとして参加してるだけだろう。日本でオープンソースなんて流行らないな。
839NAME IS NULL:2012/04/13(金) 02:18:57.48 ID:???
エンタープライズでは今もこれからもPostgreSQLなんて使うもんじゃないって思ってるんだろうけど、なんで?
俺はもっと気軽に採用したいよ
840NAME IS NULL:2012/04/13(金) 04:45:52.76 ID:???
>>838
要するに食い扶持に預かるための参加が気にくわないのですね?
あなたが嫌儲なのは勝手ですが、オープンソースは商売を敵視していません。
PostgreSQLを採用できる範囲が広がるのはコミュニティにとってもよい話です。

エンタープライズ領域で普及したオープンソースにLinuxがありますが、
そのためにLinuxコミュニティに悪い影響が出たとは聞いたことがありません。
食い扶持狙いの会社が寄贈したコードも問題なくkernelに取り込まれています。
841NAME IS NULL:2012/04/13(金) 09:28:06.26 ID:???
EnterpriseDBっていう会社ができるくらいだから需要はあるよ。
PostgreSQL 9.2の性能改善のほとんどは
EnterpriseDB社の社員からのコントリビュートですよ
842NAME IS NULL:2012/04/13(金) 14:39:33.73 ID:???
コンソーシアム作ってアピールしないと参加企業ですら金と人出すの難しいって話じゃないの
ITバブルのころは景気のいい企業が金も人も機材も提供してベンチマークやったりしてたけど、今は出せないんだと思うよ
参加企業の売り上げ額だってオープンソース関係が占める割合は(SRA OSS除いて)かなり低いだろうし
金や人を出し易く且つリターンとしてそれなりの結果を得るにはコンソーシアムとして
徒党を組むのが社内的にも社外的にもよかったんじゃないの

参加企業のネームバリューから考えて、それでも徒党を組まないと金も人もだせないんだなと思うと
終わりの始まりのような気もするし
843NAME IS NULL:2012/04/13(金) 17:55:56.20 ID:???
嫌儲
コントリビュート

難しい言葉はやめて、小学生でもわかる簡単な言葉でいこうぜ。
844NAME IS NULL:2012/04/13(金) 18:09:49.76 ID:???
PostgreSQL 7.2で運用しているDBがダンプに失敗するようになってしまいました。

pg_dumpを実行すると、
pg_dump: missing pg_database entry for this database
というエラーが出てしまいます。

ただ、DB自体にはpsqlコマンドでアクセス出来て、テーブルの中身も見られます。
しかし、pg_databaseをSELECTしてみると空っぽでした。
おそらく、このテーブルが入っているファイルが壊れたのでは?と思っています。

ダンプが出来ないのでバックアップも行えず困り果てています。
pg_databseが空っぽになってしまった物を復旧させる手段はありませんでしょうか?

ネットで調べるとVACUUMしてないで放置していると起きるトラブル、と書かれていましたが
毎日VACUUMも行っていたのですが…

どなたかお助けください。
845NAME IS NULL:2012/04/13(金) 21:38:03.04 ID:eXECyuKm
>>844
まずはファイルシステムレベルでデータベースをバックアップして、
vacuumdb -af
してみるとか。
FSMがあふれてたりするんじゃないの?
846NAME IS NULL:2012/04/14(土) 00:20:02.32 ID:???
>>845さん

アドバイスありがとうございます。
ひとまず、サーバーを停止してファイルレベルでバックアップをとっておきました。

vacuumdb -a -f
と実行してみましたが
pg_databaseが空っぽなのでVACUUMする対象のDATABASEがみつからず
すぐ終了してしまいます。

データベースを指定して接続するとSELECTもINSERTもできるんで
pg_databaseが壊れてるっぽいんですが、修復は不可能なんですかねぇ。
ダンプできないので、どうやって別のDBに動かそうか…
847NAME IS NULL:2012/04/14(土) 00:51:43.46 ID:GW6Af2jI
>>846
-tオプションでテーブルを指定したダンプはできないの?
dblinkやレプリケーションツールを使うとか。

あるいはCOPYコマンドを使ってテーブルの中身をファイルに書き出すなど。
848NAME IS NULL:2012/04/14(土) 01:31:25.32 ID:???
ボスケテ

PostgrSQLとPHPでDBを作ってもらってネット経由で使ってたのですが、
ランニングコスト削減のため
社内のパソコンに移行することにしました。DB制作会社の担当は、LinuxとPostgrSQLとPHPの環境用意して全データをサーバーからFTPダウンロードしたら同じように使えるといわれて途中までやったのですが、もしや、素人ができるものではないですか?
849NAME IS NULL:2012/04/14(土) 01:50:40.61 ID:GW6Af2jI
>>848
PostgreSQLやPHPの入門書で環境構築やバックアップの章などを拾い読みなどして、やっていることの意味が理解できる程度の人なら素人でもできると思う。
850848:2012/04/14(土) 02:00:18.31 ID:???
>>849
ありがとうございます!
各入門書を買って設定から始めているのだが、本は新規でDB作る前提だからなのか、なかなか先に進まない。設定の段階でつまずきまくりです。全体を流し読みしようとしてもちんぷんかんぷんだった。バックアップのとこも一回読んでみます。
正直、ソフトをインストール→ファイルを開く感覚かと思ってた。


851NAME IS NULL:2012/04/14(土) 05:56:58.04 ID:???
うーん、ちんぷんかんぷんならやめたほうがいいような。
852NAME IS NULL:2012/04/14(土) 07:31:17.10 ID:E13kkY5F
>>848

できる。
853NAME IS NULL:2012/04/14(土) 11:28:34.58 ID:???
SQLServer2005Expressから乗り換えようと企んでいるのだが、移行に関して注意すべき点はある?
854NAME IS NULL:2012/04/14(土) 11:55:29.76 ID:???
移行ってそもそも可能なの?
855NAME IS NULL:2012/04/14(土) 13:22:22.35 ID:???
ストアドプロシージャとか使ってない?
単なるデータストアとして使っているだけなら移行は楽だろうけど。
856848:2012/04/14(土) 15:11:32.14 ID:???
>>851

>>852

ありがとう、ダメかもしれないけど
も一回挑戦してみます。
857NAME IS NULL:2012/04/14(土) 16:30:20.64 ID:???
VisualStudio 2005でPostgreSQL 9.1 を使おうとしています。

VSのIDE(デザインモード)からOLE-DBでデータベース接続しようとすると、

   複数ステップのOLE DBの操作でエラーが発生しました。
   各OLE DBの状態の値を確認してください。
   作業は終了しませんでした。

というダイアログが出てしまい、接続できません。
VS2005からPostgreSQLにIDEのデザインモードで接続する方法を
教えてください。

PostgreSQLドライバはスタックビルダでOLE-DB, Npgsql、ODBCをインストール
しています。

よろしくお願いします。
858846:2012/04/15(日) 02:45:25.75 ID:???
みなさんアドバイスありがとうございました。
古いPostgreSQL特有のOIDがループしちゃう問題が原因だったようです。

vacuumdb -a -f
を何度か実行したら無事にpg_databaseの中身が復旧しました。
その後pg_dumpallでダンプできること、リストアできること確認しました。

いい加減、バージョンあげた物に入れ替えるか…
859NAME IS NULL:2012/04/15(日) 07:39:13.59 ID:???
> vacuumdb -a -f
> と実行してみましたが
> pg_databaseが空っぽなのでVACUUMする対象のDATABASEがみつからず
> すぐ終了してしまいます。

これにだまされ(?)ずに何度か繰り返せばいいってことなのかな。
同じような状況に出会ったときに役立ちそう。
横からだけどありがとう
860NAME IS NULL:2012/04/15(日) 20:24:44.64 ID:vqK/fcis
>>857
デザインモードで?ってのがイマイチわからんですが

Npgsqlだと
using Npgsql;

861857:2012/04/15(日) 21:48:28.88 ID:???
>>860
デザインモードで表示させたい、とは、
VSのIDE上の「データソース」画面にPostgreSQLのDataSetを
表示させたい、ということです。

using Npgsql だと、データソース画面上にPostgreSQLのテーブルとか
フィールドを表示してくれないので不便なんです。
862NAME IS NULL:2012/04/15(日) 22:11:08.37 ID:vqK/fcis
863NAME IS NULL:2012/04/16(月) 19:34:12.50 ID:???
あるテーブルのレコードを、日付に基づいてselectしたいとき、

select * from foobar where date(created_at) = '2012-04-16'



select * from foobar where '2012-04-16 00:00:00' <= created_at and created_at < '2012-04-17 00:00:00'



select * from foobar where created_at between '2012-04-16 00:00:00' and '2012-04-16 23:59:59'

のどれがいちばん効率がいいでしょうか。
こんな基本的なことも知らずにすみません。
864NAME IS NULL:2012/04/16(月) 19:45:26.64 ID:+oPP0qSo
>>863
SQL文の初めにexplainやexplain analyzeを付けて実行すれば、内部の動きや効率の情報が表示されるよ。
865NAME IS NULL:2012/04/16(月) 19:54:23.21 ID:???
> select * from foobar where created_at between '2012-04-16 00:00:00' and '2012-04-16 23:59:59'
'2012-04-16 23:59:59.500'がもれる。

一番早いのはたぶん date(created_at) でインデックス貼って、
select * from foobar where date(created_at) = '2012-04-16'
866NAME IS NULL:2012/04/16(月) 20:27:12.65 ID:???
>>865
なるほど。たしかにそうですね。
もし date(created_at) のインデックスは作成してないけど created_at のインデックスはあるとしたら、
一般的にはどれが効率的なのでしょうか。
867NAME IS NULL:2012/04/16(月) 20:43:41.13 ID:???
勘弁してください
868NAME IS NULL:2012/04/16(月) 23:37:22.89 ID:???
1番目だと create_at のインデックスは使われない。
3番目だと 2012-04-16 23:59:59.xxx の1秒間が漏れるから、2番目が良いんじゃないの。
869NAME IS NULL:2012/04/17(火) 10:06:01.96 ID:???
>>868
なるほど!1番目は created_at そのままではなく date(created_at) なので、インデックスは使われないですよね。言われてみればその通り。
実は今は1番目の書き方をしているんですけど、2番目の書き方に改めるか、date(created_at) 相当のインデックスを貼るかしたいと思います。
たいへん勉強になりました。感謝します。ありがとうございました。
870NAME IS NULL:2012/04/22(日) 22:05:23.26 ID:???
PostgreSQL で、どうしても Oracle式の OUTER JOIN ((+) を使うヤツ) を行いたいのですが、何か方法はありませんか?
既に運用中のDBがあって、10テーブル以上を JOIN しないと答えが出ない設計です。
明示的な JOIN だと、実際には後続の WHERE句で絞り込める状態でも、プランナは律儀に順番にJOINしてしまいます。
プランナに後続の WHERE句で絞り込んでもらうにはどうしたら良いのでしょうか?
よろしくお願いします。
871NAME IS NULL:2012/04/22(日) 22:13:39.00 ID:???
outer join だったら、LEFTでもRIGHTでも普通に使えるが、
WHERE節で(+)使うオラクル方言って、Oracle以外で出来る奴ってあるんかいな?
そうでなきゃプランナがどうのこうのって、思い込みじゃなかろか。
872NAME IS NULL:2012/04/22(日) 22:25:54.38 ID:???
そもそも、同じSQLだってDBMSが違えば同じ実行計画になるとは限らんしな。
873870:2012/04/22(日) 22:57:12.71 ID:???
誤解させてしまっているようで申し訳ないのですが、
OUTER JOIN 構文を使わず、通常の FROM a, b, c に対するWHERE句(か何か)で外部結合を指定したいのです。
これが a LEFT OUTER JOIN b LEFT OUTER JOIN c だと、a⇒b⇒c の順序が指定されてしまい、困っています。
後続のWHERE句によっては、c⇒a⇒b の結合が最適かもしれず、プランナはその可能性に気づいてくれません…。
ttp://www.postgresql.jp/document/9.1/html/explicit-joins.html この辺りの話です。
ちなみにDBは元から PostgreSQL で、Oracleからの移植とかいうわけではありません。
よろしくお願いします。
874NAME IS NULL:2012/04/23(月) 00:29:11.54 ID:???
>>873
a LEFT JOIN bでb⇒aの順に結合するのはOracleでもできないよ。
書き方がLEFT JOINでもa.xxx = b.xxx(+)でもできない。
aのレコードに対してbが存在しないものを出さないといけないので
そもそもbを駆動表にはできない。

外部結合をせざるを得ない状況に追い込んだER設計自体を
見直すことになります。たいていは。
875NAME IS NULL:2012/04/23(月) 00:58:09.18 ID:???
Postgresqlでも、場合によっては a LEFT OUTER JOIN b のbから結合する実行計画を選んでくれることがある。
ただ、そういう計画が本当に最適なのかどうかや、postgresにどのようにしてその可能性に気づかせればいいのかという問題は、具体的なクエリやテーブルの内容やインデックスの使い方などを確認しながら、
「14.3. 明示的なJOIN句でプランナを制御する」
のような調整をしなくてはいけないので、はっきりこれという解決策を提示することはできない。
上記の章に書いてある方法以外にも、with句を利用したクエリに書き換えてみるとか、
set enable_nestloop = off;
などとして、結合プラン
http://www.postgresql.org/docs/8.2/static/runtime-config-query.html
のうち、邪魔になるものを一時的にoffにする方法等が考えられる。
そのほか、テーブルの統計の取られ方の調節や、計画を立てるときのコストなどのパラメータを調節することもある。
876NAME IS NULL:2012/04/23(月) 03:04:26.61 ID:???
みなさまありがとうございます。

>>874
2つではなく、3つ以上の場合です。
a.id ⇒ b.id および a.id ⇒ c.id という外部結合で a が駆動表になるのはわかるのですが、
知りたいのは b と c には直接関連がない場合です。
WHERE c.xxx = ??? でインデックスを使った検索を行うとき、
a LEFT JOIN b LEFT JOIN c だと a ⇒ b ⇒ c の順に結合してしまい
(bが巨大だと特に) c で絞り込まれるのが遅れるようなのです。
これを、a は駆動表にしたまま、a ⇒ b および a ⇒ c の2つの結合に分解したままプランナに伝えたいのです。

>>875
やはりケースバイケースになってしまうのでしょうか。
でもWITH句は知りませんでした。これが探し求めていたものかもしれません。早速調べてみたいと思います。
877NAME IS NULL:2012/04/23(月) 04:02:34.71 ID:???
c.xxxを検索条件に含めるのなら、aとcは内部結合にはできないの?
>これを、a は駆動表にしたまま、a ⇒ b および a ⇒ c の2つの結合に分解したままプランナに伝えたいのです。
というのがよくわからない。
cの絞り込みの効果を得るには、(c join a) left join bのような順序になる必要があって、
a ⇒ bをa ⇒ cと別々に行うとするならば、それらの絞り込みのどちらが先になるか(c で絞り込まれるのが遅れるかどうか)は検索速度に関係ないと思うのだけど。
878NAME IS NULL:2012/04/23(月) 12:47:42.84 ID:???
>>876
>>873で a⇒b⇒c よりも c⇒a⇒b のほうがいい場合もあるって書いてるのはどなの?
a⇒b⇒c よりも a⇒c⇒b のほうがいいって言うのなら、分かる気もするけれど。
879NAME IS NULL:2012/04/24(火) 07:53:45.41 ID:???
エロい方、教えてくだされ。
フィールドでcharacter varying(8)とcharacter varying(8) [ ]の違いって何でしょ?
[ ] の意味が解りません・・ぐぐってもそれらしき説明を見つけられなかった。
880NAME IS NULL:2012/04/24(火) 11:54:51.36 ID:???
配列かな
881870:2012/04/24(火) 21:09:53.15 ID:???
>>877
> c.xxxを検索条件に含めるのなら、aとcは内部結合にはできないの?
検索条件に含まれることがあらかじめわかっていればいいのですが、
WHERE句が自動で生成されたり VIEW だったりすると、クエリの実行段階までわかりません。
もしくは検索条件に c.xxx と b.yyy があって、絞り込める数がケタ違いかもしれません。
確実に c.xxx が検索条件に含まれるという条件下でなら、確かに内部結合に書き換えられるとは思いますが
クエリの段階や統計情報で最適解が決定されるとすれば、それはクエリプランナの仕事だと思うのです。

>>878
>>873 の c⇒a⇒b は深く考えずに書いてしまいました。混乱させて申し訳ないです。
おっしゃるとおり「a⇒b⇒c よりも a⇒c⇒b のほうがいい」可能性を
クエリプランナに伝える方法は無いのか、が主題です。
882NAME IS NULL:2012/04/25(水) 04:33:27.01 ID:???
やったことないんだけど、
a left join b left join c が
a left join c left join b でも同じ結果を得られるときって
b, cはそれぞれaと結合してると思うんだけど、
このとき、(a left join b) join (a left join c) ってやると何気にうまいことやってくれないかな。
883NAME IS NULL:2012/04/25(水) 08:54:58.55 ID:???
>>880
配列って1レコードの1フィールドの中に複数のフィールド値が入るって事でいいのん?
884NAME IS NULL:2012/04/25(水) 11:31:59.40 ID:???
そう。
大抵の場合、配列が出てきたら設計見なおした方がいい。
885NAME IS NULL:2012/04/25(水) 15:01:18.76 ID:???
>>884
ありがと〜。SQLServerからPostgreに乗り換えようとしていて、tableを作ろうとした所にこの問題で出くわしたw。
Postgreと心中するつもりはないので配列は使わないでおこうw。
886NAME IS NULL:2012/04/25(水) 15:06:48.22 ID:???
なんか配列はPostgresqlの独自拡張だと思ってるように見える。
887NAME IS NULL:2012/04/25(水) 16:14:24.64 ID:???
これは恥ずかしいな
888885:2012/04/25(水) 19:11:42.15 ID:???
>>886,887
調べてみたらSQL99って規格なんだな。確かにこれは恥ずかしいw。
勉強になりますた。

御指摘感謝。
889NAME IS NULL:2012/04/25(水) 21:03:06.64 ID:???
SQL99前から独自に実装していたと記憶してる。
つーか、俺もSQL99に配列が定義されているって、初めて知ったわw
独自実装じゃなくて、策定中の先行実装だったのかな?
890NAME IS NULL:2012/04/26(木) 00:21:12.10 ID:???
1カラムの最大容量そろそろ増やして欲しい
もう64bit全盛のこの時代にいつまでも1Gじゃあかんとおもう
891NAME IS NULL:2012/04/26(木) 02:09:52.28 ID:???
SQL99だと配列は固定長なのね
誰が喜ぶ機能なのか勘ぐってしまうな
892NAME IS NULL:2012/04/26(木) 03:25:59.40 ID:???
なんとなく>>887>>886あてだったんじゃないかと思う
893NAME IS NULL:2012/04/26(木) 09:13:29.47 ID:???
postgreって略し方が気になった

そこまで言ってなんでsを言わないみたいな
894NAME IS NULL:2012/04/26(木) 12:52:55.64 ID:???
よくあることなのでもう気にならない
895NAME IS NULL:2012/04/26(木) 15:51:38.57 ID:???
長いからって略すと変なのよねぇw
pgsqlってのもコマンドっぽいし〜
896NAME IS NULL:2012/04/26(木) 17:46:55.93 ID:???
ぽす☆ぐれ
897NAME IS NULL:2012/04/26(木) 23:57:05.19 ID:???
配列とかhstoreとか無茶使えるやん
gin貼れるし

あんまりこだわらずに
レコード数も減らせるからうまく使わないと損だと思う
898NAME IS NULL:2012/04/29(日) 14:45:21.48 ID:???
>>881
with句が使えるバージョンならば、

with ac( ) as
(select * from a, c
where ・・・・・

)

select * from ac , b
where ・・・・

で、aとcを先に結合させる方法かな。
899NAME IS NULL:2012/04/29(日) 21:18:00.79 ID:???
話の流れ全く読まないで書くが、
バージョン気にするならそのくらいfrom句でサブクエリにいれちゃえばいいじゃん
900NAME IS NULL:2012/04/29(日) 23:45:10.62 ID:???
流れ読んでないのは>>898のほうだから気にしなくていいよ
901NAME IS NULL:2012/04/30(月) 11:14:06.08 ID:???
JSON型、bitbucketにあった9.1へのback portを入れてみた。
INSERTは出来たけど、これ、WHERE句どうやって書くの?
902NAME IS NULL:2012/04/30(月) 15:55:26.71 ID:???
>>899
テーブルの結合順を一部自分で決めたいという話だったので、with句で先に結合
させてしまう手もありそうという話です。あとは、実際に動かして時間短縮になるかは
自分でこつこつ調べるしか無いけど。
903NAME IS NULL:2012/04/30(月) 17:38:16.43 ID:???
こう書くのとなにが違うの?
select * from
(select * from a, c
where ・・・・・
) ac
, b
where ・・・・
904NAME IS NULL:2012/05/01(火) 16:39:19.30 ID:???
ポスグレのお薦めの書籍はありますか?
基本的にポスグレの書籍はマイ何とかのより明らかに少ない気がします
905NAME IS NULL:2012/05/01(火) 17:00:49.84 ID:???
何の知識を得たいのかによっては特にPostgreSQLに限定しなくてよさそうに思うけれど、どうだろ。
906NAME IS NULL:2012/05/01(火) 18:34:30.28 ID:yWm4uYLX
>>904
PostgreSQL全機能リファレンス
著 者 鈴木 啓修/著
叢書名 アドバンストリファレンス
出版者 東京:技術評論社
2003年09月
その他 【NDC1】007.6 【サイズ】21cm 【ページ数】531p
【価格】\2,980 【刊行形態】単品 【利用対象】一般 【ISBN】4-7741-1811-7 【件名】データベース(データベース)
内容紹介 PostgreSQLの充実した機能を、調べやすいリファレンス形式で紹介。内部構造、運用・チューニングのテクニックも掲載。知りたい項目に素早くたどり着けるように、ページ参照を多数挿入。
907870:2012/05/02(水) 01:50:37.43 ID:???
遅くなりましたが、みなさま有難うございました。
>>882さんの案が一番良いヒントになったのですが、残念ながら SQL のみでは解決できませんでした。

まず、(a left join b) join (a left join c) とすると、a が複数出てきてるよ、と怒られました。
そこで、a に別名(a1 および a2) を付けてみたのですが
当然、a1 と a2 は SQL上 異なるテーブルの扱いになり、
別途 WHERE a1.id = a2.id という条件で絞り込まないといけませんでした。
# join は順序を決めてしまうため、"," で結合しています。

このとき、(a1 と a2 は同じテーブルなので結果は1つになると人間には分かっていても)
結果を集約するのに、いろいろとコストがかかっているようでした。
# (a1 left join b), (a2 left join c) where a1.id = a2.id のとき、
# c によって絞られた a2 で a1 が絞られて b も減る、という場合
# a1 と b の join が先に走って、後で a1.id = a2.id の絞り込みをしていたりしました。

また、実は元々 a は普通のテーブルではなく、サブクエリでした。
WITH句を使って1つなんだよ と教えてみたり、VIEW にしてみたりしましたが、本質的に同じでした。
(SQLは短くなり、少し良い実行計画にはなりました)


結局最終的には、SQLを投げる前に自力でWHERE句をパースして、
登場するテーブル名を優先的に前に持ってきて、
動的にFROM句を並び替える(というより生成する)、という一種のヒューリスティックで回避しました…。

たったこれだけですが、効果は絶大でした。

しかし、この作業は本来クエリプランナが行うべきことで、
それを指示する文法が無いとすれば、それは文法の欠陥だと思います。

もしよろしければ、どなたかこの問題を適切な場所に伝えていただけると幸いです。

重ねまして、有難うございました。
908NAME IS NULL:2012/05/02(水) 04:07:21.22 ID:???
> # join は順序を決めてしまうため、"," で結合しています。
うーん。

http://www.postgresql.jp/document/pg900doc/html/explicit-joins.html
> プランナが安全な結合順を複数決定できる可能性があります。 たとえば、以下を考えてみます。
>  SELECT * FROM a LEFT JOIN b ON (a.bid = b.id) LEFT JOIN c ON (a.cid = c.id);
> この場合、Aを先にBと結合してもCと結合しても有効です。 現時点では、FULL JOINのみが完全に結合順を制限します。 LEFT JOINやRIGHT JOINを含む、ほとんどの実環境では、何らかの拡張に再調整することができます。
909NAME IS NULL:2012/05/02(水) 04:08:35.44 ID:???
統計情報を更新してなければ、愚直に順番に結合するのかなぁ
910NAME IS NULL:2012/05/02(水) 04:20:46.18 ID:???
>>908からの連レスごめん。あとこれも。
http://www.postgresql.jp/document/pg900doc/html/sql-select.html#SQL-FROM
> LEFT OUTER JOIN (中略) マッチする行を決める時は、JOIN句自身の条件のみが考慮されることに注意してください。 他の外部結合条件は後で適用されます。
911NAME IS NULL:2012/05/02(水) 16:25:17.74 ID:???
ポスグレってtimestamp型に対するインデックスの扱いって特殊じゃない?
インデックスが効いたり効かなかったりするんだけど。
912NAME IS NULL:2012/05/02(水) 16:45:36.35 ID:???
とだけ言われてもな
913NAME IS NULL:2012/05/02(水) 17:30:23.79 ID:???
>>912
すまん、join無し時のwhere句でdate < '2012-01-01 00:00:00'ってやってもインデックスが効いてない・・と勘違いしていた。
アプリから発行されてるSQLもう一回確認してみるとwhereじゃなくてorder byになってたわ・・・。
914NAME IS NULL:2012/05/02(水) 19:42:45.95 ID:???
(前略) ORDER BY date < '2012-01-01 00:00:00'

なんてやって、エラー出ないのか……?
915NAME IS NULL:2012/05/02(水) 19:47:06.81 ID:???
でないだろ
916NAME IS NULL:2012/05/02(水) 19:51:41.05 ID:???
917916:2012/05/02(水) 19:53:37.70 ID:???
スマソ、間違って送信してもうたw
918NAME IS NULL:2012/05/02(水) 20:33:44.84 ID:???
>>906
随分古いものですね
心配です
919NAME IS NULL:2012/05/02(水) 22:25:00.06 ID:???
公式のドキュメントが一番ためになる
あれを隈なく読んどけばok
920NAME IS NULL:2012/05/03(木) 21:25:51.76 ID:???
インデックスを作成したのに、SQLでそれが使われなくて困ってます。

今、テーブル entries に「end_at timestamp not null」というカラムがあって、
create index entries_end_at_idx on entries(end_at) というインデックスを作成しました。
しかし end_at を使った select 文が、このインデックスを使ってくれません。

postgres=> explain
select * from entries where end_at<='2012-05-01 00:00:00';
QUERY PLAN
--------------------------------------------------------------------------
Seq Scan on entries (cost=0.00..26.16 rows=290 width=908)
Filter: (end_at <= '2012-05-01 00:00:00'::timestamp without time zone)
(2 rows)

postgres=> explain
select * from entries where end_at>='2012-05-01 00:00:00';
QUERY PLAN
--------------------------------------------------------------------------
Seq Scan on entries (cost=0.00..26.16 rows=123 width=908)
Filter: (end_at >= '2012-05-01 00:00:00'::timestamp without time zone)
(2 rows)

postgres=> select count(*) from entries where end_at is not null;
count
-------
413
(1 row)

どなたかアドバイスをお願いします。
921NAME IS NULL:2012/05/03(木) 22:11:18.60 ID:???
テーブル全件の半分もselectするならSeqScanの方が速いしそれで正解。
困ることはないと思うが。
922NAME IS NULL:2012/05/05(土) 06:43:39.46 ID:???
>>921
postgres=> select count(*) from entries;
count
-------
413
(1 row)

postgres=> select count(*) from entries where end_at>='2012-05-01 00:00:00';
count
-------
125
(1 row)

postgres=> select count(*) from entries where end_at<='2012-05-01 00:00:00';
count
-------
288
(1 row)

該当する行数が 125/413 = 30% でもインデックスはつかわれないものなんでしょうか。
923NAME IS NULL:2012/05/05(土) 08:01:22.29 ID:???
>>922
行数(413行)が少ないんじゃね?

不等号だと平均で半分SELECTすることが想定されるので、
全体で413行程度なら、最初から全部読んだ方が早い。と、判断したとか?

12万行あるテーブルで、通し番号を不等号で切り分けてみたら、
2/3までならインデックススキャンになったわ。
924NAME IS NULL:2012/05/05(土) 08:31:44.70 ID:???
>>922
そのへんはレコード長とキー長、データの分布、そして整列の有無にも依存する
ところなんで一概には言えないが、一説には全体の20%を超えたらFullScanの方が
良いと言われている。
925NAME IS NULL:2012/05/06(日) 03:49:30.76 ID:???
実際そんなポッチのデータ量
どっちでも大した速度さは出ない

データが増えて、かつイコールで結んでもそんなに沢山ヒットしちゃうようなカーディナリティの低いデータじゃインデックスのほうが効率悪いわな
926NAME IS NULL:2012/05/06(日) 18:06:25.74 ID:???
>>923,924
助言ありがとうございます。
プライマリキーで試してみました。

postgres=> explain select * from entries where id < 19;
QUERY PLAN
------------------------------------------------------------
Seq Scan on entries (cost=0.00..26.16 rows=17 width=908)
Filter: (id < 19)
(2 rows)

postgres=> explain select * from entries where id < 18;
QUERY PLAN
-----------------------------------------------------------------------------
Bitmap Heap Scan on entries (cost=4.37..25.36 rows=16 width=908)
Recheck Cond: (id < 18)
-> Bitmap Index Scan on entries_pkey (cost=0.00..4.37 rows=16 width=0)
Index Cond: (id < 18)
(4 rows)

postgres=> select count(*) from entries where id < 18;
count
-------
15
(1 row)

全体の 15/413 = 3.6% だとインデックスが使われるけど、
19/413 = 3.9% だとインデックスが使われないようです。
インデックスって、思ったより使われないんですね。もっと積極的に使われるものだと思ってました。
勉強になりました。
927NAME IS NULL:2012/05/07(月) 14:01:59.50 ID:???
postgresqlではdatetime型って使えないんでしょうか。
create table foo ( dt datetime );
とすると
ERROR: type "datetime" does not exist
LINE 1: create table foo ( dt datetime );
^
と起こられました。しかし
http://www.postgresql.jp/document/pg632doc/user/c0404.htm
をみると、datetime型は使えるようです。
だれか教えて下さい。
928NAME IS NULL:2012/05/07(月) 14:19:32.42 ID:???
無いんじゃないかい?

あなたが出したマニュアルはVer.6.3についてのものだけど、
最新の9.1のマニュアルにはdatetime型なんて無いよ。
http://www.postgresql.jp/document/9.1/html/datatype-datetime.html
929NAME IS NULL:2012/05/07(月) 14:28:32.52 ID:???
>>928
あれ、古いんですか。「postgresql datetime」で検索したらこれが最上位にきてたので。
えーと、datetime型のかわりはtimestamp型を使えばいいのでしょうか。
バージョンが新しいほうが使用できるデータ型が増えるものだと思ってたけど、そうでもないんですね。

930NAME IS NULL:2012/05/07(月) 16:33:56.32 ID:???
検索は
「timestamp site:http://www.postgresql.jp/document/current/
ってやるのがコツ
931NAME IS NULL:2012/05/07(月) 19:34:01.81 ID:???
7系のマニュアルにぶつかることは多々あっても、6系にぶつかるのは初めてみたかもwww

http://osb.sra.co.jp/PostgreSQL/Manual/PostgreSQL-7.1-ja/
これみたいな、間違えてない!?ってメッセージも出ないんだね。
932NAME IS NULL:2012/05/07(月) 20:55:19.97 ID:???
無くなるっていってるから無くなったんじゃろ
timestampで同等以上の事が出来るから無問題

どうして使いたきゃcreate typeすればいいが他にも色々作らなきゃならんので現実的じゃないな



Postgres では、 SQL92 の2つの基本的なユーザ志向の日付/時刻 型である datetime 型と timespan 型 を提供しており、さらに timestamp 型、 interval 型、date 型、 time 型もサポートしています。

将来リリースされるバージョンでは、 datetime 型 と timespan 型は、SQL92 の timestamp 型と interval 型と統合 される可能性が高いと思われます。 他の日付と時刻に関するデータ型も、ほとんど歴史的な理由だけ で、利用可能となっています。
933NAME IS NULL:2012/05/14(月) 12:09:28.45 ID:rmHVUy71
千歳科学技術大学 グローバルシステムデザイン学科 深町 賢一
千歳科学技術大学 グローバルシステムデザイン学科 深町 賢一
千歳科学技術大学 グローバルシステムデザイン学科 深町 賢一
千歳科学技術大学 グローバルシステムデザイン学科 深町 賢一
千歳科学技術大学 グローバルシステムデザイン学科 深町 賢一
千歳科学技術大学 グローバルシステムデザイン学科 深町 賢一
千歳科学技術大学 グローバルシステムデザイン学科 深町 賢一
千歳科学技術大学 グローバルシステムデザイン学科 深町 賢一
千歳科学技術大学 グローバルシステムデザイン学科 深町 賢一
千歳科学技術大学 グローバルシステムデザイン学科 深町 賢一
千歳科学技術大学 グローバルシステムデザイン学科 深町 賢一
千歳科学技術大学 グローバルシステムデザイン学科 深町 賢一
千歳科学技術大学 グローバルシステムデザイン学科 深町 賢一
千歳科学技術大学 グローバルシステムデザイン学科 深町 賢一
千歳科学技術大学 グローバルシステムデザイン学科 深町 賢一
千歳科学技術大学 グローバルシステムデザイン学科 深町 賢一
千歳科学技術大学 グローバルシステムデザイン学科 深町 賢一
千歳科学技術大学 グローバルシステムデザイン学科 深町 賢一
千歳科学技術大学 グローバルシステムデザイン学科 深町 賢一
千歳科学技術大学 グローバルシステムデザイン学科 深町 賢一
千歳科学技術大学 グローバルシステムデザイン学科 深町 賢一
千歳科学技術大学 グローバルシステムデザイン学科 深町 賢一
934NAME IS NULL:2012/05/15(火) 06:28:50.77 ID:bfF6xyzj
語気光線( ´Д`)y━・~~語気光線( ´Д`)y━・~~語気光線( ´Д`)y━・~~
語気光線( ´Д`)y━・~~語気光線( ´Д`)y━・~~語気光線( ´Д`)y━・~~
語気光線( ´Д`)y━・~~語気光線( ´Д`)y━・~~語気光線( ´Д`)y━・~~
語気光線( ´Д`)y━・~~語気光線( ´Д`)y━・~~語気光線( ´Д`)y━・~~
語気光線( ´Д`)y━・~~語気光線( ´Д`)y━・~~語気光線( ´Д`)y━・~~
語気光線( ´Д`)y━・~~語気光線( ´Д`)y━・~~語気光線( ´Д`)y━・~~
語気光線( ´Д`)y━・~~語気光線( ´Д`)y━・~~語気光線( ´Д`)y━・~~
語気光線( ´Д`)y━・~~語気光線( ´Д`)y━・~~語気光線( ´Д`)y━・~~
語気光線( ´Д`)y━・~~語気光線( ´Д`)y━・~~語気光線( ´Д`)y━・~~
語気光線( ´Д`)y━・~~語気光線( ´Д`)y━・~~語気光線( ´Д`)y━・~~
語気光線( ´Д`)y━・~~語気光線( ´Д`)y━・~~語気光線( ´Д`)y━・~~
語気光線( ´Д`)y━・~~語気光線( ´Д`)y━・~~語気光線( ´Д`)y━・~~
語気光線( ´Д`)y━・~~語気光線( ´Д`)y━・~~語気光線( ´Д`)y━・~~
語気光線( ´Д`)y━・~~語気光線( ´Д`)y━・~~語気光線( ´Д`)y━・~~
語気光線( ´Д`)y━・~~語気光線( ´Д`)y━・~~語気光線( ´Д`)y━・~~
935NAME IS NULL:2012/05/15(火) 12:59:31.43 ID:???
PostgreSQLで、insert文をまとめて実行する機能はありませんか。
とあるHTTPリクエストがくるたびに、あるテーブルに対してinsert文を100件実行する必要があるのですが、
これに実行時間がかかってしまいます(当然ですよね)。
なので、insert文をまとめて実行する機能があると速くなるんじゃないかと思って質問しました。
(MySQLにはそういう機能があったので。)
よろしくお願いします。
936NAME IS NULL:2012/05/15(火) 13:22:32.17 ID:???
copy?
937935:2012/05/15(火) 13:56:15.40 ID:???
ttp://www.postgresql.jp/document/current/html/dml-insert.html
に、バルクインサート機能がありました。

| 単一コマンドで複数行を挿入することができます。
|
| INSERT INTO products (product_no, name, price) VALUES
| (1, 'Cheese', 9.99),
| (2, 'Bread', 1.99),
| (3, 'Milk', 2.99);

MySQLと同じ構文でいけるとは。
938NAME IS NULL:2012/05/16(水) 13:54:24.27 ID:???
それでいいけど、もしどうしても100回実行する必要があった場合は
BEGINとENDで挟むといい。
939NAME IS NULL:2012/05/16(水) 16:37:19.65 ID:3y7fqBVj
下記の図に示すリレーション社員と部門の属性所属と部門番号上の統合結合演算を、リレーション社員と部門の属性所属と部門番号上の大なり結合演算に書き直したらどうなりますか?????

社員[所属=部門番号]部門

|社員.社員番号 | 社員.社員名 | 社員.給与| 社員.所属|部門.部門番号|部門.部門名|部門.部門長|
| 0650 | 鈴木一郎 | 50 | K55 | K55 | データベース| 0650 |
| 1508 | 浜崎アユ | 40 | K41 | K41 | ネットワーク | 1508 |
| 0231 | うたを | 60 | K41 | K41 | ネットワーク | 1508 |
| 2034 | 別所さん | 40 | K55 | K55 | データベース| 0650 |
940NAME IS NULL:2012/05/16(水) 18:30:17.28 ID:???
テーブル定義書いてくれんと分からん。
941NAME IS NULL:2012/05/16(水) 23:30:12.23 ID:???
テーブル[社員]
社員.社員番号
社員.社員名
社員.給与
社員.所属

テーブル[部門]
部門.部門番号
部門.部門名
部門.部門長

だろ?jk
942NAME IS NULL:2012/05/16(水) 23:43:17.83 ID:???
テーブル定義以前に、何を訊いているのか日本語がよくわからん。
等結合をθ結合で書き換えて同じ結果を求めろってことなのか?
943NAME IS NULL:2012/05/16(水) 23:43:42.45 ID:???
日本語でおk >>939
944NAME IS NULL:2012/05/17(木) 02:17:27.32 ID:???
良かった、俺が勉強不足で理解できてないだけかと思った。

>>941
テーブル[部門]の部門長が社員番号でリレーションされてるかもしれないじゃん。
945NAME IS NULL:2012/05/17(木) 19:20:03.92 ID:???
>>944
テーブル設計
946NAME IS NULL:2012/05/17(木) 22:18:17.97 ID:???
>>944
まあしかし、「リレーション」の使い方を間違ってる奴はたいてい勉強不足。
947NAME IS NULL:2012/05/17(木) 22:42:20.50 ID:???
>>946
禿同
948NAME IS NULL:2012/05/18(金) 16:22:09.97 ID:???
psqlで補完とかできないかなあ。
「alter table foobar」とかやったあとに、どんな文法が利用可能かのリストがでてくれたりすると嬉しいんだが。
949NAME IS NULL:2012/05/18(金) 17:27:17.02 ID:???
>>948
ウチのは出るよ。 Windows はシラン。
950NAME IS NULL:2012/05/18(金) 17:31:07.25 ID:???
>>949
え、ほんと?当方linuxなんだが、でない。Macだとでるのかな?
951949:2012/05/18(金) 17:37:47.41 ID:???
FreeBSD の ports から入れただけだけど、いつからだったか出るようになった。
手元で使ってるのは 8.3.11 だけど、同じバージョンでも OS自体が古いと出なかった記憶もある。
きっと readline のライブラリ周りが関係してるんだと思う。
Linux でもいろいろあるんじゃないかな。
952NAME IS NULL:2012/05/18(金) 17:43:25.22 ID:???
Linux系でも昔からでるよ。
readlineライブラリが有効になっていないとダメだったと記憶しているが、
今時のなら普通に使えると思う。
953NAME IS NULL:2012/05/20(日) 15:02:28.01 ID:???
readlineつけてないと無理だね。
Solarisだったり32/64混在環境だとそのままじゃconfigureで
readlineが見つからないから使わない設定にしろと言われる
954NAME IS NULL:2012/05/21(月) 16:29:43.44 ID:???
select 文でカラムにつけた別名を、where句で使うことはできませんか。
試したところ、エラーになりました。
psql=> select id as ticket_id from tickets where ticket_id < 10;
ERROR: column "ticket_id" does not exist
LINE 1: select id as ticket_id from tickets where ticket_id < 10;
955NAME IS NULL:2012/05/21(月) 17:34:45.76 ID:???
select ticket_id from (select id as ticket_id from tickets) as foo where ticket_id < 10;
956NAME IS NULL:2012/05/21(月) 17:35:03.23 ID:???
おっと送信しちゃった。
こういう無理やりなのはダメかなw
957NAME IS NULL:2012/05/21(月) 20:21:40.78 ID:???
>>956
アイデアとしては面白いんですが、採用するとなるとちょっと・・・
order by には別名が使えるのに、なぜwhereでは使えないんでしょうか。ちょっと納得いきません。
958NAME IS NULL:2012/05/21(月) 21:38:29.50 ID:???
where が相手にするのは素のレコード/カラム。
order by の対象は、条件で抜き出してきた結果の集合。
その違いじゃあないか?

と、てきとー即席なことを言ってみる。
959NAME IS NULL:2012/05/21(月) 21:59:05.30 ID:???
んだ
960NAME IS NULL:2012/05/22(火) 00:15:02.41 ID:???
まだMySQLに機能で勝ってる?
961NAME IS NULL:2012/05/22(火) 09:02:39.46 ID:???
postgresにあってmysqlにない機能もあれば逆も然り

どちらもなかなかの完成度は申し分ないので
機能を持って勝ち負けという判断はおかしい。
あるのは自分の環境にとってどっちが適切かだな
962NAME IS NULL:2012/05/22(火) 10:12:30.18 ID:???
PostgreSQLってデータベース研究の実験場って位置付け?
963NAME IS NULL:2012/05/22(火) 11:02:44.17 ID:???
実験場ではないね。
OSSにしてはものすごい安定志向だと思う。
964NAME IS NULL:2012/05/22(火) 11:24:53.45 ID:???
MySQLの方が実験的な印象が強い。
965NAME IS NULL:2012/05/22(火) 12:46:53.16 ID:???
PostgreSQLの方が硬派で最先端ってイメージだったんだけどなぁ(´・ω・`)
966NAME IS NULL:2012/05/22(火) 15:35:58.61 ID:???
確かに、オブジェクト指向型データベースやタイムトラベル機能は
postgresだった当時は最先端だったかもしれんが今や・・・

ありとあらゆるところが拡張可能な最先端設計は今に脈々と受け継がれてるな。
安定を最優先にしながらもそこんとこで色々取り込まれたりしてる。
品質を保ってる開発メンバーには頭が下がるよ。
967NAME IS NULL:2012/05/23(水) 11:21:22.43 ID:???
どんどん使って遊んであげよう
968NAME IS NULL:2012/05/23(水) 16:23:48.90 ID:???
>>958
>order by の対象は、条件で抜き出してきた結果の集合。
ためしてみたところ、order by には抜き出した結果とは関係ないカラムを指定できます。
なので、その主張は違うのではないでしょうか。
969NAME IS NULL:2012/05/23(水) 16:52:08.53 ID:???
select 1 as hoge, hoge as foo;
これもエラーになるのと同じで、別名が有効になるタイミングがことなると思えばいいんじゃないのかなー
970NAME IS NULL:2012/05/23(水) 17:07:01.80 ID:???
>>958
WHERE => SELECT => ORDER BY の順に処理されていて、
その順序が参照できるカラム名に関係していると解釈したら矛盾はないのでは?
971NAME IS NULL:2012/05/23(水) 17:38:16.47 ID:???
>>969
なぜタイミングが異なるのでしょうか。

>>970
別名を付けている箇所はwhere句より前にありますし、構文解析完了時点でどの別名が使われているかはわかっているので、
whereを実行するときに別名を参照することは特段難しいようなことはないですよね。
972NAME IS NULL:2012/05/23(水) 19:34:59.58 ID:???
抽出項目に対して条件をつけてるわけじゃないからなぁ。
973972:2012/05/23(水) 19:38:54.93 ID:???
とはいえ、別名が使えてもいいのかなぁと思わなくもないけど
複雑な計算をして別名をつけて取得するのに、同じ計算をwhere句にも書かないといけないということはよくあるし
974NAME IS NULL:2012/05/23(水) 19:44:00.04 ID:???
単に構文解析が複雑になりすぎるからかもしれないね。
975NAME IS NULL:2012/05/23(水) 20:29:21.47 ID:???
>>974
構文解析は関係ないのでは?
where句で別名を使ったときに「そんなカラム名ないぞ」というエラーを出すのは、構文解析ではなくて意味解析のはずだから。
976NAME IS NULL:2012/05/23(水) 21:07:55.33 ID:???
適当なこというけど、伝統かなw
WHERE句で別名が使えると混乱が起きる。

例えば、初心者が何故以下のような文でエラーが起きるか理解できなくなる。
SELECT COUNT(foo) AS cnt FROM hoge WHERE cnt > 2 GROUP BY bar;

>>970が言っているように、SQLがどのような手順を追って処理されているのか
理解するのは重要だと思う。
977NAME IS NULL:2012/05/23(水) 21:51:48.14 ID:???
別名が重複したときの判断もできなそう。
ambiguous!っていえばいいんだろうけど、ユニークにしては困るような場面だと解決できないし。
978NAME IS NULL:2012/05/24(木) 11:52:05.52 ID:???
>>976
>WHERE句で別名が使えると混乱が起きる。
起きない。起きるんだったらorder byで使えるようになっているのはおかしい。

> 例えば、初心者が何故以下のような文でエラーが起きるか理解できなくなる。
> SELECT COUNT(foo) AS cnt FROM hoge WHERE cnt > 2 GROUP BY bar;
この例だと WHERE COUNT(foo) > 2 としたところで何の違いもない。
979NAME IS NULL:2012/05/24(木) 12:49:45.17 ID:???
980NAME IS NULL:2012/05/24(木) 13:17:56.06 ID:???
www.postgresql.jp/document/9.1/html/sql-select.html
ちゃんと順番決まってないと答え出せないだろ

select
foo+3 as bar
bar+2 as foo
from
hoge
where
foo=1 and bar=5
order by
foo
これでselect句の別名が使えたら
おかしいだろ?where句はあくまでfrom句のテーブルに対する条件なんだからさ
981NAME IS NULL:2012/05/24(木) 15:28:49.62 ID:???
>>978
ORDER BYはSELECT文の一部ではなく、CURSOR定義の一部(プログラマのためのSQL第2版より)
ちなみに、SELECT foo,bar FROM hoge ORDER BY 1; って使い方も出来る(1=foo)

> > 例えば、初心者が何故以下のような文でエラーが起きるか理解できなくなる。
> > SELECT COUNT(foo) AS cnt FROM hoge WHERE cnt > 2 GROUP BY bar;
> この例だと WHERE COUNT(foo) > 2 としたところで何の違いもない。

ぉぃぉぃ。
まぁ自分が混乱していると気づけばいいけど...
先に挙げた「プログラマのためのSQL」は理解を深めるのにお薦めです。
982NAME IS NULL:2012/05/24(木) 15:58:59.13 ID:???
△できない ○許可していない
技術的に未実装なのではなく、論理的に(=SQL仕様的に)不可能なんだろうね。
983NAME IS NULL:2012/05/24(木) 16:33:21.12 ID:???
>>978
何の違いもなくエラーが出るよってことでいいのかな
984NAME IS NULL:2012/05/25(金) 10:36:30.64 ID:???
昔Oracleが8の頃、WHERE んとこで集計関数使ったら、
いちおう動くけどほんとはあかんねんで、集計関数はSELECTのとこしか使うたらあかん
とか言われたな。

ほんとにそうなのかは、いまだに知らん。
985NAME IS NULL:2012/05/25(金) 12:12:24.18 ID:???
>>984
HAVINGとかどうすんの
986NAME IS NULL:2012/05/26(土) 01:16:50.80 ID:???
>>980
>これでselect句の別名が使えたら
>おかしいだろ?
だからなんで?

> where句はあくまでfrom句のテーブルに対する条件なんだからさ
なんで where句があくまでfrom句のテーブルに対する条件だったら、select句の別名が使えないことになるの?
こじつけた理由じゃなくて、ちゃんとした理由を説明してよ。それができないなら当てずっぽうなこと言わないで。
987NAME IS NULL:2012/05/26(土) 01:26:19.78 ID:???
>>986
980じゃないけどじゃああなたは>>980のSQLの
WHEREがどう機能すればいいと思ってるの?
988NAME IS NULL:2012/05/26(土) 02:26:10.30 ID:???
ANSIかISOのSQL規格を読んだほうがいいな
989NAME IS NULL:2012/05/26(土) 03:25:35.74 ID:???
>>984
一応は動くといえば、MySQLで
SELECT foo,COUNT(foo),bar FROM hoge GROUP BY foo;
が、動くんよね。(今でも動くかどうか知らないけれど)
これにORDER BY barを付けると、DISTINCT ONの様な動作になるw
(あ、ORDER BY foo,barだったかな)

ベンダー独自的な仕様の中には、ちょっと辻褄が合わないのがあるよね。

>>988
なんか、規格とか仕様云々じゃなくて、「WHERE句で別名が使えないのが納得できない」から
始まっているので、読んでも納得しないんじゃないかなーw
990NAME IS NULL:2012/05/26(土) 09:27:30.68 ID:???
>>954
> select id as ticket_id from tickets where ticket_id < 10;

構文解析した段階で ticket_id は id の別名ということがわかっているわけだから
構文解析結果を実行するまえに、構文木中の ticket_id を id に変えてやればいいだけ。
この場合なら
select id as ticket_id from tickets where id < 10;
に変換してから実行すればいい。
だから、whereで別名を使うのは、技術的には別段難しいわけじゃない。今できないのは、きっと別の理由。

>>980
何を問題にしているのかわからないけど、カラム名と別名とが被ってた場合の
ことについて言っているなら、たとえばカラム名より別名を優先する等の
ルールを決めれば済むだけの話。order by と同じように扱えばいい。
991NAME IS NULL:2012/05/26(土) 09:41:03.19 ID:???
構文解析や意味解析についての、簡単でもいいので基礎知識があれば、
別名をwhere句で使えるようにするのが特に困難なことではないはずだ、
というのがすぐにわかるんだけど。
たぶん構文解析についての基礎知識がないやつが、SQLの仕様書がどうのこうの
いっているのだろう。
なぜそういう仕様になっているのかが聞かれているのに、SQLの仕様書を読めと
答えてるのは滑稽すぎる。
992NAME IS NULL:2012/05/26(土) 09:48:40.47 ID:???
>>990
SELECT [ALL|DISTINCT] <選択リスト> <表式> で、
選択リストの都合、つまり多くの場合表示するための都合で、<表式>の内容が
書き換わることがあってはならないというのが、原則だから、>>954はエラーと
なるのが本来は正しい。
993988:2012/05/26(土) 10:15:26.45 ID:???
>>991

>なぜそういう仕様になっているのかが聞かれているのに、SQLの仕様書を読めと
>答えてるのは滑稽すぎる。

そういわれるとは思わなかった。
SQL言語にあなたの欲しい○○機能がない理由を訊かれても、
言語設計者じゃないとわからないよ。

理論的に可能であったとしても、単に設計者の趣味嗜好の問題などであなたの期待どおりになっていないのかもしれない。
994NAME IS NULL:2012/05/26(土) 11:26:31.89 ID:???
なぜそういう仕様になっているか、だと
PostgreSQL作ったMichael Stonebrakerに聞けとしか言えない。
http://en.wikipedia.org/wiki/Michael_Stonebraker

もうすこし建設的な流れになってメリット・デメリットを整理できれば
ソースコード解析してパッチ書いてみようか、とも思うけど。
995NAME IS NULL:2012/05/26(土) 12:02:59.20 ID:???
SELECT 屁の臭い AS 腋臭よりくさい屁の臭い FROM 体内 WHERE 屁の臭い > 腋臭

このWHERE句が「腋臭よりくさい屁の臭い>腋臭」だったら常にtrueになってしまうよな
「体内」から出た「屁の臭い」を「腋臭」を比べた結果、臭いと判定されたものだけが「腋臭よりくさい屁の臭い」なんだよ
996NAME IS NULL:2012/05/26(土) 12:11:02.90 ID:???
こじつけって…
何でわからないのかが逆にわからないわ
whereはselectの前に評価されるんだから後から動くselectでつけた別名が使えたら結果が変わってくるだろって言ってるんだわ。再帰計算かよ

selectで付けられる別名はあくまでもselect句の演算結果に対してのものなんだよ

うだうだ文句ばっかり言ってないで>>980のクエリはどう動くべきなのか考えてみろって

stonebrakerが作ってたころのはsqlじゃなくてpostquelだな
quelの方が美しいよ。
sqlが優れてるとは思えないけど現状これ使うしかないからなあ
997NAME IS NULL:2012/05/26(土) 12:26:34.12 ID:???
FROM句→WHERE句→SELECT句の順に処理されているんだから、
WHERE句でSELECT句の別名が使えると、一部では便利かもしれないが、
他で辻褄が合わなくなるってことだよ。こじつけでもなんでもねぇよなw

つーか、もうネタだろ。
別名が使えないのはおかしいと言っておきながら>>978では別名を使わないことで
「何の間違いもない」とか言ってるし、しかも...w
998NAME IS NULL:2012/05/26(土) 12:30:54.44 ID:???
「何の間違いもない」 → 「何の違いもない」

俺が間違えてたw
まぁもうちっと経験積めばその不都合さに気づくと思うよ。

999NAME IS NULL:2012/05/26(土) 12:38:55.58 ID:???
>>991
ものすごいバカだな、お前
1000NAME IS NULL:2012/05/26(土) 19:58:29.72 ID:???
>>997
>FROM句→WHERE句→SELECT句の順に処理されているんだから、
だーかーら、そのまえにSQLの構文解析と意味解析をしてるでしょうが。
構文解析 → 意味解析 → FROM句→WHERE句→SELECT句・・・
            ^^
            ここで構文解析木を操作して別名を展開すればいいだけ。
なんでwhere句やselect句の順番にこだわるの。whereやselectの処理に入るまえに別名を展開すればいいだけなのに、なんでこんなことがわからないの。

>>996
> whereはselectの前に評価されるんだから後から動くselectでつけた別名が使えたら結果が変わってくるだろって言ってるんだわ。再帰計算かよ
なんで結果が変わると思ったの?
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。