おつ
9.1 get
6 :
NAME IS NULL :2011/01/19(水) 20:34:25 ID:Axy8UdDb
6
select count(*) from このスレ; count ------ 7
スレじゃねーレス
環境は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=#
chcpせずに client_encoding=SJIS することが多いんじゃないかな。
>>10 デフォルトでインストールされるPgAdminIIIを使ってもOKだぞ。
GUIなので、たぶんpsqlよりPostgreSQLを学習しやすいと思うよ。
>>11-12 client_encoding=SJISはやっていたんですが
12さんの方法で管理出来ました、ありがとうございました
テキスト書式、文字列表現、バイナリ書式、バイナリ表現 これらの語のきちんとした定義はマニュアルのどこにかいてありますか? 英語でもかまいません。よろしくお願いします。
公式サイトのドキュメントに、BNF形式の定義あったかな。 テキスト形式は、文字コードによって違うので、ソースみたらいいと思う。
これからパフォーマンスチューニングの勉強を始めるにあたって、オススメの本やサイトはありますか?
俺も知りたい。 マンモス本しか頼りにするものを知らない。
Conference 2011 Tokyo 参加者はいないのかな
参加したよ。 1つめの基調講演、ありゃなんなんだよ。
ためになったかい
>>16 公式のLets!のblogが結構良かった
>>16 パフォーマンスチューニングは、改善としては10〜30%位しか望めないけど
改悪の場合は底なしなので注意してね。と先日言われました。
事例紹介だったが、ほとんど得るものなし。 プレゼンもヘタクソの極み。
27 :
NAME IS NULL :2011/03/02(水) 00:01:13.76 ID:IkzMfoJ6
PostgreSQL (ぽすとぐれすきゅーえる)って(ぐれ)がなくて PostSQL (ぽすとえすきゅーえる)だったらもっと普及したかもしれないって思った ぐれ っていらないだろって
「ぐれ」だけ気になったのは何故? 元々Postgresだったのでgreを抜くとPostsになっちゃうな それにPostgreSQLと書いて「ポストグレス」と読む人も結構いるような… まぁ、ポスグレっていう短縮の方が多いかな
pgpoolのことってここでいいのかな?
PoSQL(ぽすきゅーえる)で良いだろ
名前の経緯は、 ingres →postgres →postgresql postgresは、ingresの次の意味 その後、問合せ言語の標準化があり、対応版にsqlが付く MySQLに合わせて、PgSQLとかならいいけど、 OSS-DBはちょっと無い
(´・ω・`)
>>32 もし知ってたら教えてほしいんだけど
pgpoolで、デッドロックの対処とかsqlのキャンセルとかしたいときって
どういうやり方が一般的なのかな。
オンラインリカバリの説明見てて気になったんだけど マスタとスレーブでアーカイブモードをONにする理由ってあるの? マスタだけアーカイブONにしてスレーブにWAL持っていけばいいのでは?
そもそも可能なの?
37 :
NAME IS NULL :2011/03/03(木) 14:01:42.79 ID:9rBiI8AH
where句にヒットしたデータのみダンプする方法ってありますか?
>>37 COPY (SELECT ... WHERE ...) TO 'file'.
直接PostgreSQLには関係ないのですが、全文検索用のテーブルは他のテーブルとは別DBなりに分けたほうがいいものなんでしょうか?
なんていうか、ググレカスっていいたくなる質問が多いな。 全く考えてない。
42 :
NAME IS NULL :2011/03/06(日) 16:30:37.95 ID:o1vJgI9f
ポスグレカス
googleSQLってデータベースを検索しろ、ってことか
でしょうね
>>40 postgresqlみたいにインデックスとして全文検索データ持ってる設計思想の場合を除いて、
一般的な全文検索エンジンは、別管理の場合が多い。
と、思ってるだけなので、違ってたらご指摘ください。
要件による。タダで答える気はない。 並の知能があればどうしたほうが良いかは思いつく。
全文検索ってXMLDBのほうが向いてんじゃないの
ぷ、全文検索する為にxml形式サポートしたようなもんじゃん
>>47 monetdb含めてxmldbは、XqueryのようなDOM構造の枝を検索するため出来ているので、
単純な全文検索に特化している訳ではない。
>>51 そんなこと言うならDB使う前に単純なファイルを正規表現で検索すればいい話
>>52 そうですね、
全文検索の性能向上の仕組みは、インデックス付けにあるので、
毎回舐める程度のパフォーマンスでいい場合、
ドキュメントをテキストファイルで管理してるなら、それでいいし、
RDB管理なら、SQL文にGREP書けばいい。
Windows版って、ちゃん動くのぉー バグは減ったかな??
おすすめのレンタルサーバーってどこ? MySQLオンリーのとこが多いねぇ(´・ω・`)ショボーン
どうしても専鯖とかVPSになっちゃうよね あれこれしようと思うと共有サーバじゃどうしようもないことあるし
where句を使っていながら すべてのレコードを抽出する書き方教えて
where 0 = 0
where true
まさかのインジェクション?
mysqlとpgsql共通化するなら、 trueのみのパターンだとmysqlが駄目だった気がする 昔試したのでmysql4.0の頃かもしれないが
query = "where 1=1 "; if (foo) query += " and col1 = 〜 "; if (bar) query += " and col2 = 〜 "; というときに、常に真となる条件がよく使われるかも。
プログラム内で検索条件組み立てるときの例
何でレンタルサーバーでPostgreSQL使えるところが少ないの? せめてサクラで使えるようにして欲しい
>>65 まあ、時代はこちらだから。そのうち良くなるよ。
JavaScript なら通るな。
C#でも通ると思う。けど、まぁ、擬似コードなんでどれでも
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
どうかお願いします。
serial型を主キーにしたテーブルにレコードをinsertし、 そのレコードの主キーを得たいです。 max関数では、insert直後に他者がinsertした場合、不正な 値になってしまいますよね。 どうしたらよいでしょうか?
RETURNING句を使う
もしくはcurrval関数を使う
>>73 解決になってない。
排他制御しろと思うかもしれないが、それならもともと大丈夫
75 :
73 :2011/03/19(土) 04:12:56.80 ID:61olq/JC
>>72 ,73,74,75
素早い回答ありがとうございました。
RETURNING句、currval関数とも、正しい解決策であること
をPostgreSQLの日本語マニュアルで理解しました。
今回の場合RETURNING句で実装することにしますが、
currval関数を知ったことは大きな収穫です。
ありがとうございました。
>>70 今時、UAC悪さしてるとか?
64bitが悪さしてるとか?
なんだろう
78 :
70 :2011/03/22(火) 14:05:16.04 ID:???
>77 お返事ありがとうございます。 WinServerでAdministratorでログインしてるので、 UACはスルーして常に管理者権限で動作しています。 64bitについては、postgreSQLもMecabも32bit版をインストールしてるので、 関係ないと思ってるのですが... よくわかりませんね...
79 :
NAME IS NULL :2011/03/23(水) 01:57:10.97 ID:dwOuswKE
全文検索エンジン今Ludia使ってますが textsearch_sennaに乗り換えたほうがいいですかね? PG8.3以上を使える以外にメリットありますか?
AdministratorだからといってUACが完全に回避されるわけじゃないんだけど。 UAC切ってるってことなら話は別ね。 みんな当たり前のようにAdministratorでWindowsを使うようになってるから、Administratorにも制限を設けた。それがUACの本質。
>>70 "The specified module could not be found." だと実行権限まわりの
問題のことが多いんだけど、すでにやってるみたいだしなぁ。
Everyoneの代わりにpostgresユーザを名指ししてもダメ?
chroot的なことされてるってことはないのかな
83 :
70 :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 へのアクセスが失敗してるんだろうなぁという 予想はできるので、たぶん同様の原因で失敗してると思うのですが、 アクセス権限周りってほかに設定変更すべきところありますでしょうか。
32bitOSで64bitDLLを使おうとしてるとか
85 :
NAME IS NULL :2011/03/26(土) 17:04:11.05 ID:IkoGAxpk
PG8.2をサーバエンコードをutf8でインストールしたんですが psqlはsjisなので psql起動のたびにクライアントエンコードをsjisに変更するのがめんどくさいです。 何か解決策があったら教えてください
$HOME/.psqlrc に SET CLIENT_ENCODING='SJIS'; ってのはどう?
87 :
NAME IS NULL :2011/03/27(日) 00:34:30.49 ID:tM5GbfFL
ありがとうございます。自己解決しました。 環境変数 PGCLIENTENCODING に SJIS と設定することで解決しました。
88 :
NAME 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をどのように修正したらよいのでしょうか?
89 :
NAME IS NULL :2011/03/27(日) 15:07:53.64 ID:IYaxdkvE
自己解決しました INSERT INTO testtbl(date, name) VALUES(NOW(), '{DATA}')と書いたら動きました
90 :
NAME IS NULL :2011/03/28(月) 01:52:02.82 ID:bqybqGt+
LudiaのパフォーマンスチューニングのTipsあったら教えてください
91 :
70 :2011/03/28(月) 10:14:38.20 ID:???
OSの再インストールを含むいろいろやってみましたが、 どうにもならなかったので結局MySQL+Sennaでとりあえず作業するようにしました。 Postgres9.1がNGram対応らしいので 正式リリースしたときに戻ってきます。 いろいろありがとうございました。
92 :
NAME IS NULL :2011/03/29(火) 00:19:31.86 ID:f/9wZGST
おれはtextsearch_sennaで同様の症状が出た。 PCによってうまくいったり行かなかったりで安定しない パスは合ってるはずだし何が悪いのかわからない
93 :
NAME IS NULL :2011/03/29(火) 10:47:20.31 ID:yhdycnL0
何でPostgreSQLiってないのですか? MySQLiはあるのに
必要と思う人がいないからだろ
必要と思う人が作ればみんな幸せ
>>70 , 92
MSVC C++ 2010 ランタイムがインストールされていないのでは。
97 :
NAME IS NULL :2011/03/30(水) 02:43:54.72 ID:Ljvz7rtW
>>96 サソクス
そんな前提条件があったのか。。
それ入れてみてやってみます。
それとは関係ないけど
RDBで数百万以上の文書に対する検索をするのは
ムリかなと思うこのごろ。
Solrやnosqlでの実装を考えようと思っています。
98 :
NAME IS NULL :2011/03/30(水) 11:33:40.87 ID:yqbcjZjz
日付、id、名前、コメント、IP この5つの項目をデータベースに入れたいのですが どのようにテーブルを設計したらよいでしょうか? 全部1つのデータベースに入れないほうがいいですかね?
ほっほっほ
>>98 全部バラバラにする。共通の組識別子を付加して、
日付
--------------
組識別子 | 日付
id
------------
組識別子 | id
名前
--------------
組識別子 | 名前
コメント
-------------
組識別子 | コメント
IP
-------------
組識別子 | IP
102 :
NAME IS NULL :2011/03/31(木) 09:42:55.86 ID:o4kjoUAR
再起動後のposgtreSQLの起動をいつも Postgresのアカウントになってから 手動でスタートしているのですが これを自動起動させる方法はあるのでしょうか。 OSはubuntu10.10 、postgresqlはソースからコンパイルしたものです。
>>102 標準のpostgresのパッケージから、起動スクリプトを取り出して、
pathの記述をちょっと変更した後、設定すればいいはずだけど、
詳しくはUbuntuのスレで起動スクリプトの追加方法を聞いたほうがいいかもしれない。
>>103 いやいや、パッケージのスクリプトをソースから入れたものに適用するのはかなり大変よ。
>>102 今時のソフトは大抵起動スクリプトの例とか同梱されているから、それを参考にすると良い。
PostgreSQL なら
contrib/start-scripts/linux
をどうぞ。
>>104 そうなんだ。同梱されているのは知らなかった。
ちなみにFedoraの場合は、パッケージのものが簡単に流用できたよ。
debian系はよく知らないんだけど、update-rc.dコマンドで起動スクリプトを登録するのかな?
起動順の数字は、何番目くらいを指定するんだろう。
106 :
NAME 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
108 :
NAME IS NULL :2011/04/01(金) 21:28:40.81 ID:Wpf/mh7O
Windows版 PostgreSQL9.0 と FreeBSD版 PostgreSQL9.0 を レプリケーションさせたいのですが 参考になるサイトなどあれば教えてください。
>>108 異種混合はSlonyじゃないと無理じゃないか?
110 :
NAME IS NULL :2011/04/02(土) 11:31:44.82 ID:ULc2Q9iC
>>110 いや、pgpoolでもいけるかもしれない。pgpoolもSlonyもSQLを送るタイプだから。
物理イメージを送る、9.0組み込みのレプリケーションは無理。
112 :
NAME IS NULL :2011/04/05(火) 19:55:34.97 ID:g4jC/4Ok
Ver9.1 で、SQLのMERGEがサポートされるとLetsに書いてあった のだが、今は書いてない。 なくなっちゃったのかなぁ・・・
114 :
NAME IS NULL :2011/04/06(水) 10:16:35.38 ID:rFyVB0oq
Mysqlスレって厨が多くて荒れすぎてるのに このスレは大人が多くていいね しばらくpg使うか
115 :
NAME IS NULL :2011/04/07(木) 01:01:22.74 ID:FUS61YfR
ポスグレとオラクルとかHiRDBで性能差はどのくらいあるんですかね ぶっちゃけあまり変わらない?
>>113 MERGEは9.1には採用されず。その前提機能は採用されたので、次に期待ですな。
GPLが怖いという理由でMySQLを避けた
>>117 それに加えて、Oracleの物になっちゃったしねい。
119 :
NAME IS NULL :2011/04/10(日) 13:28:29.94 ID:cBez4FYu
postgresql 8.4 (linuxにて動作)で PCからlibpq.dllを使って接続しています 有線でLANが引けない場所があり仕方なく無線LANで飛ばして処理 しているのですが、時々DBから切断されていてエラーになります おそらく無線の状態が悪い時がありセッションが切れているのだと思いますが セッションのタイムアウトをこの無線LANの端末だけ 2分や5分に変更できないものでしょうか?
>>119 PostgreSQLの設定ではなくて、無線LANやOSの設定が必要だと思うよ。
スレ違い。
121 :
NAME IS NULL :2011/04/10(日) 20:45:14.21 ID:cBez4FYu
>>120 今の無線LANは切れないように出来ないのでここで書いています
無線LAN側の設定やOSの設定はもう済んでいます
dBのログも取ったのですが、常時100%の状態で接続できているわけではなく
20秒ほど切れることがあるようでメーカー側の認識も同様です
で、例えば、有線でもLANケーブルを5秒ほど抜いてもセッションは切れません
PostgreSQL側でこの時間はどこかに設定があるのでは?
と思い書いたのですが・・・
まあいいです、ソース解析してがんばります、ありがとう御座いました
>>121 > まあいいです、ソース解析してがんばります、ありがとう御座いました
無理だと思うよ。
無理だろ ネットワーク接続が新しくなってんだろ
物理層のセッションが変わってるなら無理だろうね それよりリトライする方が確実だろう
無線LAN側の設定やOSの設定はもう済んでいます 無線LAN側の設定やOSの設定はもう済んでいます 大事なことなので二度書きました
二度書いたところで君じゃ無理だよ
127 :
NAME IS NULL :2011/04/11(月) 00:46:55.18 ID:kJ1QTiO2
Corei7、メモリ8GB程度で ポスグレで何百万レコードくらいまで扱えますか?
そうだな。車種を提示されて、どこまで行けますかと問われてるような、そんな気分だな。
どこまでもいけるよな。
心の翼を広げれば。
トリガってむずいな
セッション切れるって人、試しにVPNでつないでみても同じかな?
その根拠は?
VPNがセッションキープしてくれることを期待してるんじゃないの?
Postgres の設定なら tcp_keepalives_idle とかは効果無いかな?
136 :
NAME IS NULL :2011/04/13(水) 22:57:25.37 ID:S0k43l6n
どなたか縦持ちのテーブルから 横持ちのテーブル作るストアド例 教えてください。
crosstab
>>136 鍵に対して横持ちを作る際、昇順、降順などルールが必要なのではないかな。
それも設計する必要があるのかな?
>>138 質問されていることがよくわからないのですが...
結果としては
こういう縦持ちテーブルから...
id name
-------
1 a
2 b
3 c
こういう横持ちテーブルにするストアドがほしい...
a b c
-----
そう言うのを縦持ち、横持ちって言うんだ 一般的なの? で、横餅テーブルはその都度実表作ってデータを転記?
>>140 一般的かどうかは知りませんが...
一時テーブルで。
縦持ち横持ちは業界内では一般的だろ。 で、crosstab
143 :
136 :2011/04/14(木) 22:28:00.04 ID:???
>>142 crosstabやってんだけどうまくいかん。
縦持ちから配列にするまでは簡単だけど、そこから横持ちにするのは手間がかかる。
>>144 だからcrosstabだと。
詳細な情報が出てこない以上、そこから進まないんだ。
>>139 ここではPKがidでしかもソートされていてという例だが
一般には4月,5月, ... (次年度の)1月,2月,3月などの場合が
多い。順に並んでいる保証はもちろんない。
12ヶ月分データが揃っていなければ作れない。
等々、いろいろあるものだ。
148 :
136 :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が可変の場合のストアド教えてください
SQL実行前に、結果のテーブルの型が決まってないといけないから無理じゃないかな。 いっそのこと hstore で 列名→値 のハッシュとして持ってみては?
p1 char(6),のとこが増えるのか。 そのSQLの文字列を作るのなら出来そうだけど。 ストアドの引数に数を渡してループさせてくっつける。 colvalが可変って textじゃダメなん?
151 :
136 :2011/04/15(金) 18:13:32.39 ID:???
>>150 > colvalが可変って textじゃダメなん?
間違いです。textでOKです。
152 :
NAME IS NULL :2011/04/16(土) 09:16:12.11 ID:V3FnIgss
select id, sec, colval from section のレコード数を変数cntに格納して FORで回しながら p + cnt + char(6),みたいなイメージでやればいいのだろうか?
Postgres+Apache+PHPで全文検索の質問はここでいいのですか
PostgreSQLの起動を パソコンの立上げの度にユーザーpostgresになって起動しているのですが 自動起動になるようにrc.localあたりに書き加える方法はないのでしょうか。
>>154 runuser -l postgres -c "起動のコマンド"
SQLで 複数のサブクエリで参照される 一段グローバルなサブクエリを宣言できませんか?
postgresお勧めの書籍についてですが postgresをインストールした時、デフォルトpostgresDBが作成されてますが、 postgresDBがなんぞや、とか、アーキテクチャや概念の説明がされているような 良書は何かありますでしょうか?公式のマニュアル以外でお願いします。
162 :
160 :2011/04/19(火) 01:05:29.08 ID:???
>>161 入門としては分かりやすくて良いと思いますが、
もっと詳細でボリュームがあるのが良いです。
あいまいな例になってしまいますが、O'Reillyが出版しているような
分厚くてコアな部分を説明しているような書籍でしょうか?
>>158 共通表式 WITH 句というのを初めて知る事ができました。
ありがとうございます。
ところでこのWITH句は、create temp table と比較して速度は速いので
しょうか?
>>163 プレーンなTEMP TABLEと比べれば、概ねWITHのほうが速い。
内部形式をテーブルの形に整形せずに済むからね。
ただ、さらにTEMP INDEXまで張るようなケースだとインデックスぶんの差が出るかも。
インデックスを張る時間も含めて比べてみてくれ。
>>163 WITH句をロクでもない機能追加と思っている
データベース使いもまた多いから注意。
:(;゙゚'ω゚'):マジで!?
>>166 私も含めてだけど、Codd原理主義者は多いから。
Codd教による宗教戦争か
そんな話は、よそでやってね。
pg_dumpで他ホストのDBをダンプしたときに、自ホストじゃなくてそのホストにファイル保存するような事ってできないかな?
>>170 そのホスト上でコマンドを実行してはいけないの?
>>170 pg_dump単体にそんな機能はないが、運用でどうにでもなる。
あとはスレ違いですな。
うまく回答した体で
>>170 リモート経由して他ホスト上でダンプする
ダンプしたファイルの保存先にネットワーク経由での他ホストを指定する
あとはスレ違いですな。
175 :
PostgreSQL入門以前者 :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 しかだめなのですか?。
gcc入れてコンパイルしちゃえばどうよ
177 :
PostgreSQL入門以前者 :2011/04/22(金) 09:11:04.13 ID:tgKyx0+u
>>176 やはり、それしかないですか・・。
ありがとうございました。
178 :
NAME 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] を参考にインストールしました。
>>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
になってるとかじゃないの?
180 :
NAME 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してデータベース止めましたが、根本的な解決が出来てない状態です。
/usr/local/postgresql-9.0.3/bin/pg_ctl stop -m f -D /opt/postgresql-9.0.3 こうじゃなくて?
あと、killはこう。マニュアルからの引用だけど。 pg_ctl kill [signal_name] [process_id]
183 :
NAME IS NULL :2011/04/27(水) 21:14:20.67 ID:JcDOOqZw
すみません。 -D オプション付け忘れてました。 ご迷惑をお掛けしました。
184 :
NAME 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サーバの 状態が知りたいだけなのにトンチンカンな事しか書いてないんで心配になっちゃって……
トンチンカン?何をトンチンカンなことを言っているのかね。
mysqladmin stausの実装って、sqlで取ってくるだけじゃないの?
>>184 Postgres だと組み込みの pg_stat* 系のビューが充実している。
定型処理用の既製品なら pg_top, pgstatspack, pg_statsinfo のあたりかな。
postgresql-9.0.3で以下のような テーブルを作ってデータを常時insertする場合 postgresqlだと何兆件ぐらいまで 現実的な処理時間で扱えるのでしょうか。 create table test ( key char(064) primary key, data1 char(512), );
それが確認できる環境の人いないと思うから石井さんとかにメールしてみたら
と思ったけど現実的な処理時間で扱える件数しかそのテーブルに入らなかった
つーか、質問の仕方も知らない馬鹿な厨房なんか相手にすんなよ
PenPRO+MEM32MBで100兆件まで余裕でいけるよ!
1兆件で500TB超えるのでマトモには動かないだろうなあ
PgCon 2011でPostgres-XC1.0 について何か言及あるの?
196 :
NAME 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に値が入ってこないんだけど...
197 :
196 :2011/05/06(金) 00:27:57.51 ID:hR3GPIpU
× "select func(:key);",conn ○ "select func_a(:key);",conn スマソ
何でもっと簡素化したコードで確認しないのだろうと思う。
9.1って凄いの?
なにが?
CREATE FUNCTION 初体験何ですが パラメータのデフォルト値としてサブクエリが使えないなら どうやってパラメータが省略された場合にテーブルの全行数とするなんて定めることができるのでしょうか?
SQL書いて。
SQLAdminが日本語文字化けするんです SQL入力するとき日本語文字がロロロロロってなります エラー時のステータスバーには正しい日本語エラー通知文が出るんですが 不便です 設定の仕方を教えて下さい
フォント
>>202 なるほど、
(範囲の最後をデフォルトで0にして)
SQL(のCASE式の方で分岐させる形で)書いて。
そういうことですね?
できました。有り難うございました
藻前ら!エスパーかよ
データベース初心者なんですけどMysqlとPostgreSQLを掛け持ちで覚えるのってやめたほうがいいですか? どちらか一つ1年ぐらいいじってからのほうが効率いいですか?
その質問には意味があるのだろうか。 不安なの?
↑ 無駄な煽りレスは控えようか
やめた方がいいですよーっていえばいいの?それとも、全然大丈夫ですよーっていえばいい? 人それぞれでしょそんなの。
基本的な部分はおんなじだから両方使ってみればいいんでないの?
片方に慣れちゃうともうかたほうやるのがおっくうになるから 今のうちに並行でやった方がいいかもなw
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のペアとして認識して 逆順になっているだけのペアは纏める方法を教えて下さい
宿題を持ち込まないように
[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; っていうネタを思いついた。 ちゃんとやるにはどうするんだろう?
>>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
でいけました。
が、パフォーマンスが心配です。。。
こうかな。 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
あり^^
ウィンドウ関数の作り方が分かりません 点数列からその点毎の偏差値を計算する関数を作ろうと思ったのですが これはウインドウ関数に属しますよね?
222 :
70 :2011/05/18(水) 17:34:12.21 ID:???
223 :
70 :2011/05/18(水) 17:36:53.28 ID:???
>96 >222の内容ですが、 すでに96で指摘されていたんですね。 気づかなくて申し訳ありません。
2ヶ月も無駄にしたのか・・・
こだまでしょうか? いいえ、ばかです。
postgresって拡張やら色々出来て便利なんだが 色々出来すぎて時々何が何やらわからなくなる ごめんなさい。ただ俺が病んでるだけです あぁ辛い、もう体が持たん
色々やらずに基本的な機能だけ使えばおk
229 :
Shingo 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.
230 :
sage :2011/05/26(木) 02:34:47.29 ID:???
Oracleからポスグレに乗り換えることを検討していますが、やはりバックアップが大変気になります。 運用として、フルバックアップと差分バックアップを使い分けて実施すると思いますが、皆さんはどんなバックアップを運用されてますか?
地域のオプションで通貨の小数点以下の桁数を2にして Windows2000で9.0.3をインストールしたのですが 表示が変です 単純に数値の2桁めと3桁めの間に小数点を打ってるだけのようです つまり\320が\3.20などと表示されるのです 正しくは\320.00の筈です そこで地域のオプションで通貨の通貨の表示をデフォルトに戻し OSを再起動しましたが 一向に変わりません 再インストールしかないでしょうか?
そりゃそうなるだろ 具体的に何をどう設定して、実際は何が欲しいのさ
234 :
NAME 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です。 どの辺をいじればいいのでしょうか。ノイローゼ気味です。 助けてください。
>>234 ls -a /tmp/.s.PGSQL.5432
で存在が確認できるはず。
237 :
NAME IS NULL :2011/05/30(月) 22:27:51.58 ID:JWqkOLWP
>>235 さま
ありがとうございます。そこには何もないんです。また/var/run/postgresql/の
下にあるというのも読んだので、調べましたが、ないんです。何もないのが
問題なんでしょうか?
>>236 amaさま
そこも実は見たのですが、解決方法がわかりません。pg_hba.confをいじって
local all all trust
などにすればいいんでしょうか?
Is the server running locally and accepting connections on Unix domain socket "/tmp/.s.PGSQL.5432"? のエラーはクライアントが「サーバー立ち上がってねーぞゴルァ!」って言ってるエラーだと思う つまりクライアントだけ立ち上げようとしてるんじゃね? ちなみにウチの環境だと鯖立ち上がってると/tmp/.s.PGSQL.5432は存在するね
239 :
NAME IS NULL :2011/05/30(月) 23:22:01.71 ID:JWqkOLWP
>>238 さま
まさにおっしゃるとおりかなと思って、
postgres@XXXXX:/$ pg_ctl start
してみても、
bash: pg_ctl: コマンドが見つかりません
と出てきます!postmasterも駄目です。
もうあきらめて再インストールとか、再initdbしたほうがいいんでしょうか。
昨日までは動いていたのにグレちゃったんでしょうか?不思議です!!
多分コマンドの打ち間違いとか、パス通ってないとか、動かす権限がないユーザー で起動しようとしてるとかそういう人的なミスだと思うから焦らずじっくりもう一度 見直してみたら?
>>234 つか動かなくなる直前に何をしたかくらい覚えてないのかい。
242 :
NAME IS NULL :2011/05/30(月) 23:44:28.14 ID:JWqkOLWP
>>240 さま
そうですね、もう一度一つ一つチェックしていきます。
今日はもう寝ます。つきあってくださり本当にありがとうございました。
ディスク溢れてるんじゃない?
>>233 monetary型の平均を取ろうとしたら小数点切り捨てられるので
下2桁まで表示して欲しくて、ロケール設定しました
でも期待した通りどころか普通の金額表示までおかしくなってしまった為
諦めて元に戻そうかとコントロールパネルでロケール設定を戻しても
もはや言うことを聞かず今だにおかしな表示のままなのです
現状 : \12,345,678,900 → \123,456,789.00
最善の要求: \12,345,678,900 → \12,345,678,900.00
次善の要求: 元に戻す
monetary型っての使ったこと無いから良く判らんが整数の型に入ってるっぽいね
246 :
240 :2011/05/31(火) 11:24:36.69 ID:fzGRftAT
昨日起動できなくなってしまった者なのですがpostgresql.confの tcipip_socket = trueの行を消して /etc/init.d/postgresql-8.3 restart で復活しました。 お騒がせしました。 アドバイスくださった皆様ありがとうございます。
・・・それ、解決してるのか?w
多数のビューから参照されているテーブルが壊れました 作り直そうと思いますが 削除するにも依存関係でズブズブです 要領よくテーブルを作り直す手順を教えて下さい
いったん、依存関係を切って消してまたつける、とかでもいいのかな?
>>246 tcipip_socketは7.xまでの設定用だ
8.3なのに古いconfigからわけもわからずコピーしてきたのか?
pgfoundry.orgに繋がらん・・
>>249 そんなこと出来るんですか?
教えてくだしあ
254 :
240 :2011/05/31(火) 20:26:07.87 ID:fzGRftAT
>>250 そうなんです。
他からコピペしてきたのが問題だったようです。
おかげですっきりしました。
255 :
232 :2011/06/01(水) 04:18:35.50 ID:???
自己解決しました 管理者でもカレントユーザーでもなく postgresアカウントの方の地域のオプションだったとは…… うっかりしてました
>>253 マニュアルにあったと思う。
ALTER TABLE 〜 DROP CONSTRAINT なんちゃら
とかかな
作業終わったら
ALTER TABLE 〜 ADD FOREIGN KEY なんちゃら
で付けなおす
257 :
NAME IS NULL :2011/06/01(水) 13:39:58.94 ID:UJoI79+i
ライセンス表記と無保証表記を書いたテキストファイルを置いておけば、 商用のウェブサーバに導入しても良いという認識であっていますか? ちなみに、置く場所は、ユーザがアクセスできない場所(WEB-INFフォルダ下など)です。
それは再配布、再利用に関する話で、 通常の利用に関してそういうものはない。 BSDライセンスと付属のドキュメント見てみよう
>>258 レスありがとうございます。
PostgreSQLのインストーラ等を納品物の一部として含める場合は必要で、
別途ダウンロードしてインストールする場合は不要、
という認識でよろしいでしょうか?
だいたいあってる
261 :
NAME IS NULL :2011/06/02(木) 07:18:45.09 ID:gmaEZeJk
ウェブサーバにPostgreSQLを導入した場合、セキュリティホールになりますか?
どちらかというと、ウェブサーバーのセキュリティ破られたとき、root取られたらそのままデータが漏れるのが問題。 なるべく低いレイヤーで、localhostかlocal networkのみにdb接続制限すれば、 、非公開dbサーバーとほぼ同じ脆弱性になる。
って、サーバー分けても、一般接続のDBパスワードもれるのか
そのDBユーザー/パスワードでシェルログインできなければまだマシなんじゃない?
Webサーバがやられた時点でもうアウトだろw てか、きっちりFW設定してhttpdも最新にした上で、 アプリがカスでなければPort80/443から問題が起きるとかそうそう無いだろ 物理的に分かれてた方が、そりゃぁマシだけれど
ウインドウ関数は簡単には登録できないのですか?
指定された型のテーブルを引き数にとる関数定義は不可能ですか?
269 :
262 :2011/06/03(金) 07:18:01.48 ID:v2spQfh9
ありがとうございました
エクリプスのエミュレータでの動作は信頼できませんか?
271 :
270 :2011/06/03(金) 07:58:03.82 ID:???
すみません、誤爆しました。
ユーザ関数定義で VARIADIC 引き数名 テーブル名.カラム名%TYPE[] ってできないんですね ここだけ直接型名書かないといけないなら 参照するテーブルの型が変更になったら面倒くさいですね
まさかとは思うが 先頭に.がついてるから見えないとか言うオチはないよな
.テーブル名.カラム名%TYPE[]とやっていやしないかということですか? いいえ
>>274 273のものです
誤爆でしたごめんなさい
enum を 'a','A','b','B','c','C'…と作ってしまいました 後になって今更'a','b','c',…,'A','B','C'…の方が良い事に気づきましたが pg_enumをいじって変更すると この型を使うテーブルのデータが狂ってしまうでしょう 円満に解決できませんか?
ひょっとして関数作る時にplpgsqlはあんま使わない方が良いの? これ使おうとすると原因不明のエラーに悩まされる事が多い気がする
>>277 原因不明のエラーなんて無いよ。エラーメッセージを読もうよ。
○○してしまうでしょう、なんて占い師が使うような言い回しに振り回されずに エラーメッセージを元に対応すべきですね
>>276 テーブルサイズにもよるけど、新しいenum型と新しいテーブルを作って
データを移し変えたほうが、悩んでいる時間よりも早いのでは。後から rename すれば良い。
>>278 ○○付近でエラー
っていうふわふわしたヒントしかくれないんだもん……
sqlに戻すと上手く行ったりするし
これ独自拡張でしょ?実装にまだ不備があんじゃないの?って思ってしまう
>>279 問題はエラーとして補足されない事実上のエラーのことなんですよ
>>281 ○○付近でエラー
ふわふわしたエラーを、さらにふわふわさせて書き込まれても助けられないよ。
実際の入力と、実際のエラーをさらすべき。PL/pgSQLは10年以上の実績が
あるわけで、普通に考えて、あなたのミスである可能性のほうが高い。
285 :
240 :2011/06/06(月) 16:05:29.47 ID:PRzZI/xi
出力をファイルに保存したら画像として開けてるの?
287 :
240 :2011/06/06(月) 19:44:36.15 ID:PRzZI/xi
>>286 そうですね。ちょっとテストしてみます。
MIME_TYPE
289 :
285 :2011/06/07(火) 13:41:23.28 ID:LcV5pV7u
>>286 さま,
>>288 さま
PHPでローカルフォルダのファイルをいきなり表示するコードを
書いたらちゃんと画像が出たので、原因はbyteaにあるような
気がします。が、先に進めないので、別の保存方法を考えます。
みなさん、ありがとうございました。
差分とったらいいじゃない
ちょっと調べてみたけど、phpのバージョンとlibpq.soのバージョンによるみたいだぞ
CentOSでyumで入れたPHP5.1.6にlibpq 8.1.22 だと同様の結果になるが、 自分でソースからビルドした PHP5.2.17にlibpq 9.0.3 だとうまくいった。 DBとlibのバージョンあわせてみ?
あとはpg_unescape_byteaを自分で作ってしまえばいい、 そんな手間じゃないだろうし、ソースもあるだろ
商用のWEBサーバを構築するのに使用する場合、ライセンス費用が掛かりますか? 商用ライセンスというのがあると聞いたのですが、いくらくらい掛かりますか
>>294 ライセンス費用はかかりません。
商用ライセンスというのもありません。
MySQLとの勘違いじゃないかな?
PowerGresのように、PostgreSQLを独自に改造して販売している製品や、サポート業務を有料で請け負ってくれる会社ならあるよ。
>>295-297 ありがとうございます。
すみません、MySQLと勘違いしていたようですね。
ライセンス違反しないように留意します。
299 :
NAME IS NULL :2011/06/13(月) 22:40:35.70 ID:bgOKQ0eV
PostgreSQL 8.3.14 を使っているのですが、テーブル数の制限数はるのでしょうか? max_fsm_relationsに最大テーブル数を設定するようなことを見たことがあるのですが、実際に試してみると、max_fsm_relationsに設定した数よりも多くテーブルを作成することができました。 max_fsm_relationsよりも多くテーブルを作成すると、何か問題が発生するのでしょうか??
その項目をそのように説明しているサイトのことを思い出す必要はないが、 その項目がなにを意味するかをマニュアルで読む必要はあると思う
PostgreSQL 8.1.11を使っています。 内部エンコードはUTF8です。 '9:9ド'や'0:0あ'などの文字を追加すると '9$1ド'や'0$1あ'などに勝手に置き換わってしまいます。 '9:あ'や':9あ'では問題ないのですが、原因は何でしょうか?
9.0 でレプリケーション中、プライマイリ側がダウンした場合、 スタンバイ側は、どういう風にしたら、参照オンリーから更新も可能になるようになりますか? スタンバイ側にトリガーファイルを設定したら、recovery.done になって、 それまで起動して参照できていたのに、スタンバイ側のPostgreSQLもダウンして参照もできなくなってしまいます。
>>299 max_fsm_relations よりも多くのテーブル / インデックスが
更新されるようだと、VACUUMの効果が弱まることがある。
予め多めに設定しておくか、設定する必要の無くなった 8.4 以降を使いましょう。
>>302 トリガーファイル → recovery.done までは正しい手順だと思うよ。
スタンバイがダウンするのは謎。何かエラーメッセージがログに残っている?
>>304 ありがとうございます。
再度調べたところ、トリガーファイル作成でダウンではなく、
プライマリ側をダウン(サービス停止)させると、スタンバイ側もダウンしてしまいます。
トリガーファイルを作成する前にダウンです。
プライマリ側をダウンさせる前までは、レプリケーション状態は正常でした。
ログをみて原因を調べたところ、
フォルダ構成が間違っていたためダウンしたようです。
ログを見るというご指摘で原因がわかりました。
ありがとうございました。
リアルタイムなレプリケーションと
プライマリの障害後のスタンバイの正常稼働も確認、ログも正常に
『トリガファイルが見つかりました』
『アーカイブリカバリが完了しました』
『データベースシステムの接続受付準備が整いました。』
『自動バキュームランチャプロセス』
などと吐き出されました。
これで、少しは安心ですね。
あとは運用時に実際に障害が起きた時に
きちんとスタンバイ側が稼働することを祈るだけです。
>>301 追加とあるけど、どうやって追加をしたのか
こちらで再現できるだけの環境とやり方書いてくれないか?
>>305 レベル低すぎやろ・・・
めんどくさがらず自分を過信せずやらんと。
信じる物はDBのソースとマニュアルとログ。
2chで泣きつく奴はこの程度
>>307 レベル低くてもなんとか、
>>304 さんのおかげで、できました。
まだ細かい点で不明な点もあり問題はありますが。
Linux版 は情報があるからそのとおりにすれば比較的簡単だけど、
Win版は情報がないから苦労しました。
わかってしまえば単純で簡単だけど、
わからないことに気づくのはなかなか大変ですね。
もう少しマニュアルやサンプルがあると私のようにレベルが低い人にもわかりやすくなるんですけどね。
>>308 そういうのをブログとかで公開していくといいんだよ。
マニュアル読んですぐ分かる内容はだめだけど。
310 :
NAME IS NULL :2011/06/16(木) 07:43:00.33 ID:R1vBe+KD
日本PostgreSQLでLinux用の9を探したけど、ソース版しかなかった・・・ コンフィグ実行してgmakeするだけとはいえ、なんで面倒なんだよな・・・ どうしてrpmを用意してないんだ?
おいおい大丈夫かw
関数定義のあとのOWNER TOとCOMMENT ONの方の関数の型には デフォルト引き数書いちゃイケないのか! そういうことはもっと早くにいってよ!
基本的な質問で申し訳無いですが、 UTF-8 使用時の varchar のサイズって、 1 文字あたり 3 バイトで合っていますか? あと、開発に使う PostgreSQL JDBC Driver ですが、 サーバ上に置いて使ったり配布したりする場合は、 ライセンスを書いたテキストを置いておく必要がありますか?
カラムサイズミロ
>>315 ありがとうございます。
カラムサイズの見方を調べます。
>>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.
参考訳文
バイナリ形式で再配布する場合、上記著作権表示、本条件書および下記責任限定規定を、配布物とともに提供される文書 および/または他の資料に必ず含めてください。
318 :
NAME IS NULL :2011/06/17(金) 07:23:10.86 ID:78HPp+Du
>>317 ありがとうございます。
ライセンス条項を書いたファイルを、
jar ファイルと同じフォルダ内に配置するようにします。
ライセンスを気にするようになってから、
英語をまじめに勉強しておけばよかったと後悔しています。
>>314 UTF-8 は可変長エンコーディングだから、1文字あたり 1〜6 バイト。
(PostgreSQLは4バイト以上になる文字もちゃんと扱える)
日本語の文字は概ね3バイトずつなので、概算なら3バイトで計算しても良いとは思う。
なぜ text型があるのに、varchar で文字数制限するんだろう?
varchar(n)の見積もりってどうするんでしょうね? ある程度文字数が増えると勝手に圧縮されたり ページサイズをまたぐ長さになるとTOASTが働いたりと 正確な見積もりしづらそうなんですが・・・ 自動で圧縮する機能とトーストって別物だと思っていいですよね。
昔nが文字数を示してることすら知らない奴が postgreSQLのテーブル設計しててイラついた。 しかも先に言ってよとか、死ねばいいのに。 何をもとに設計してたんだよ屑。
バカを育てるマネを要求するなよ。
Linux使ってる以上、コマンドラインからコンパイルするくらいデフォだよな むしろ、ダブルクリックひとつでインストールできるWindowsがおかしいんだよ
326 :
NAME IS NULL :2011/06/17(金) 20:38:07.43 ID:78HPp+Du
select octet_length(列名) で調べたところ、 半角文字は一文字 1 バイト、全角文字は一文字 3 バイトでした。 ただ、ここのレスを見ていると、最大 1 文字 6 バイトもあるようですね。 可変だと想定する最大のディスク容量の計算が困りますね。 6 バイトで計算してしまうと、英語しか使わなかった場合には、 単純計算で 6 倍も計算が狂ってしまいます。 最大件数格納しても、ディスクはガラガラのスッカンカンということになっていまう。 うーん、どうすれば・・・。
無駄な領域はできないよ。 そもそも最大を制限するために使うんだろ? 何を心配しているんだ?
>>326 保存を想定しているデータの一文字あたりの平均バイト数を
サンプリングなどして調べるか、
それができないなら、適当に分布を仮定して計算するしかないのでは?
>>327 仕事で使うので、ストレージとかパーティションサイズとか、
十分かどうか見積もって計算しないといけないことになってるんじゃないかな?
まあ、ディスクがガラガラになっても、それほどもったいないほどにはならないかも知れないけど
ストリーミングレプリケーションを使ったときって スレーブ側のpg_catalogに現われる統計値なんかマスタのものになりますか? 見たところ違うような気もしますが・・・
>>330 pg_catalog の統計地はマスタと一致する。ただ、含まれている統計情報は
データの分布に関するもの (ANALYZE) なので、特に問題はないはず。
逆に、アクセス統計情報 (pg_stat*) は、マスタとスレーブで別集計。
バッファヒット数などの統計なので、こちらも違って当然。
全体として、矛盾は無いはずだよ。
>>329 ただ、それって、文字あたりのバイト数なんて、些細な問題なんじゃ?
varchar(1000) だって、常に1000文字ではないだろうし、
NULLがあれば、ほぼゼロバイトになるわけで。
文字コードのお話しは難しくてかんわ
実際に1バイト埋めで想定文字数まで埋めまくって 実際に6バイト埋めで想定文字数まで埋めまくって どうなるかやればバイト数の計算が無意味なことに気付くんじゃないの?
>>334 本番運用中にディスク容量不足とかなったら怖いやん
客に土下座とかしたくねーよ
安心なのは想定最大サイズ+α以上の容量を用意しておくことだけど
>>335 UTF8は1-4バイトってなってるね
名前欄20文字としたら80バイトと考えりゃ安心だな
ディスク容量の見積もりしたいのかな みんな言ってるけど、可変長のカラム使う時点で正確に見積もるのは かなり難しいよ 入るデータのサンプルをある程度準備して 突っ込みまくって統計的に 丼勘定するのが一番早いよ toastもあるし 運用してると無駄なタプルとかでるし vacuumのタイミングでトランザクション走ってて 回収出来なかったりとか。autovacuumかも知れないけど。 見積もっても運用上その通り行くとは限らない。
知らないから調べて教えてほしいのかな?
>>321 マニュアルに見積もりの方法が書いてないのは
わざとだろと思える。varchar text xml型以外は何とかなるが
textよりvarcharの方が空間・時間的効率がいいの?
varchar の実体は text と同じだから、むしろ長さチェックする分のオーバーヘッドがある、っていう記述をどこかで見かけた気が…
まあ、長さチェックがあったところで、実態が同じなら(格納の)空間・(検索の)時間効率は一緒な希ガスるあるよ
じゃあ婆ちゃんは何のために居るの? もう使わないでください。将来的には削除されますって張り紙しといてよ
通常はtextでいいけど、primary keyにする項目はvarcharにしとかないと、 ODBC経由のAccessとかで表示するときに不具合でるのな。 その他の項目はtextで充分なんだけど。
SQL の標準() に合わせるためでしょ。
PostgreSQL 9 では、多数同時アクセス時の制御はどうなっていますか? 例えば、あるサーバに PostgreSQL 9 を導入し、そこに 10 台の PC からアクセスするとします。 PC のユーザは、各々 SELECT や INSERT, UPDATE, DELETE を行います。 この時、あるユーザが行った更新が反映されなかったり、削除したレコードを読めてしまったり、 といった問題が発生することはありますか?
>>349 そんなの気にしないといけないようだったら、DBなんかどれも使えないよ。
>350あれば352は無用だったか、、、
>>350-353 ありがとうございます。
勉強不足でした。
ちゃんと整合がとれるようにできているのですね。
今時こんな質問来るとは
356 :
NAME IS NULL :2011/06/22(水) 11:01:37.50 ID:G4ugddjo
何のためのデータベースなんだか・・・
英明な王者の質問です。 そもそもその為に作られたのに、なおその機能を心配しおたずねになるのは、 それこそ会社を安泰にする道です。 おたずねのことは、トランザクション―― 一貫した行動 ――と名付けます。
最初は誰もが初心者
いやいや、初心者というか 明らかにRDBMSのトランザクションの説明をしながら、、 明らかにRDBMSなpostgresをみて、トランザクションという言葉も使わずに、「これ実装されていますか?」 ってな質問をするところに、えも言われぬ矛盾を感じるんだ…
そもそも > この時、あるユーザが行った更新が反映されなかったり、削除したレコードを読めてしまったり、 > といった問題が発生することはありますか? みたいな問題が発生するDBってあるの? そんなことあるなら、それはDBじゃないよね。
トランザクションの概念はデータベースと共に産声をあげたの? 教えて歴史に詳しい人
>>355 フリーソフトなので、どうなっているのか気になったのです。
これでも旧一種試験の合格者なので、排他制御の概念は理解しています。
誰でも受かる低レベルな試験合格したからって 理解してることにはならんよ。
>>362 Linuxをサーバ用途に使えますか? と同じくらいの質問ですよ。
>>362 俺も旧一種持ちだがさすがにそこまでアホな質問はしないわ・・・
気になったとしても、まず自分で調べるけどね
>>358 いや新しい事を始めた奴はその時点で専門家
トランザクションはマスタに対しての更新要求データのことだから、 データベースとのみ関係するものではないけど、 トランザクション制御となると、データベースからではないかな。
>>360 >> この時、あるユーザが行った更新が反映されなかったり、削除したレコードを読めてしまったり、
>> といった問題が発生することはありますか?
>みたいな問題が発生するDBってあるの? そんなことあるなら、それはDBじゃないよね。
あるだろ。
だれか説明してやれ
分離レベルによって、ファントムリードは基本 updateは
マニュアル読めば全て解決
テーブルの継承って未だにPKも外部キーも使えないんだな もうかれこれ5,6年前からまだ実装されないのかと思っているが、この機能は詰んだのかなw
>>372 開発の労力に見合わないってことなんだろうね。
PKも外部キーも無くても、アプリとしては動いちゃう部分だし。
テーブルの継承を使いたい場面は結構あるんだがな モデリングツールが対応してても物理モデルに落とせないんじゃ意味が無い
継承を魔法の言葉と勘違いしてんじゃねーの オブジェクト指向論者の間違った理解だよ
Postgresではパーティショニング=継承を使うことになるし、 「オブジェクトタイプ」のような列があるなら、継承に置き換えられなくも無い。 使おうと思えば使えるケースはそれなりにあるのでは。
IOと負荷分散考えるとテーブルスペース+パーティショニングしないと ならないから大規模な商用案件だったら使うでしょ。 慣れれば簡単だがなんで俺がこんなことしないといかんの? と思う糞実装方法ですが・・・
378 :
sage :2011/06/26(日) 10:59:11.56 ID:lJOfLRBH
PL/Javaって使っている人いますか? PL/pgSQLに比べて実行速度とかどうなんでしょう?
自分で試してから聞けよ屑
今、RubyからPostgreSQLにつなごうとすると、 どの拡張モジュールを使うのが定石 ? 主に将来性という面で。 今、ruby-postgresを使っているんだけど、 更新が2006年からされていないし......... ruby-DBIをつかうべきなのかなぁ。
Ruby界隈はよくわからんが、ruby-pgというものはメンテが続いているようだ。
>>379 先人の経験談をちょっと聞いてみるってのがそんなに悪いこと?
何も努力しない教えて君は無視されるものだよ
まあそりゃそうだな
基本的に一から十まで聞こうなんてのは虫が良すぎる 金貰ってるサポートじゃないんだから受ける方の身になって考えろ でも中にはうまく聞き出すことが出来る人もいる 聞き方も工夫が足りない すぐに言い返しちゃう辺りも我慢が足りない もしかしたら情報を持っている人がまだ見てないだけかもしれない
実行速度とかは、データとかマシンとかに依存すること多いから、
結局自分で試すしかないと思う ... って
>>378 は言いたいんちゃうか?
教えてあげたら、いいじゃん
じゃあ見積もりの仕方教えて 糞サイトの教える気のないURLいらないからwww
>>386 「データとかマシンとかに依存する」ような比較なんかな。
Java使うつもり無いのでやる気は無いが、PL/pgSQLとの速度差が有意なものであるならもっとそのアピールがなされているようには思うね。
さすが2chである。 生産性のかけらもないw ゴミはいくら集まってもゴミだわ
そうですね!先輩!
ゴミも今では資源
場所や形を変えてもゴミはゴミ(放射性廃棄物)
ヘドロから肉を作ることができる世の中だというのに
放射性廃棄物はゴミではない。 処理の方法も確立されてない、やっかいなもの。
397 :
NAME IS NULL :2011/07/03(日) 08:35:03.37 ID:KjioPXpn
それって態度の大きい教えてくんと同じじゃないか!
398 :
NAME 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を書けばいいでしょうか? よろしくお願いします。
INSERT INTO table1 VALUES (ARRAY[get_byte(decode('FFFFFFFF', 'hex'),0), get_byte(decode('FFFFFFFF', 'hex'),0)]; こんな感じ?
あ、FFFF・・・じゃなくてAAAA・・・か 0x取っちゃまずかったかな?
ああこれbyteaを長さ分intに変換しないとならんか
いい加減 range between がちゃんと動くようにしてくれ
こんなとこで文句言ってないで 自分で実装してみたらどうだ? お前さんが使ってるのはオープンソースだぞ?
いや マニュアル上できるって書いてて やってないから
405 :
NAME IS NULL :2011/07/05(火) 20:45:23.16 ID:6j9mrdxt
結論:資料の豊富なMySQLを使うべき
いつからオープンソースがマニュアルの記述を意味するようになったんだ? ソース読めよ
407 :
NAME IS NULL :2011/07/05(火) 22:20:35.89 ID:92Awo2ly
数字の入ったテーブルどうし(行数は同じに揃えてある)の各行を掛け算して、 ひとつのテーブルを得たいのだが、そんなことって1クエリだけでできる?
>>409 説明不足で何がやりたいのか分からない。いくらなんでも
CREATE TABLE multi AS SELECT t.i * s.j AS k FROM t, s;
じゃないでしょ?
たぶん rownum 的な考え方なんだろうなぁ。
各行がそれぞれ相関があるなら select table_a.value * table_b.value as result from table_a left join table_b on table_a.hoge = table_b.fuga; じゃないの
いい加減 plpgsqlでの関数定義 がちゃんと動くようにしてくれ
PostgreSQL9.0.4で WARNING: there is already a transaction in progress ってログに書き込みがずーっと続くんだけど、なんでだろ。 MovableTypeの為に入れてるDBD:Pgかなぁ?
beginしといてcommitしてないタコプラグインがいるとかじゃねーの?
416 :
414 :2011/07/13(水) 21:48:30.84 ID:???
>>415 サンクス。
つか、MT5でPostgreSQLのサポート対象外になってんのに気付かずにPostgreSQL使ってる時点でもう知らん。
俺の管理してるサーバーじゃねーし。
Perlのバージョン落とすなり何なりで対応してくれや。
んなのこっちに投げるなよな。
ふぅー
418 :
NAME IS NULL :2011/07/19(火) 15:19:05.69 ID:esCP6IX8
ユーザー作成する時にNo file suchになるんですけど、
パス通ってないんだろ /usr/local/pgsql/bin/createuser ってフルで入れて御覧
420 :
NAME IS NULL :2011/07/20(水) 05:41:08.97 ID:TRRE0hmK
>>419 No such file or directory っていう表示がでます。
>>420 ユーザの作成前にPostgresのインストールが必要だぞ。
何を使って、どこにインストールした?
全文検索エンジン「Ludia」はすでに死んだのですか?
>>420 postgresユーザでやれば?
>>419 ソースからのインストール前提みたいな空気がイヤ。
>>424 ソースから入れたんじゃ無けりゃ、大抵はパス通ってるとこに
入ってるんじゃないの?/usr/binとか
そう思ってあえて書いてないわけだが
むか〜し のPostgreSQL-CE 7.4 Silver っての持ってんだけど、 OSS-DB の GOLDが受験できるみたいですね。 皆さんはどうするんですか?
427 :
NAME IS NULL :2011/07/27(水) 00:57:35.25 ID:zdIJsTw6
Ubuntuの端末でインストールしました。
>>427 インストールできてないんじゃない?
まずユーザを作ろうとするまでに実行した操作手順や入力したコマンドを教えて
429 :
NAME 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"? こんなエラーが発生しました ご回答お願いします。
インストールしたら、initdbして、pg_ctl start して createuser して createdb しないとね。 どっから説明したもんだか・・・
まあとにかく、オプションはヘルプ(--help)見てもらうとして postgresユーザーが書き込めるディレクトリ決めて initdb --pgdata=そのディレクトリ --encoding=UTF-8 --no-locale そのディレクトリの下のpostgres.confを書き替えて pg_ctl --pgdata そのディレクトリ start してからcreatedbしてごらん
>>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:
などというエラーにはならなくなるはず
createuser で Shall the new user be allowed to create databases? (y/n) y として作成し あとからデータベースを作成できなくするには どうすればいいのですか?
ALTER USER username NOCREATEDB とかかな
あー、NOSUPERUSER も入れないと何でもできちゃうかな
438 :
NAME 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] どうすればいいですか? ご回答お願いします。
>>438 ひとつ言い忘れました。エラーメッセージが分かっていれば、
それで検索すると原因と対策がすぐに見つかる事が多いです。
「Error: The cluster is owned by user id」でググって
4番目が上記ページでした。
ググるという言葉があるがGoogle以外はダメ検索エンジンなのですか。 それとも検索することをググるで代表させているだけなのですか。
>>438 postgresというユーザを、自分で削除した?
消してしまったのだとしたら、とりあえず
sudo useradd -u 110 postgres
とすると再作成できるはず
>>441 >それとも検索することをググるで代表させているだけなのですか。
こっちが正解
こんなんに任せてヤマダ電機だいじょうぶなん
PostgreSQL関連の書籍がすくなくね。MySQLに圧倒されている。
postgresはオワコン
馬鹿には使えないからね
はんぱなく速くなったからどうやら某DB会社がmysqlを 表に出して、情報操作してるらしい。 140倍速くなったらしいしw
まじか うそくせー つかInnoDBもういらない ポスグレのほうがいいと思うんだ
449 :
NAME IS NULL :2011/08/04(木) 00:30:38.48 ID:wLTN6z0J
今まで悪い検索プランが選ばれていたクエリで、適切なプランが選ばれるようになっただけの気がする。 数百万件のデータの結合なら、ちょっと失敗すれば検索時間は極端に遅くなってしまう。
はげしく同意
今までが悪すぎたって感じか
結合の場合はアルゴリズムの改良が大きい そして適切にそのアルゴリズムを採用するオプティマイザーの改良のたまものだろ
クエリでどのインデックスを使用するか明示的に指定できるRDBMSってあるの?
これでもう mysqlに速度で負けてるってとこはないの?
>>454 Oracleはヒント句っていうのがあって、使用するインデックスやアルゴリズムを指定できる。
サンクス カメラにもAFとMFがあるように手動で操作できるのはいいよね。 RDBMSの思想からは反するんだろうけどさ。
>>453 joinなんてそうそう画期的な新しいアルゴリズムが出てくるもんじゃないだろ。
もし新しいアルゴリズムで140倍も速くなったんだとしたらB木並の大発明だわ。
>>450 だね。LIKEで統計情報の扱いが変更されたあたりの影響な気がする。
デフォルトのパラメータ設定が改善された、とは言えるんだけど、例としては微妙だな。
>>455 8.4くらいから、PostgreSQLのほうがMySQLよりも速いよ。
特に、CPUコア数が増えたときの伸びが段違いに良い。
抜いた抜かれたを繰り返してはいるけど いま最新版同士だと多コアの伸びはPostgreSQLがリード。 でもOracleと比べるとどんぐりの背比べなのが悲しい
Oracleはそんなに違うのか...
値段が・・・
>>460 いい報告 どうもです。
でもIT ニュースでは不思議にmysqlしかないんだよな。
なんで?
>>463 わはは
でも今は11gR2が無料でダウンロード出来るよ。
CentOS5.6に普通に入った。
やっぱOracleの方がまだ速いんですか。
>>464 >でも今は11gR2が無料でダウンロード出来るよ。
>CentOS5.6に普通に入った。
>やっぱOracleの方がまだ速いんですか。
無償なんだから自分で試そうとは思わないのかね?
俺が作っているぐらいの規模だと機能・性能ともにどちらでも十分。
でもとらぶったときにお客に言い訳するには Oracle のブランドが必要。
客騙しておいていい気なもんだな
普通の客ならOracle選ぶだろ
まあお客側の担当もトラブルを上層部に報告するには
Oracle のブランドが必要だからな。
>>466 は、単なる素人。
上司騙しておいていい気なもんだな
そんなことは客先の担当者に言ってくれ。
仕事取られまいと必死な奴がだいぶ前からスレに張り付いてる。
そうだったのかw
相変わらず生産性のないスレで笑わしてもらった
クソも食えば栄養になる
営業上インパクトある数字が必要って解ってるから140倍みたいな数字を出してるんでしょ 技術者はベンチマーク取るからそういう数字に誤差やカラクリがあるって解るけど 導入時の資料作成には(場合によっては)140倍速いですってのがあると売り込みやすい
石井さんが書いてたらなんでも信用するのかお前は
サポートを生業にしてるからそりゃ宣伝するわな。 ほかに比べて料金高すぎだがなw
石井さんだから書いてるんじゃねむしろ 採用されるためにはハッタリも必要ってのあるだろうし
なにがいいたいんでちゅか〜
これがおまいらのメディアレテラシーか
これがおまいらのメディアレテラシーか
石井さんはポスグレ厨ですからねw (悪口じゃないよ) 改修され続けてるって事を言いたかったんだろうね。 pgpoolも本体に入れちゃえばいいのに。
200万レコードの中から下手な検索の場合には数万件がヒットするのでSQL文でLIMIT 100と付けています。 しかし、生のヒットした数が知りたい場合も多く、その場合、 SELECT count(*) FROM でLIMITなしでもう一度クエリーしないといけないでしょうか。
そうれす
何件あるのかわからんならしかたないわな
そんなあなたに count(*) OVER() 。
count(*) over()はリミット前の件数か。φ(..)
2つのいずれかのカラムに検索文字列があるかどうかを知りたいとき SELECT * FROM table WHERE col1+col2 LIKE '%string%'; col1とcol2を結合するにはどのような演算子を使えばいいのですか
>>492 SELECT * FROM table WHERE col1 LIKE '%string%' or col2 LIKE '%string%';
ちなみに結合は || 。これが標準のはずなんだがな……。
>>492 >2つのいずれかのカラムに検索文字列があるかどうかを知りたいとき
>SELECT * FROM table WHERE col1+col2 LIKE '%string%';
col1 = 'abcs', col2 = 'tringdef' とかもヒットしちゃうけどいいの?
>>495 それでもokです。
>>493 下記でうまくいきました。thx!
SELECT * FROM table WHERE col1 LIKE '%string%' or col2 LIKE '%string%';
>>494 下記は何もヒットが出なくなりました。??
SELECT * FROM table WHERE col1||col2 LIKE '%string%';
>>496 ||の結合は、col1 = 'abcs', col2 = 'tringdef'のとき
'abcstringdef' が含まれるものを検索になるけど
そういうデータはあるの?
ありません。 しかし、なぜそういうことに。
>>498 col1とcol2のどちらかがnullだったんじゃないの?
元の質問の結合って文字列の連結の話じゃないの? 文章もそうだし、+ 使ってるからそう見えるけど。 文字列の連結は、標準SQLだと ||
文字列連結する時nullの可能性あるならCOALESCEあたりでnullをブランクに置き換えないと全部nullが返る
そんなあなたに concat() @9.1
会社の蔵書検索ページを作りたいのですが 書名(title)、出版社(publisher)、著者(auther)、ISBN番号(isbn)で入力欄を作る予定です。 検索時に、どの入力欄がいくつが埋まるのかが検索毎に変わります。 そのような場合のSELECT文の作り方がわかりません。 WEHRE title LIKE '%$1%' && .... ですが、書名が空白の場合もあります。 入力に応じて、SELECT文をどのように作ったらいいのでしょうか。
フリーソフトを使った方が幸せになれるw
506 :
503 :2011/08/12(金) 15:15:49.97 ID:???
日本語が下手なので、質問し直し。 データベースには、書名、出版社、著者、ISBN番号はいずれもデータが入っている。 検索ページはWEBページ上に作る。TEXT入力欄を4箇所配置する。 検索者は、上記4項のうち、書名もしくは出版社等、分かっているものしか入力できないので、どの項目に検索単語が入力されているかは、検索毎に変わる。 入力のある・なしの組み合わせは2の4乗になる。 このような場合に、SELECT文は、どう書き下すように作るのでしょうか。 全項目が埋まっていれば、アンドを使って簡単に書けるのですが。。。
お前馬鹿だろ>
>>503 こんな馬鹿な質問するようじゃ、そもそも基礎が全く無い
まず本なりセミナーなりで一から勉強しろ
じゃないと下らない質問繰り返して赤っ恥をかき続けるだけで終わるぞ
508 :
503 :2011/08/12(金) 15:35:22.43 ID:???
なんか解決しました。 TEXT欄が空白(NULL)の場合でも、空白でない場合でも、なんでもいいからandで繋げれば良かっただけです。 title like '%%' and publisher like '%%' and .... ←カラムが空白の場合 単純に並べるだけでした。
こういうSQLで検索が糞遅いシステムができ上がるんだな。
ねじれてないか。
ばかばっかだなこのスレ。
画面から入力されたデータを確認しないのかい? なんか怖いんだけど。 会社名に数字が入ったりしてたら? ISBNに全角が入ったりしてたら?
>>513 >画面から入力されたデータを確認しないのかい?
これは重要なことだけど...
>会社名に数字が入ったりしてたら?
>ISBNに全角が入ったりしてたら?
これらはヒットしないだけで問題ないだろ。
むしろ SQL インジェクション等を心配すべき。
>会社名に数字が入ったりしてたら? >ISBNに全角が入ったりしてたら? は >画面から入力されたデータを確認しないのかい? の部分集合じゃないのか?
入れてはいけないデータは入れてはいけない。 単純だけど後で楽するよ。
以下の環境で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をうまく使えるようにする方法があれば教えてください。
プログラム側で必要な検索条件だけでSQL作れよ なんでぜんぶSQLで吸収しようとするんだ
WHERE ($1 IS NULL OR title LIKE '%' || $1 || '%') とかやると けっこういい感じに動いてくれたりもするけどね。
ちゃんとチェックしてるもんね
PostgreSQLで文字をエスケープするpg_escape_string() はPHPにあるけれど、perlでも同等のものはありますか。
>>519 >WHERE ($1 IS NULL OR title LIKE '%' || $1 || '%')
これって$1が空文字列の時に展開されると
WHERE ( IS NULL OR title LIKE '%'%')
ってならないの??
>>522 空文字列=''
だから、いうなれば
WHERE ('' IS NULL OR title LIKE '%' || '' || '%')
ってなるよ?
プログラム側で、SQLを組み立てたほうがいいんじゃないの if textbox1.text = "" then else sql = sql & " 書名 = '" & textbox1.text & "'" end if などのように。
あんな下らない質問を相手にするお前らに呆れる
そんなくだらない発言をするお前に呆れる
>>526 そんなくだらない発言をするお前に呆れる
餓鬼は放置で
くだらない質問でも、答えてあげたら。 出し惜しみするほどのものじゃないし。
スレは荒れるし本人のためにもなりません
前、ここで質問したことあるけど、 結局、知らないことは、答えられない連中だしな。
>>523 なるほど。シングルクオートが自動的に付加されるってわけですか。
ちょっと違和感あるな
>>531 >結局、知らないことは、答えられない連中だしな。
そりゃ当たり前だと思うが。
知らん奴らの適当な答えでも欲しいのか?
豪語するわりには、たいして知らないってことだろ。
誰が豪語してたの?
オーストリア人
墺と豪を間違えてないか?
気にしないw
Win x86-64のOne click installerて落とせる? なんか試用版とかに飛ばされるんだけど zip版は落とせるけどインストールの解説すらないし
543 :
NAME 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 ユーザー共に駄目みたいです。 これを解決する方法はありませんか? 所有者変更、パーミッション変更した後も同様のメッセージが出ます。
>>543 記載内容が全て正しいように見えません。
環境、エラー内容、実際にやったことなど、きちんと報告してください。
そもそもDBが読み込めなくなったってどういうことですか?
545 :
NAME IS NULL :2011/09/07(水) 02:01:34.99 ID:ob/8JfxO
>>544 有難う御座います。
サイトがクラッシュし、エラーをチェックしたところ、
php のほうに、エラーでDBの呼び出し失敗の記述があり、アパッチ再起動とかも色々試したのですが、上記手順も含めて解決できなかったのです。
もう少し詳しい状況を確認してからまた書き込みます。
ハッキングとかで書き換えられたとかの可能性もあるんでしょうか。
情報漏えいとか怖いな
>>545 とりえあず鯖止めたら? rootkit入ってたらもう手遅れに近い。
多分ご本人も状況を把握できてない。 断片情報で一々レスしてると、却って混乱に拍車をかけるだけかも。 状況の整理が出来るまで待った方がよろしいかと。
情報漏洩を心配するやつが2chで解決策を求めようとするか?
バックアップを取っていなかったということなんだろね。 みなさんは、 バックアップを自動実行するツールは何をつかってますか?
改ざん検知のソフトくらい入れろよ屑。 切り分けできない素人並みのスキルw
>>551 改ざんされてるかもしれない状況で改ざん検知のソフトを入れると、問題の切り分けが可能になるの?
>>552 事前に入れとけって話だろ
後の祭りだけど、後学のためにはなる
まあ実際は単に設定ミスのトラブルなんだろうけど 見当違いの対策をしてわけがわからなくなってるとこだろうな
556 :
NAME IS NULL :2011/09/10(土) 03:27:58.62 ID:STaf8KKW
起きてしまったトラブルに対して、なんでアレやってなかったの?なんていいだすやつはいらんだろ。 解決した後ならいいが。
連レスすまんが、
>>551 は今から改ざん検知のソフトを入れることで切り分けができるって書いてんだろ。
>>553 みたいに裏を読む必要はないわ。自演かと思う。
>>557-558 無理やり誤解して貶めて叩いても、お前が馬鹿にしか見えないんだが。
>>553 は裏読みでも何でもない、ごく普通の解釈だろ。
お前みたいに無駄に難癖つけても、それこそ何の助けにもならないぞ。
お前は一体何故そんなに必死なの?
次回同じ失敗を繰り返すような ほんものの馬鹿になってほしくないから 言ってあげたのに・・・ ほんとここの連中はくずですねえ(笑) どうせ起動しない理由も自分自身が原因の くだらない理由なんでしょ
>>561 は何故ここまで上から目線になろうと必死なのか
ここ以外で上から目線になれる機会が無いんだろ
内容の薄いスレですね
「薄い」とかやめろよ
>>565 そんな言い方よせよ。
>>564 は「内容の薄いスレですね。これからはボクが充実したスレにします」って言ってるんだから。
教えてもらう内容の薄いスレと言ってるのだ。
煽ってばかりで内容が薄いですよね。
おまえだろうが
DBの話なのにアパッチ再起動とかこいつの行動意味わかんないわぁ。DB起動できなくなったらDB単体から調査していけよなぁ。普通はログ出力してるはずなのにそれすら報告しないとかないわぁ・・・客だったら顔も見たくないわぁ。
某所のサーバ管理を手伝っているけど、
そこの管理者がよく
>>543 >>545 みたいな
問い合わせを送ってくるから、半分キレながらエスパーしてる。
MLの怖いオジサン達の気持ちが分かったわ。
内容無くてごめんな。
日本語が通じない客は困るんだよ。
小学生に聞くつもりでYESorNOの回答リスト
作ったことがあるが、
>>543 なんて大きな幼稚園児だよ。
逆にこういうレベルが居るからお前等に仕事があるんじゃね
薄いという言葉に敏感なやつがいるな
まあいろいろあるけど、何かが起きた時にまず 自分がやったことを疑わないで、他のせいにしようとするから 何も調べてないうちからウイルス等を疑うようになるんだな。
577 :
NAME IS NULL :2011/09/11(日) 23:58:38.47 ID:PE57i2Y8
9.1はもうすぐですか。 レプリケーション設定などが簡単になるようで、便利ですね。 レプリの設定は苦労したからなぁ。
580 :
NAME IS NULL :2011/09/12(月) 12:08:51.04 ID:8E9Cw67j
苦労って程じゃない
Linux版は比較的簡単だけど、 Win版のレプリはLinux版と違うからね。 なにせ情報が少ないし。 9.1 はツールなどで簡単設定できればいいけど。
SQLを出して、タイムアウトで失敗するということはないですか?
584 :
NAME IS NULL :2011/09/22(木) 04:05:25.03 ID:LaI+LSkf
はいダウト、こいつにかまうな
9.1、リリースされたんだね
PostgreSQL 9.1 の新機能を読んだけど理解できたのは10%未満。
9.1 のレプリケーション、少しツールなどが追加になっているようだけど、 簡単設定というほど、簡単になるわけじゃないみたいだね。
どうなれば簡単なんだよw pgpooladminみたいな中途半端な管理ツールを postgresqlでも作れと?
中途半端なのじゃなくて完璧なの作れよ
今のまんまでも馬鹿よけになっていいじゃない。
ウィザード形式みたいな簡単設定があるといいね
あとになって変更できましぇーん とかいってここに泣きつくガキが出てくるからいや
PostgreSQLは商用データベース並と言われるのはまだ劣る部分があるということ?
とりあえず性能は負けてる
深く突っ込まない大人の優しさも大事だよ
こいつがどこを指してるのか。。 [options go here]なら、ここにオプション書くんだよっていう目印
本来は「here」にリンク張ってアンカーに飛ばしたかったんじゃないの?
一個目のconfigureにオプションつけないように書いたんだろ
601 :
596 :2011/10/07(金) 00:12:52.80 ID:???
マニュアルどおりにインストールしても、 /path/to/source/tree/configureは元々ないし、作成されもしないですよね、 本家のマニュアルにも書いてあるし
[options go here] も /path/to/source/tree/ も、そのものを入力するわけではないぞ? 各自の環境に合わせろということだ。
ありがちだ
/ソースを/展開した/場所の/パス/configure (←必要ならオプションはここで指定) とでもすれば分かってもらえたか。 というか、ユーザが置き換えるべきところはそのように表示してほしいよね。 あと、日本語訳は原文にある VPATH ビルド云々の説明が ごっそり抜けているので誤解を招きそう。
/path/to という文化に慣れてなかったというオチか。 最初からそう書いておいてくれれば話は早かったのに、「←こいつ」って。
.configureだろ
./configure です
MySQL の日本語マニュアルだったか、 「コンフィギャ」と書かれていて、 のけぞったことがある。
なぜ?
独創的な訳だと思ったギャ
オプションは何付けてる?xmlぐらいか?
この前ossdb silver受けて合格はしたんだが・・・ あの問題が解けたところでPostgreSQL専門 DBAとしてはあまり意味ないよな。 それは置いといて9.1で新しくバックアップコマンド 追加されたのはいいけど差分orアーカイブのオンラインバックアップも PostgreSQLで出来るように作って欲しいね。 ツールをいろんなところが作れるのはいいが、 バックアップは本家で管理してもらえるほうが・・・ねぇpg_rmanさん・・・
>>612 > 新しくバックアップコマンド
ほほぅ。
>>612 Silver は開発者、DBAならGold目指せ
>>612 > PostgreSQL専門
> DBA
PostgreSQLで仕事になるのですか?
dumpallすると12GB分(24万レコード)のデータベースなのですが検索で時間がかかるので、 メインメモリを12GB増設して、/usr/local/pgsql/data をメモリ上で 動かすことはLinux(Ubuntu)でできるのでしょうか?
できるかもだけど、その程度で遅くなるのは作り方が間違ってるか 対象が広すぎるとしか・・・
1レコードあたりのサイズがなんか大きい気がするけど、その検索はlikeだったりするの?
>>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分ぐらいかかっている。
>>616 圧縮しないでdumpallしたら12GBになったとしても、インデックスなどを考慮すると/usr/local/pgsql/dataは12GB以上の容量があるはず。duコマンドなどでフォルダのデータ量を見ればすぐに分かる。
サーバが停止したときに、メモリの内容が消えてもよければ、tmpfs上にデータフォルダを作ってもいい。
十分なメモリがあれば、必要なデータはメモリ上にキャッシュされるはずだから、よほど更新が多いとかじゃなければ、あえてそんなことをする必要はないとおもうけど。
>>619 explainで検索プランを見ると、どうなってるの?
>>620 > インデックス
「対象の列が○○バイト以上なのでインデックスが作れません。」のようなメッセージが出てインデックスを作れてません。
explain ?
>>621 tsvectorの転置インデックスが作れていないのなら、それが低速になっている主な原因の一つだろうだから、
まずインデックスを作れない問題を解決したほうがいい気がするよ。
レンジパーティション テーブルスペース しないとキャッシュに乗るわけなかった
インデックス作成対象のtextが長いためか ERROR: index row requires ○○ bytes, maximum size is 8191 のエラーが出てインデックスが作成できません。 これを回避する方法はあるのでしょうか?
627 :
626 :2011/10/20(木) 16:58:14.67 ID:???
追記です。
SQLは
>>619 の内容なので
検索をハッシュ値で代替するのはできないのではと思っています。
>>626 reportテーブルのcontentsのような長いテキストデータに対して、
b-treeインデックスを作ろうとすると、そういうエラーがでるようだけど、
どういう内容のコマンドを入力して、インデックスを作成しようとしたの?
CREATE INDEX ○○ ON report USING gin(to_tsvector('japanese', contents));
として、GINのインデックスを作成する必要があるよ。
ちがった 必要なインデックスは、 CREATE INDEX ○○ ON report USING gin(to_tsvector('japanese', keywords)); のほうだった。
>>629 ありがとうございます。
無事にインデックスが作れました。
クエリーの反応時間は、すこし向上したような気がします。
8分→7分?
インデックス用の列を別に用意したら、応答が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);
>>631 explain analyze "619のSQL文";
を実行すると、検索の詳しい処理手順や、時間がかかっている部分が分かるのだけど…
わりと時間がかかっていることから推察すると、keywordsに該当するreport行自体がとても多いのだろうから、これ以上の高速化は難しいのかもしれない。
日本語のtsvector化に何のライブラリを使っているか知らないけど、
to_tsvector('japanese',contents)
あたりもあらかじめ変換しておくと、若干のスピードアップにはなるかも。
それ以上は、データベースをメモリに載せるとか、奇抜な手を使うくらいしか思いつかない。
>>632 > データベースをメモリに載せるとか、奇抜な手を使うくらいしか思いつかない。
>>616 うん。
9.1 Win版 pgAdminVで、バックアップしたファイルをリストアしようとすると エラーになります。 対処方法不明です。 pg_restore: [アーカイバ] 入力ファイルが有効なアーカイブではないようです プロセスは、1 のリターンコードを返しました。 対処方法がなければ、バージョンアップは要注意かな。
ふーん。とだけお返しします。 自分でバックアップコマンド打ってリストアした結果くらい 書いてくれないとねーーー(棒
>>634 あ、それ俺も最初なんで?って思ったけど、バックアップの時に、
形式選ぶ選択肢があったと思う。
デフォルトだと何も選択していない状態だから、何か選べばいいよ。
pg_restoreはテキスト形式のファイルは元に戻せません。 テキスト出力はsqlファイルとして実行して戻し アーカイブ方式はpg_restoreコマンドを使用しないと戻せません。 という夢を見た
俺はマニュアルを読まないお前のサポートじゃないんだ。
pgAdminの何を操作したのか知らないがこいつは9.1に対応してやがるのか?
まぁ、pg_dumpなんざバージョンアップ時に必至のコマンドだから
出来ないなんてことがあってはまずい。
ほぼ100%コマンドと動作を調査して使ってないと思われるので
下を読んで、1か月ROMってください
ttp://www.postgresql.jp/document/pg904doc/html/app-pgrestore.html *******************************************
pg_restoreは、pg_dumpによってアーカイブされた
平文形式以外のアーカイブファイルを使って
*******************************************
SQL条件で抽出されたレコードのエクスポートファイル出力とインポートって、 何かコマンドありますか? プログラムで作るしかないのかな?
マニュアル読んだ後ググれカス
よくわからんが \o のことかい
>>642 copy で可能なんですね。
ありがとう。
一晩かけて考えたり調べたりして、完全に詰まったので質問させてください 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成功まで、どのように進めていけばいいのかわかりません お教えいただけると助かります
>>644 LANG=C
してもう一度例外メッセージが読めるかどうか試してみては
肝心なところがモザイクっていうね。
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ユーザのパスワードの認証・・・?少しは進展したのでしょうか
パスワードの設定してないでしょ ローカルで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のパスワードも設定されていると勘違いしていました
結果は単純なミスでしたが、昨晩から今まで色々なことを調べながら設定してきて少しは知識も増えたと感じています
ご指摘及び情報ありがとうございました
これからも精進していきたいと思います
wwwワロタ
すごく失礼だけど、この程度(LANG=C)でPostgreに挑むという
>>644 のチャレンジャー精神にあきれた
俺も「???????????」でハマったから笑えませんわ。 ところで、最近のバージョンでも 日本語を使うならロケール無効で initdb した方が無難なの? 最近は Vine の起動スクリプトも --no-locale しなくなったみたいだけど もう気にしなくていいのかな。
>>651 /usr/local/pgsql/bin/initdb --no-locale --encoding=utf8 -D /usr/local/pgsql/data
>>650 挑むとか、そんな気持ちで向き合わないといけないものかね。
割とすんなりlc_messagesに至ったり、pg_hba.confを編集したりと、ある程度の素養はある人だと思うよ。
なぜ自分で思いつけなかったのかが不思議なぐらいに。
単にマニュアルすら読まない馬鹿ってことだろ。
マニュアル読めって言うアドバイスなら、 小学生の自分でもできるよ。
マニュアルすら読めない馬鹿は小学生以下なわけだが
マニュアル読めって言うアドバイスしかしないなら、 ゴミと同じだな。
そうだな。 日本の生活について問われて「民法嫁」というのと同じだな。
マニュアル指摘されたくらいで過剰反応しすぎだよな。 常識なのに。
ふーん 民法は日本の生活のマニュアルなんですね
意味がないという意味で同じ。 人生相談に「常識」で答えるほど無意味なものはない。
馬鹿が腹立てるとこんなもんだよなw
我輩の辞書には、 『マニュアルを嫁』しかない。
しかも、五時。
>>663 おまえ、c言語のマニュアル読んでカーネル作れるか?
原田大明神が pgsql_fdwのパッチを送ってるね。 結局自分で作っちゃったんだ。 早く使いたい
小学生程度の質問が人生相談だそうです
我輩の辞書には、 『マニュアルを嫁』はあるが、 『マニュアルを読む』はない。
oss-db gold も合格した。簡単すぎてこの資格意味ないね。 もっと掘り下げて記述式の問題にしないと実運用できない。 プラチナ作って、さらに上のマスターとかいうレベルがあってもいいくらいだよ。 そもそもPostgreSQL単体で稼働してるとこなんてないっつーのが oracle様とは違うとこだよなwww
oracleの方が金になるからね
おまいひょっとしてやればできるんじゃまいか
9.0のpgAdminV、バックアップするときクラッシュする。 9.1に切り替えた。
674 :
NAME IS NULL :2011/11/05(土) 21:07:47.31 ID:wv2eL8wC
9.1でDBアプリを作ろうとしているのですが 5クライアントから1つのテーブルに対して頻繁にINSERTがあるDBで さらにそのクライアントから入力した全てのレコードへの参照もある場合 CREATE VIEWを使うべきでしょうか? それともCREATE TEMP TABLEを使うべきでしょうか? 両者ともINSERT中のレコードがあるとロックが発生するのでしょうか?
676 :
NAME IS NULL :2011/11/05(土) 22:00:20.63 ID:wv2eL8wC
>>675 わかりやすく説明していただきありがとうございました!
最近のニュースはありますか?
678 :
NAME 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毎のも表示するにはどうすればいいですか?
>>678 こういうこと?
select rank() over (partition by [gender] order by [point] desc) as [p_rank], name, point from [tbl_point];
>>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];
681 :
NAME IS NULL :2011/11/06(日) 19:33:36.29 ID:4Qd5Dq0Q
>>680 これだとmp_rank, wp_rank毎(フィールド毎)の順位が出ないですね。
>>678 何度も書き込んですまないけど、
最後に
order by point desc
って付けないと、どういう順序で表示されるかは保証されないよ。
683 :
NAME 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]; ができればいいんですが...
>>681 wp_rank(フィールド毎)ってのは、何の値で分割したグループのこと?
>>683 gender=1の場合のwp_rankと、
gender=2の場合のmp_rankは、それそれぞれどうなってほしいの?
686 :
NAME IS NULL :2011/11/06(日) 19:40:28.91 ID:4Qd5Dq0Q
説明不足ですいません。 p_rankが全体の順位 m_rankがgender=1グループの順位 w_rankがgender=2グループの順位
687 :
NAME IS NULL :2011/11/06(日) 19:43:40.22 ID:4Qd5Dq0Q
gender=1の場合のwp_rankと、 gender=2の場合のmp_rankは、 できればNullになってほしいのですが...
>>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;
689 :
NAME IS NULL :2011/11/06(日) 20:09:36.93 ID:4Qd5Dq0Q
相関サブクエリ?の結果を使ってCASEで分岐した結果に別名付けているのですか? できました、ありがとうございました!
690 :
NAME IS NULL :2011/11/11(金) 19:12:42.13 ID:FA3LJ5nm
phpのpearにPEAR::DBというのがありますが、これを介してPostgreSQLに接続する利点、 直接pg_connectする場合に比べてのメリットはなんですか?
抽象レイヤーをはさむという利点。 PDO実装以降のPHPならPearDBを使うメリットはないと思ってる
692 :
NAME 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) とくに設定無し
693 :
692 :2011/11/20(日) 16:40:07.73 ID:???
解決しました。 正確な理由は不明ですが。 インストール直後では service postgresql reload が、効いてなかったのか、 pg_hba.conf の設定が間違っていて、効いていなかっただけなのかよくわかりません。
クライアントのファイアウォールは戻しておいたほうがいいよ
ウィルスソフトのファイアーウォールで 例外にしてあげればいいだけだろ・・・どんだけだよw 俺はpg_ctl reload派だがな。 pg_hbaはリロードで反映されるが間違っているかどうかは ログに出力される。こんなの常識でつ。
何を例外にするの?ufwの話には見えないけど。 pg_ctl reload派だとかいってるのはわがまま、頑固な人におおいね。環境に順応できないというか。
serviceで起動シェル書いたことないな。 普通は絶対パスだろ
おまえら自宅でやるレベルなんだから細かいこと言うなよ
起動シェル使わない人って、やっぱりいつも手動で停止するの?
>>697 何を言ってるかわからない
むしろ絶対パスで書かなくとも/etc/init.d配下を確実に参照してくれるserviceのほうがよくね
>>698 自宅でやるからいろいろ試せるってのは相当なメリットだけどな
service 環境依存。 どういう動作が定義されているかは実行される側のスクリプトによる。 そもそもOSによってこのコマンドが存在しない場合もある。 pg_ctl posgres固有のコマンド。 どの環境でも確実に意図した動作をしてくれるのはpg_ctlだよな。 だけどserviceコマンドでもスクリプトで定義されている動作を ちゃんと分かっているならまぁどっちでもいいわ。 絶対パス云々はコマンドにパスが通ってるかどうかの問題だから関係ないだろ。
703 :
NAME 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;
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以上でてないけど
705 :
NAME IS NULL :2011/11/24(木) 23:22:18.58 ID:Ld9s4TyG
706 :
NAME 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です
>>706 いやもう出てるメッセージそのまんまじゃないのか。
708 :
NAME IS NULL :2011/11/26(土) 13:05:07.00 ID:ydK+kBxB
え、使い方かなにかが悪いわけじゃないの? トランザクションをサポートしてないとは さすがに考えにくかったんだけど
無料セミナーの案内きたお
710 :
NAME 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 );
712 :
NAME IS NULL :2011/11/26(土) 16:15:54.21 ID:ydK+kBxB
714 :
NAME 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;
8.x, 9.xでも機能は増えるから、8系, 9系という情報では足りないよ。
716 :
NAME IS NULL :2011/11/26(土) 18:22:24.31 ID:ydK+kBxB
pgsqlで
最後から任意の件数を問い合わせたいのですが 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
select * from (select time from test order by time desc offset 0 limit 3) order by time;
>>719 実行したのですが無理でした。
ERROR: subquery in FROM must have an alias
HINT: For example, FROM (SELECT ...) [AS] foo.
HINT読もうぜ
select * from (select time from test order by time desc offset 0 limit 3) you_must_read_the_error order by time;
HINT通りなら select * from (select time from test order by time desc offset 0 limit 3) foo order by time; だなw
>>723 fooにテーブル名をいれてみたらいけました。
ありがとうございます。
そしてレスをしていただいた皆様ありがとうございました。
>>725 今やったら動きました。
>>721 のあとのレスだったので
悪い冗談(あなたは the_error を読まなくてはなりません。)かと思ってしまいましたw。
大変失礼しました。ありがとうございました。m( __ __ )m
>fooにテーブル名をいれてみたらいけました。 いや何でもいいんだけどな。 you_must_read_the_error でも foo でもいい。
728 :
NAME IS NULL :2011/12/11(日) 16:12:36.66 ID:2BDdxjrX
729 :
NAME 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だけで書ける方いらっしゃいましたら知恵を貸してください。
select *, (select count(*) from bid_history where bid_history.出品物ID = shuppin.出品物ID) from shuppin
結合してからだとこうかな。 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)
別名つけるの忘れた。。 × 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)
733 :
NAME IS NULL :2011/12/12(月) 19:07:17.12 ID:tvQA515y
>>730-732 思い通りのことができるようになりました。
どうもありがとうございました!
9.1用のtextsearch_jaってどこかにあります?
>>735 ありがとう
いまやってみたら
9.1.2でtextsearch_ja-9.0.0がインストールできた
前はうまくいかなかったんだけど何か間違えてたのかも
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
何か間違などございましたら、
ご指摘をお願いいたします。
>>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系で引数増えた。
同期されないのは、このメッセージが原因ではない。と思う。
他に同期されない原因のメッセージがどこかに出てるはず。
739 :
736 :2011/12/22(木) 14:47:46.56 ID:???
>738 ありがとうございます。 以下を修正して同期が取れるようになりました。 これで運用環境を構築できます。 たぶん、主キーの設定が主要因だと思いますが、 まとめて行ったので全て列挙いたします。 ---- ・idを主キーに設定 ・conninfoにポート番号(port = 5432)を追加 ・conninfoにパスワード追加(password=****)を追加
Windows 64bitには対応していると思いますが、 Windows SBS 2011(Essentials)64bitでは、何か問題ないですか?
SBSの制限以外には無いと思うが
データベース関連のデータファイルって デフラグかけても大丈夫ですか?
うん それがダメなデフラグソフトがあるとしたら、いろんなファイルが壊れるよ
はあ?
>>744 >DB動かしながらやるんじゃないそ
デフラグってどうやってるんだっけ?
>>746 そりゃあデフラグ専用OSを起動して、そこからそれ以外のエリアを
>>747 >専用OS
デフラグの間はサービスはストップ?
ロック中のファイルはデフラグにスルーされるだけだろう DB稼動しながらで何も問題はない
ありがとうございました
pgadminで複数のクエリを実行した時(クエリの実行窓に、複数のSQLを羅列)、 エラーが出ても止まらず次のクエリを実行するって設定はあるでしょうか? psqlで言うところのon_error_stop offの設定なのですが、 pgadminではそれらしきものが見当たらないようでして。。
>>737 これって、serial型の列に対して暗黙的に作られるsequenceの同期も取らないとfailover上手く行かないんじゃないのかな?
データの同期としては十分なんだろうけど、気をつけておきたい。
テーブルスペースに2バイト文字入りのパス使えるようにならんかなぁ テーブル名やフィールド名には使えるのにー replace into もほしいよー
758 :
NAME IS NULL :2012/02/09(木) 19:19:23.78 ID:eR5KPAYs
psqlで insert したときに INSERT 0 1 というのが表示されますが、これはどういう意味ですか。 「1」はたぶんinsertした件数だと思うのですが。
>>760 ありがとうございます。
そのページみると、PostgreSQLのinsert文って、いろんな機能があるんですね。
C#のアプリをOracleからPostgreSQLに変更しているのですが とりあえずPostgreSQL8.4.10というのをWindowsにインストールしました。 C#からはNpgsql.Net というのでつないでみました。 特に問題なく見えたのですが、データを挿入すると「\」が 消えているのを発見しました。これはサーバー側の設定が 何か間違っているのでしょうか?ヒントがあれば教えてくださいませ。
いみふ
今まではミドルウェアが勝手にエスケープしてくれてたんだろ。
>>765 ありがほー
さすが2ちゃんは頼りになる
だってLet'sの人が張り付いてるんだもん☆
「\」がなくなったって? これは盗難、事件だ。
create table するとテーブル名が強制的に小文字にぃぃぃぃ! 前からこんな仕様だったっけ?
大でも小でも、どっちでもいいんじゃねえの? だってSQLだもん☆
普通にテーブル検索に引っかからなくてまいったよ! 大文字小文字区別するなんて、おまけにフィールドまで小文字にしないとだめなんて! もうやってられないよ!
小文字で作った分には大文字小文字関係なく検索できるでしょ …もしかして検索の時には""つけてるとか?
PC-KEIBAのバグが直ったことで、ポスグレの勉強を始めたROM専のヤツも多いだろうな
postgreSQLカンファレンス行ってきました。 盛況盛況やんややんや。 トラックによっては立ち見が出るほどでした。 かっこよかったのは運用テク編のNTT坂本さんかな。 プロジェクトでは現実路線だとしても技術者としては妥協するな だそうです。 質問し忘れたんですけど、 pg_reorg があればもう vacuume full って必要ないんですか? 今日までpg_reorgって知りませんでした。 修行が足りん。
>>779 信じる 信じないの話ですかw
ヴァキュームをする必要なくなる(そのときの弊害がなくなる)
という事は凄い進歩だと思うんだけどなぁ。
VACUUMとVACUUM FULLは全く違うぞ? VACUUM FULLは、HDDのデフラグみたいなもので、毎日やるもんじゃない。 VACUUMは自動バキュームが裏で適当にやってくれる。必要ないわけではないが、弊害もない。 PostgresSQL 9.0 より新しいバージョンでの VACUUM FULL と pg_reorg は似たような動きなので、 排他ロックがかかってしまってもよいなら、VACUUM FULLのほうが余分なことをしないだけ、時間がかからないかもね。
>>780 そらそうよ。信じられるなら使う、信じられないなら使わない。
すごい進歩だと思い、技術者は妥協するなって言葉に感銘をうけたなら試せよ。
>>784 お 恐れ入ります...
clusterなんてコマンドがある事も知りませんでした。
知らないことなんて腐るほどあるんだから気にしたら負け
MacOS X にPostgreSQLをインストールしました。
Satrt Server.appとかStop Server.appとか Restart Server.appとかあって
便利と言えば便利なんですが、起動時に勝手にPostgreSQLが起動するのを
止める方法がわかりません。
PostgreSQLは開発時にのみ使用するので、通常使用する時に起動してほしく
ありません。
MacOS XでPostgreSQLが勝手に起動するのを止める方法を教えて下さい。
なお
http://lets.postgresql.jp/documents/tutorial/macosx/ には書いてませんでした。
MacOS Xって中身はBSDだっけ? もしそうならBSDでの、起動時に自動起動されるものの設定しているとこが あるはずだから、そこをどうにかすればいいんじゃないか?
>>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
みたいなかんじです。
>>791 select current_date - t.mon * interval '1 month' from table1 as t
でした。これはすごい。Postgresqlすてきだ。
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); もし張らなくてもいいというのであれば、理由も教えてください。お願いします。
>>793 張ったほうがいいです。
この場合writingsからbooks、authorsへの参照整合性制約があると思うけど、
RDBMS製品によっては参照整合性制約を宣言した時点でwritingsにインデックスが
暗黙的に張られるものもあります。要するにインデックスがあってあたりまえです。
>>794 ありがとうございます。
MySQLもPostgreSQLも、外部参照制約を指定しただけではインデックスを自動作成*しない*ようです。
しかし入門書を読んでも、中間テーブルを作成する時はカラムにインデックスを張りましょう、と書いてありません。
なので、もしかしたら primary key の場合と同じように、references ... を指定したらインデックスも自動的に作成するのかなと思い、質問しました。
これからは references を使う時は create index も忘れずしようと思います。
ありがとうございました。
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
postgresで、mysqlの「¥G」相当のことはできますか。
800 :
NAME 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との連携がうまくいっていないということは無いと思うのですが・・・
>>800 PostgreSQLのログに何か出力されているかも。
803 :
800 :2012/03/02(金) 21:28:37.66 ID:BzTarHSh
>>801 お恥ずかしい・・・データベースがEUC-JP、txtがUTF-8だったからという理由でした。
失礼しました。
(先に言っておくべきでしたがDB関係は初心者です)
>>802 そうだったのか。ありがとう。まじ感謝する。
PostgreSQLもインデックスを自動的に作ってほしいなー。
806 :
NAME IS NULL :2012/03/08(木) 23:08:21.19 ID:AaYThp7J
2000万件入っているテーブルAに行単位に動作するトリガーが付いています。 このトリガの中身は別テーブルBへのレコード追加処理となります。 で、テーブルAにDELETE文を発行するとレスポンスが返るまでに50秒かかります。 トリガを無効にするとレスポンスは1秒もかかりません。 トリガの中の処理を何も無しにしてもトリガが有効だとレスポンスはまた50秒でした。 この場合、どのような対処が必要でしょうか?
トリガーを直すか外して自力でBへの処理を行う
もっと高性能なPCに買い換える。
>>807 トリガを空にしても遅くなるみたいだから前者は無理だろう
トリガの実行までの速度が件数に依存してるんだろうか。割と予想外
delete文が1件deleteではなくて実は全件だったとか
通常のDELETEとトリガあるときのDELETEの違いを ソースおっかけて調べるとか
試すのが一番かと。
813 :
NAME IS NULL :2012/03/12(月) 08:02:49.84 ID:ExxOdv/p
関数定義読んでも pg_start_backupの処理が何やってるのか明確にわからない わかっている人いたら教えて頂けませんか
814 :
NAME IS NULL :2012/03/16(金) 03:30:07.86 ID:6NdHTG36
9.xにしたら、bytea型に対するLIKE検索ができなくなった
>>813 pg_start_backup以降に更新されたデータは
バックアップされない。直前の更新データは
バックアップされる。
少し前に簡単なテストをしたことがあるのだが、その記憶だけど。
テストしてみて、PITRバックアップのスタートポイントとしてマークする
イメージを持った。
postgreSQLの管理とチューニングで参考本は何ですか?
日本語でおk
>>815 pg_start_backup以降に更新されたデータはバックアップされない。
はちょっと違う。どこまで復旧できるかはむしろ pg_stop_backup で決まる。
pg_stop_backup までにバックアップしたDBデータとアーカイブログを使って、
少なくとも pg_stop_backup 直後の状態までリストアできる。
それ以降は残りのアーカイブログ次第。
>>818 あれ、そうだっけ?
手元にテストしたときの資料がないので、あいまいな記憶で
書いてしまいました。
818が本当ならば、pg_start_backup したときに書かれる
日時(どっかのテキストファイルに記録するよね)って、
何の意味があるんだろ。。。
pg_stop_backupの時点の日時を記録すべきだね。
SSDをデータベースの記録装置にするのは危険ですか?
RAMDISKにデータベース置いてる
823 :
NAME 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て出て起動できなくなるとか。
どっかに詳しい本とかないかなあ。
824 :
NAME 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
826 :
NAME IS NULL :2012/03/22(木) 23:23:34.56 ID:VZAm0Uxy
>>822 なんかアホくさいな
そんなにメモリ剰ってるならメモリをデータ保管場所にできるモードがあればいいのに
メモリが十分にあって、適切に設定してさえあれば今もメモリ上に乗っかるでしょ。
Windows 64bit版を実業務で使っている方いますか? 安定性はどうでしょう? それと、4GBを超えた広大なメモリを使えるのですか?
16GBまで使えたと思う。 RAMDISK使うならMySQLとH2のヒープテーブルほしいよね。
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 のままにするのはどうしたらいいの?
つかserial作ったらツールとか、\dとかで中見てみたらわかる。
restore_commandの戻し元になるファイルは pg_xlogを指定するのでしょうか archive_commanで移動させている先を指定するのでしょうか
835 :
NAME IS NULL :2012/04/11(水) 18:14:02.75 ID:XhFcvq4B
ドットネット用のPostgreSQLのドライバ「Npgsql」ってOLE-DBなのでしょうか。 また、インストール方法を教えていただきたいです。 よろしくお願いします。
スタックビルダでインストールできました。 お騒がせしました。
エンタープライズなんて指向すべきじゃないだろうに。 要求されるモノが違う。逆にコミュニティーに悪い影響が出るだけだろう。 何処も食い扶持に預かろうとして参加してるだけだろう。日本でオープンソースなんて流行らないな。
エンタープライズでは今もこれからもPostgreSQLなんて使うもんじゃないって思ってるんだろうけど、なんで? 俺はもっと気軽に採用したいよ
>>838 要するに食い扶持に預かるための参加が気にくわないのですね?
あなたが嫌儲なのは勝手ですが、オープンソースは商売を敵視していません。
PostgreSQLを採用できる範囲が広がるのはコミュニティにとってもよい話です。
エンタープライズ領域で普及したオープンソースにLinuxがありますが、
そのためにLinuxコミュニティに悪い影響が出たとは聞いたことがありません。
食い扶持狙いの会社が寄贈したコードも問題なくkernelに取り込まれています。
EnterpriseDBっていう会社ができるくらいだから需要はあるよ。 PostgreSQL 9.2の性能改善のほとんどは EnterpriseDB社の社員からのコントリビュートですよ
コンソーシアム作ってアピールしないと参加企業ですら金と人出すの難しいって話じゃないの ITバブルのころは景気のいい企業が金も人も機材も提供してベンチマークやったりしてたけど、今は出せないんだと思うよ 参加企業の売り上げ額だってオープンソース関係が占める割合は(SRA OSS除いて)かなり低いだろうし 金や人を出し易く且つリターンとしてそれなりの結果を得るにはコンソーシアムとして 徒党を組むのが社内的にも社外的にもよかったんじゃないの 参加企業のネームバリューから考えて、それでも徒党を組まないと金も人もだせないんだなと思うと 終わりの始まりのような気もするし
嫌儲 コントリビュート 難しい言葉はやめて、小学生でもわかる簡単な言葉でいこうぜ。
PostgreSQL 7.2で運用しているDBがダンプに失敗するようになってしまいました。 pg_dumpを実行すると、 pg_dump: missing pg_database entry for this database というエラーが出てしまいます。 ただ、DB自体にはpsqlコマンドでアクセス出来て、テーブルの中身も見られます。 しかし、pg_databaseをSELECTしてみると空っぽでした。 おそらく、このテーブルが入っているファイルが壊れたのでは?と思っています。 ダンプが出来ないのでバックアップも行えず困り果てています。 pg_databseが空っぽになってしまった物を復旧させる手段はありませんでしょうか? ネットで調べるとVACUUMしてないで放置していると起きるトラブル、と書かれていましたが 毎日VACUUMも行っていたのですが… どなたかお助けください。
845 :
NAME IS NULL :2012/04/13(金) 21:38:03.04 ID:eXECyuKm
>>844 まずはファイルシステムレベルでデータベースをバックアップして、
vacuumdb -af
してみるとか。
FSMがあふれてたりするんじゃないの?
>>845 さん
アドバイスありがとうございます。
ひとまず、サーバーを停止してファイルレベルでバックアップをとっておきました。
vacuumdb -a -f
と実行してみましたが
pg_databaseが空っぽなのでVACUUMする対象のDATABASEがみつからず
すぐ終了してしまいます。
データベースを指定して接続するとSELECTもINSERTもできるんで
pg_databaseが壊れてるっぽいんですが、修復は不可能なんですかねぇ。
ダンプできないので、どうやって別のDBに動かそうか…
847 :
NAME IS NULL :2012/04/14(土) 00:51:43.46 ID:GW6Af2jI
>>846 -tオプションでテーブルを指定したダンプはできないの?
dblinkやレプリケーションツールを使うとか。
あるいはCOPYコマンドを使ってテーブルの中身をファイルに書き出すなど。
ボスケテ PostgrSQLとPHPでDBを作ってもらってネット経由で使ってたのですが、 ランニングコスト削減のため 社内のパソコンに移行することにしました。DB制作会社の担当は、LinuxとPostgrSQLとPHPの環境用意して全データをサーバーからFTPダウンロードしたら同じように使えるといわれて途中までやったのですが、もしや、素人ができるものではないですか?
849 :
NAME IS NULL :2012/04/14(土) 01:50:40.61 ID:GW6Af2jI
>>848 PostgreSQLやPHPの入門書で環境構築やバックアップの章などを拾い読みなどして、やっていることの意味が理解できる程度の人なら素人でもできると思う。
850 :
848 :2012/04/14(土) 02:00:18.31 ID:???
>>849 ありがとうございます!
各入門書を買って設定から始めているのだが、本は新規でDB作る前提だからなのか、なかなか先に進まない。設定の段階でつまずきまくりです。全体を流し読みしようとしてもちんぷんかんぷんだった。バックアップのとこも一回読んでみます。
正直、ソフトをインストール→ファイルを開く感覚かと思ってた。
うーん、ちんぷんかんぷんならやめたほうがいいような。
852 :
NAME IS NULL :2012/04/14(土) 07:31:17.10 ID:E13kkY5F
SQLServer2005Expressから乗り換えようと企んでいるのだが、移行に関して注意すべき点はある?
移行ってそもそも可能なの?
ストアドプロシージャとか使ってない? 単なるデータストアとして使っているだけなら移行は楽だろうけど。
856 :
848 :2012/04/14(土) 15:11:32.14 ID:???
VisualStudio 2005でPostgreSQL 9.1 を使おうとしています。 VSのIDE(デザインモード)からOLE-DBでデータベース接続しようとすると、 複数ステップのOLE DBの操作でエラーが発生しました。 各OLE DBの状態の値を確認してください。 作業は終了しませんでした。 というダイアログが出てしまい、接続できません。 VS2005からPostgreSQLにIDEのデザインモードで接続する方法を 教えてください。 PostgreSQLドライバはスタックビルダでOLE-DB, Npgsql、ODBCをインストール しています。 よろしくお願いします。
858 :
846 :2012/04/15(日) 02:45:25.75 ID:???
みなさんアドバイスありがとうございました。 古いPostgreSQL特有のOIDがループしちゃう問題が原因だったようです。 vacuumdb -a -f を何度か実行したら無事にpg_databaseの中身が復旧しました。 その後pg_dumpallでダンプできること、リストアできること確認しました。 いい加減、バージョンあげた物に入れ替えるか…
> vacuumdb -a -f > と実行してみましたが > pg_databaseが空っぽなのでVACUUMする対象のDATABASEがみつからず > すぐ終了してしまいます。 これにだまされ(?)ずに何度か繰り返せばいいってことなのかな。 同じような状況に出会ったときに役立ちそう。 横からだけどありがとう
860 :
NAME IS NULL :2012/04/15(日) 20:24:44.64 ID:vqK/fcis
>>857 デザインモードで?ってのがイマイチわからんですが
Npgsqlだと
using Npgsql;
861 :
857 :2012/04/15(日) 21:48:28.88 ID:???
>>860 デザインモードで表示させたい、とは、
VSのIDE上の「データソース」画面にPostgreSQLのDataSetを
表示させたい、ということです。
using Npgsql だと、データソース画面上にPostgreSQLのテーブルとか
フィールドを表示してくれないので不便なんです。
862 :
NAME IS NULL :2012/04/15(日) 22:11:08.37 ID:vqK/fcis
あるテーブルのレコードを、日付に基づいて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' のどれがいちばん効率がいいでしょうか。 こんな基本的なことも知らずにすみません。
864 :
NAME IS NULL :2012/04/16(月) 19:45:26.64 ID:+oPP0qSo
>>863 SQL文の初めにexplainやexplain analyzeを付けて実行すれば、内部の動きや効率の情報が表示されるよ。
> 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'
>>865 なるほど。たしかにそうですね。
もし date(created_at) のインデックスは作成してないけど created_at のインデックスはあるとしたら、
一般的にはどれが効率的なのでしょうか。
勘弁してください
1番目だと create_at のインデックスは使われない。 3番目だと 2012-04-16 23:59:59.xxx の1秒間が漏れるから、2番目が良いんじゃないの。
>>868 なるほど!1番目は created_at そのままではなく date(created_at) なので、インデックスは使われないですよね。言われてみればその通り。
実は今は1番目の書き方をしているんですけど、2番目の書き方に改めるか、date(created_at) 相当のインデックスを貼るかしたいと思います。
たいへん勉強になりました。感謝します。ありがとうございました。
PostgreSQL で、どうしても Oracle式の OUTER JOIN ((+) を使うヤツ) を行いたいのですが、何か方法はありませんか? 既に運用中のDBがあって、10テーブル以上を JOIN しないと答えが出ない設計です。 明示的な JOIN だと、実際には後続の WHERE句で絞り込める状態でも、プランナは律儀に順番にJOINしてしまいます。 プランナに後続の WHERE句で絞り込んでもらうにはどうしたら良いのでしょうか? よろしくお願いします。
outer join だったら、LEFTでもRIGHTでも普通に使えるが、 WHERE節で(+)使うオラクル方言って、Oracle以外で出来る奴ってあるんかいな? そうでなきゃプランナがどうのこうのって、思い込みじゃなかろか。
そもそも、同じSQLだってDBMSが違えば同じ実行計画になるとは限らんしな。
873 :
870 :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からの移植とかいうわけではありません。
よろしくお願いします。
>>873 a LEFT JOIN bでb⇒aの順に結合するのはOracleでもできないよ。
書き方がLEFT JOINでもa.xxx = b.xxx(+)でもできない。
aのレコードに対してbが存在しないものを出さないといけないので
そもそもbを駆動表にはできない。
外部結合をせざるを得ない状況に追い込んだER設計自体を
見直すことになります。たいていは。
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にする方法等が考えられる。
そのほか、テーブルの統計の取られ方の調節や、計画を立てるときのコストなどのパラメータを調節することもある。
みなさまありがとうございます。
>>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句は知りませんでした。これが探し求めていたものかもしれません。早速調べてみたいと思います。
c.xxxを検索条件に含めるのなら、aとcは内部結合にはできないの? >これを、a は駆動表にしたまま、a ⇒ b および a ⇒ c の2つの結合に分解したままプランナに伝えたいのです。 というのがよくわからない。 cの絞り込みの効果を得るには、(c join a) left join bのような順序になる必要があって、 a ⇒ bをa ⇒ cと別々に行うとするならば、それらの絞り込みのどちらが先になるか(c で絞り込まれるのが遅れるかどうか)は検索速度に関係ないと思うのだけど。
>>876 >>873 で a⇒b⇒c よりも c⇒a⇒b のほうがいい場合もあるって書いてるのはどなの?
a⇒b⇒c よりも a⇒c⇒b のほうがいいって言うのなら、分かる気もするけれど。
エロい方、教えてくだされ。 フィールドでcharacter varying(8)とcharacter varying(8) [ ]の違いって何でしょ? [ ] の意味が解りません・・ぐぐってもそれらしき説明を見つけられなかった。
配列かな
881 :
870 :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 のほうがいい」可能性を
クエリプランナに伝える方法は無いのか、が主題です。
やったことないんだけど、 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) ってやると何気にうまいことやってくれないかな。
>>880 配列って1レコードの1フィールドの中に複数のフィールド値が入るって事でいいのん?
そう。 大抵の場合、配列が出てきたら設計見なおした方がいい。
>>884 ありがと〜。SQLServerからPostgreに乗り換えようとしていて、tableを作ろうとした所にこの問題で出くわしたw。
Postgreと心中するつもりはないので配列は使わないでおこうw。
なんか配列はPostgresqlの独自拡張だと思ってるように見える。
これは恥ずかしいな
888 :
885 :2012/04/25(水) 19:11:42.15 ID:???
>>886 ,887
調べてみたらSQL99って規格なんだな。確かにこれは恥ずかしいw。
勉強になりますた。
御指摘感謝。
SQL99前から独自に実装していたと記憶してる。 つーか、俺もSQL99に配列が定義されているって、初めて知ったわw 独自実装じゃなくて、策定中の先行実装だったのかな?
1カラムの最大容量そろそろ増やして欲しい もう64bit全盛のこの時代にいつまでも1Gじゃあかんとおもう
SQL99だと配列は固定長なのね 誰が喜ぶ機能なのか勘ぐってしまうな
postgreって略し方が気になった そこまで言ってなんでsを言わないみたいな
よくあることなのでもう気にならない
長いからって略すと変なのよねぇw pgsqlってのもコマンドっぽいし〜
ぽす☆ぐれ
配列とかhstoreとか無茶使えるやん gin貼れるし あんまりこだわらずに レコード数も減らせるからうまく使わないと損だと思う
>>881 with句が使えるバージョンならば、
with ac( ) as
(select * from a, c
where ・・・・・
)
select * from ac , b
where ・・・・
で、aとcを先に結合させる方法かな。
話の流れ全く読まないで書くが、 バージョン気にするならそのくらいfrom句でサブクエリにいれちゃえばいいじゃん
流れ読んでないのは
>>898 のほうだから気にしなくていいよ
JSON型、bitbucketにあった9.1へのback portを入れてみた。 INSERTは出来たけど、これ、WHERE句どうやって書くの?
>>899 テーブルの結合順を一部自分で決めたいという話だったので、with句で先に結合
させてしまう手もありそうという話です。あとは、実際に動かして時間短縮になるかは
自分でこつこつ調べるしか無いけど。
こう書くのとなにが違うの? select * from (select * from a, c where ・・・・・ ) ac , b where ・・・・
ポスグレのお薦めの書籍はありますか? 基本的にポスグレの書籍はマイ何とかのより明らかに少ない気がします
何の知識を得たいのかによっては特にPostgreSQLに限定しなくてよさそうに思うけれど、どうだろ。
906 :
NAME 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の充実した機能を、調べやすいリファレンス形式で紹介。内部構造、運用・チューニングのテクニックも掲載。知りたい項目に素早くたどり着けるように、ページ参照を多数挿入。
907 :
870 :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句を並び替える(というより生成する)、という一種のヒューリスティックで回避しました…。
たったこれだけですが、効果は絶大でした。
しかし、この作業は本来クエリプランナが行うべきことで、
それを指示する文法が無いとすれば、それは文法の欠陥だと思います。
もしよろしければ、どなたかこの問題を適切な場所に伝えていただけると幸いです。
重ねまして、有難うございました。
> # 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を含む、ほとんどの実環境では、何らかの拡張に再調整することができます。
統計情報を更新してなければ、愚直に順番に結合するのかなぁ
ポスグレってtimestamp型に対するインデックスの扱いって特殊じゃない? インデックスが効いたり効かなかったりするんだけど。
とだけ言われてもな
>>912 すまん、join無し時のwhere句でdate < '2012-01-01 00:00:00'ってやってもインデックスが効いてない・・と勘違いしていた。
アプリから発行されてるSQLもう一回確認してみるとwhereじゃなくてorder byになってたわ・・・。
(前略) ORDER BY date < '2012-01-01 00:00:00' なんてやって、エラー出ないのか……?
でないだろ
917 :
916 :2012/05/02(水) 19:53:37.70 ID:???
スマソ、間違って送信してもうたw
公式のドキュメントが一番ためになる あれを隈なく読んどけばok
インデックスを作成したのに、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) どなたかアドバイスをお願いします。
テーブル全件の半分もselectするならSeqScanの方が速いしそれで正解。 困ることはないと思うが。
>>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% でもインデックスはつかわれないものなんでしょうか。
>>922 行数(413行)が少ないんじゃね?
不等号だと平均で半分SELECTすることが想定されるので、
全体で413行程度なら、最初から全部読んだ方が早い。と、判断したとか?
12万行あるテーブルで、通し番号を不等号で切り分けてみたら、
2/3までならインデックススキャンになったわ。
>>922 そのへんはレコード長とキー長、データの分布、そして整列の有無にも依存する
ところなんで一概には言えないが、一説には全体の20%を超えたらFullScanの方が
良いと言われている。
実際そんなポッチのデータ量 どっちでも大した速度さは出ない データが増えて、かつイコールで結んでもそんなに沢山ヒットしちゃうようなカーディナリティの低いデータじゃインデックスのほうが効率悪いわな
>>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% だとインデックスが使われないようです。
インデックスって、思ったより使われないんですね。もっと積極的に使われるものだと思ってました。
勉強になりました。
>>928 あれ、古いんですか。「postgresql datetime」で検索したらこれが最上位にきてたので。
えーと、datetime型のかわりはtimestamp型を使えばいいのでしょうか。
バージョンが新しいほうが使用できるデータ型が増えるものだと思ってたけど、そうでもないんですね。
無くなるっていってるから無くなったんじゃろ timestampで同等以上の事が出来るから無問題 どうして使いたきゃcreate typeすればいいが他にも色々作らなきゃならんので現実的じゃないな Postgres では、 SQL92 の2つの基本的なユーザ志向の日付/時刻 型である datetime 型と timespan 型 を提供しており、さらに timestamp 型、 interval 型、date 型、 time 型もサポートしています。 将来リリースされるバージョンでは、 datetime 型 と timespan 型は、SQL92 の timestamp 型と interval 型と統合 される可能性が高いと思われます。 他の日付と時刻に関するデータ型も、ほとんど歴史的な理由だけ で、利用可能となっています。
933 :
NAME IS NULL :2012/05/14(月) 12:09:28.45 ID:rmHVUy71
千歳科学技術大学 グローバルシステムデザイン学科 深町 賢一 千歳科学技術大学 グローバルシステムデザイン学科 深町 賢一 千歳科学技術大学 グローバルシステムデザイン学科 深町 賢一 千歳科学技術大学 グローバルシステムデザイン学科 深町 賢一 千歳科学技術大学 グローバルシステムデザイン学科 深町 賢一 千歳科学技術大学 グローバルシステムデザイン学科 深町 賢一 千歳科学技術大学 グローバルシステムデザイン学科 深町 賢一 千歳科学技術大学 グローバルシステムデザイン学科 深町 賢一 千歳科学技術大学 グローバルシステムデザイン学科 深町 賢一 千歳科学技術大学 グローバルシステムデザイン学科 深町 賢一 千歳科学技術大学 グローバルシステムデザイン学科 深町 賢一 千歳科学技術大学 グローバルシステムデザイン学科 深町 賢一 千歳科学技術大学 グローバルシステムデザイン学科 深町 賢一 千歳科学技術大学 グローバルシステムデザイン学科 深町 賢一 千歳科学技術大学 グローバルシステムデザイン学科 深町 賢一 千歳科学技術大学 グローバルシステムデザイン学科 深町 賢一 千歳科学技術大学 グローバルシステムデザイン学科 深町 賢一 千歳科学技術大学 グローバルシステムデザイン学科 深町 賢一 千歳科学技術大学 グローバルシステムデザイン学科 深町 賢一 千歳科学技術大学 グローバルシステムデザイン学科 深町 賢一 千歳科学技術大学 グローバルシステムデザイン学科 深町 賢一 千歳科学技術大学 グローバルシステムデザイン学科 深町 賢一
934 :
NAME 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━・~~
PostgreSQLで、insert文をまとめて実行する機能はありませんか。 とあるHTTPリクエストがくるたびに、あるテーブルに対してinsert文を100件実行する必要があるのですが、 これに実行時間がかかってしまいます(当然ですよね)。 なので、insert文をまとめて実行する機能があると速くなるんじゃないかと思って質問しました。 (MySQLにはそういう機能があったので。) よろしくお願いします。
copy?
937 :
935 :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と同じ構文でいけるとは。
それでいいけど、もしどうしても100回実行する必要があった場合は BEGINとENDで挟むといい。
939 :
NAME 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 |
テーブル定義書いてくれんと分からん。
テーブル[社員] 社員.社員番号 社員.社員名 社員.給与 社員.所属 テーブル[部門] 部門.部門番号 部門.部門名 部門.部門長 だろ?jk
テーブル定義以前に、何を訊いているのか日本語がよくわからん。 等結合をθ結合で書き換えて同じ結果を求めろってことなのか?
良かった、俺が勉強不足で理解できてないだけかと思った。
>>941 テーブル[部門]の部門長が社員番号でリレーションされてるかもしれないじゃん。
>>944 まあしかし、「リレーション」の使い方を間違ってる奴はたいてい勉強不足。
psqlで補完とかできないかなあ。 「alter table foobar」とかやったあとに、どんな文法が利用可能かのリストがでてくれたりすると嬉しいんだが。
>>948 ウチのは出るよ。 Windows はシラン。
>>949 え、ほんと?当方linuxなんだが、でない。Macだとでるのかな?
951 :
949 :2012/05/18(金) 17:37:47.41 ID:???
FreeBSD の ports から入れただけだけど、いつからだったか出るようになった。 手元で使ってるのは 8.3.11 だけど、同じバージョンでも OS自体が古いと出なかった記憶もある。 きっと readline のライブラリ周りが関係してるんだと思う。 Linux でもいろいろあるんじゃないかな。
Linux系でも昔からでるよ。 readlineライブラリが有効になっていないとダメだったと記憶しているが、 今時のなら普通に使えると思う。
readlineつけてないと無理だね。 Solarisだったり32/64混在環境だとそのままじゃconfigureで readlineが見つからないから使わない設定にしろと言われる
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;
select ticket_id from (select id as ticket_id from tickets) as foo where ticket_id < 10;
おっと送信しちゃった。 こういう無理やりなのはダメかなw
>>956 アイデアとしては面白いんですが、採用するとなるとちょっと・・・
order by には別名が使えるのに、なぜwhereでは使えないんでしょうか。ちょっと納得いきません。
where が相手にするのは素のレコード/カラム。 order by の対象は、条件で抜き出してきた結果の集合。 その違いじゃあないか? と、てきとー即席なことを言ってみる。
んだ
まだMySQLに機能で勝ってる?
postgresにあってmysqlにない機能もあれば逆も然り どちらもなかなかの完成度は申し分ないので 機能を持って勝ち負けという判断はおかしい。 あるのは自分の環境にとってどっちが適切かだな
PostgreSQLってデータベース研究の実験場って位置付け?
実験場ではないね。 OSSにしてはものすごい安定志向だと思う。
MySQLの方が実験的な印象が強い。
PostgreSQLの方が硬派で最先端ってイメージだったんだけどなぁ(´・ω・`)
確かに、オブジェクト指向型データベースやタイムトラベル機能は postgresだった当時は最先端だったかもしれんが今や・・・ ありとあらゆるところが拡張可能な最先端設計は今に脈々と受け継がれてるな。 安定を最優先にしながらもそこんとこで色々取り込まれたりしてる。 品質を保ってる開発メンバーには頭が下がるよ。
どんどん使って遊んであげよう
>>958 >order by の対象は、条件で抜き出してきた結果の集合。
ためしてみたところ、order by には抜き出した結果とは関係ないカラムを指定できます。
なので、その主張は違うのではないでしょうか。
select 1 as hoge, hoge as foo; これもエラーになるのと同じで、別名が有効になるタイミングがことなると思えばいいんじゃないのかなー
>>958 WHERE => SELECT => ORDER BY の順に処理されていて、
その順序が参照できるカラム名に関係していると解釈したら矛盾はないのでは?
>>969 なぜタイミングが異なるのでしょうか。
>>970 別名を付けている箇所はwhere句より前にありますし、構文解析完了時点でどの別名が使われているかはわかっているので、
whereを実行するときに別名を参照することは特段難しいようなことはないですよね。
抽出項目に対して条件をつけてるわけじゃないからなぁ。
973 :
972 :2012/05/23(水) 19:38:54.93 ID:???
とはいえ、別名が使えてもいいのかなぁと思わなくもないけど 複雑な計算をして別名をつけて取得するのに、同じ計算をwhere句にも書かないといけないということはよくあるし
単に構文解析が複雑になりすぎるからかもしれないね。
>>974 構文解析は関係ないのでは?
where句で別名を使ったときに「そんなカラム名ないぞ」というエラーを出すのは、構文解析ではなくて意味解析のはずだから。
適当なこというけど、伝統かなw
WHERE句で別名が使えると混乱が起きる。
例えば、初心者が何故以下のような文でエラーが起きるか理解できなくなる。
SELECT COUNT(foo) AS cnt FROM hoge WHERE cnt > 2 GROUP BY bar;
>>970 が言っているように、SQLがどのような手順を追って処理されているのか
理解するのは重要だと思う。
別名が重複したときの判断もできなそう。 ambiguous!っていえばいいんだろうけど、ユニークにしては困るような場面だと解決できないし。
>>976 >WHERE句で別名が使えると混乱が起きる。
起きない。起きるんだったらorder byで使えるようになっているのはおかしい。
> 例えば、初心者が何故以下のような文でエラーが起きるか理解できなくなる。
> SELECT COUNT(foo) AS cnt FROM hoge WHERE cnt > 2 GROUP BY bar;
この例だと WHERE COUNT(foo) > 2 としたところで何の違いもない。
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句のテーブルに対する条件なんだからさ
>>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」は理解を深めるのにお薦めです。
△できない ○許可していない 技術的に未実装なのではなく、論理的に(=SQL仕様的に)不可能なんだろうね。
>>978 何の違いもなくエラーが出るよってことでいいのかな
昔Oracleが8の頃、WHERE んとこで集計関数使ったら、 いちおう動くけどほんとはあかんねんで、集計関数はSELECTのとこしか使うたらあかん とか言われたな。 ほんとにそうなのかは、いまだに知らん。
>>980 >これでselect句の別名が使えたら
>おかしいだろ?
だからなんで?
> where句はあくまでfrom句のテーブルに対する条件なんだからさ
なんで where句があくまでfrom句のテーブルに対する条件だったら、select句の別名が使えないことになるの?
こじつけた理由じゃなくて、ちゃんとした理由を説明してよ。それができないなら当てずっぽうなこと言わないで。
>>986 980じゃないけどじゃああなたは
>>980 のSQLの
WHEREがどう機能すればいいと思ってるの?
ANSIかISOのSQL規格を読んだほうがいいな
>>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
>>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 と同じように扱えばいい。
構文解析や意味解析についての、簡単でもいいので基礎知識があれば、 別名をwhere句で使えるようにするのが特に困難なことではないはずだ、 というのがすぐにわかるんだけど。 たぶん構文解析についての基礎知識がないやつが、SQLの仕様書がどうのこうの いっているのだろう。 なぜそういう仕様になっているのかが聞かれているのに、SQLの仕様書を読めと 答えてるのは滑稽すぎる。
>>990 SELECT [ALL|DISTINCT] <選択リスト> <表式> で、
選択リストの都合、つまり多くの場合表示するための都合で、<表式>の内容が
書き換わることがあってはならないというのが、原則だから、
>>954 はエラーと
なるのが本来は正しい。
993 :
988 :2012/05/26(土) 10:15:26.45 ID:???
>>991 >なぜそういう仕様になっているのかが聞かれているのに、SQLの仕様書を読めと
>答えてるのは滑稽すぎる。
そういわれるとは思わなかった。
SQL言語にあなたの欲しい○○機能がない理由を訊かれても、
言語設計者じゃないとわからないよ。
理論的に可能であったとしても、単に設計者の趣味嗜好の問題などであなたの期待どおりになっていないのかもしれない。
SELECT 屁の臭い AS 腋臭よりくさい屁の臭い FROM 体内 WHERE 屁の臭い > 腋臭 このWHERE句が「腋臭よりくさい屁の臭い>腋臭」だったら常にtrueになってしまうよな 「体内」から出た「屁の臭い」を「腋臭」を比べた結果、臭いと判定されたものだけが「腋臭よりくさい屁の臭い」なんだよ
こじつけって…
何でわからないのかが逆にわからないわ
whereはselectの前に評価されるんだから後から動くselectでつけた別名が使えたら結果が変わってくるだろって言ってるんだわ。再帰計算かよ
selectで付けられる別名はあくまでもselect句の演算結果に対してのものなんだよ
うだうだ文句ばっかり言ってないで
>>980 のクエリはどう動くべきなのか考えてみろって
stonebrakerが作ってたころのはsqlじゃなくてpostquelだな
quelの方が美しいよ。
sqlが優れてるとは思えないけど現状これ使うしかないからなあ
FROM句→WHERE句→SELECT句の順に処理されているんだから、
WHERE句でSELECT句の別名が使えると、一部では便利かもしれないが、
他で辻褄が合わなくなるってことだよ。こじつけでもなんでもねぇよなw
つーか、もうネタだろ。
別名が使えないのはおかしいと言っておきながら
>>978 では別名を使わないことで
「何の間違いもない」とか言ってるし、しかも...w
「何の間違いもない」 → 「何の違いもない」 俺が間違えてたw まぁもうちっと経験積めばその不都合さに気づくと思うよ。
>>997 >FROM句→WHERE句→SELECT句の順に処理されているんだから、
だーかーら、そのまえにSQLの構文解析と意味解析をしてるでしょうが。
構文解析 → 意味解析 → FROM句→WHERE句→SELECT句・・・
^^
ここで構文解析木を操作して別名を展開すればいいだけ。
なんでwhere句やselect句の順番にこだわるの。whereやselectの処理に入るまえに別名を展開すればいいだけなのに、なんでこんなことがわからないの。
>>996 > whereはselectの前に評価されるんだから後から動くselectでつけた別名が使えたら結果が変わってくるだろって言ってるんだわ。再帰計算かよ
なんで結果が変わると思ったの?
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。