PostgreSQLについて語ろう where OID=2::oid
オープンソースRDBMS、 PostgreSQL について語りましょう。 詳しくは
>>2 で。
2 :
NAME IS NULL :2006/01/09(月) 20:19:36 ID:vvjz6A3Z
4 :
NAME IS NULL :2006/01/09(月) 22:04:38 ID:tjWnA9u0
8.1.1→8.1.2 の場合ってDBの移行は不要だよね??
9 :
NAME IS NULL :2006/01/20(金) 07:47:02 ID:83Rl49Vz
Slony1って8.1.2に対応してないですよね? 使えるからいらっしゃいますか
8.1以降は最新のRC版(現在のところ)じゃないと無理 cvsで開発版もってきてもいいけど
すまない、教えてくれ。 今うちのPCのFedoraCore4にPostgre8.0.1をインストールしたのだが、 WinXPPCのCSEで全然ログインできないんだ。 ちなみにログなんだが、 「connectDB() -- connect() failed: No error Is the postmaster running (with -i) at '10.0.0.104' and accepting connection on TCP/IP port'5432'」 pg_ctlはちゃんと-iオプションで再起動したし、pg_hba.confは 0.0.0.0/0(ローカルだからな)でやったし・・・。 何がいけないのかもうワケワカメorz誰かhelpme
デフォルトでファイアウォールが有効になってるから切れ。
13 :
11 :2006/01/20(金) 16:48:13 ID:???
>>12 でけた!!!!!!!!!!
ありがとう!!!!!!!!!!!
これでまくーらを高くして寝れますyp
14 :
NAME IS NULL :2006/01/20(金) 17:25:42 ID:lHKPwhjp
改行コードを含むデータをCOPYでインポートしようとしているのですが、うまくいかず困っています。 データはタブ区切りで、改行コードを含むデータ部は全て二重引用符("")で囲まれています。 どうやら改行コードが行の終わりと判断されてしまい、エラーが発生しているようです。 どうすればインポートできるでしょうか?
>>14 COPYのコマンドのマニュアル読んだ?
ちゃんと詳しく書いてるけど?
詳しく書いてあるけど分かりやすくはないよな
普通に日本語だし分かりやすいと思うよ
ちしょーちしょー♪ ちしょーちしょー♪ ぺしゅーぺしゅーしゅー♪ ちしょーちしょーしょー♪
19 :
NAME IS NULL :2006/01/22(日) 20:39:00 ID:AJjCZWTh
postgreSQLを導入している政府団体、教育団体ってどういうのがあるのでしょうか?
20 :
NAME IS NULL :2006/01/23(月) 03:01:49 ID:dul+jVCK
21 :
NAME IS NULL :2006/01/23(月) 11:20:26 ID:bE1Zg05v
postgreSQLを導入している宗教団体、自称市民団体ってどういうのがあるのでしょうか?
う〜む、8.1.2-jaでPL/Pythonを入れようと思って createlang -W -U postgres plpythonu postgres してみたら createlang: 言語のインストールに失敗しました: ERROR: could not load library "C:/Program Files/PostgreSQL/8.1/lib/plpython.dll": 指定されたモジュールが 見つかりません。 と怒られる…。んで、pgAdmin IIIからやっても同様で、他の言語もplpgsql以外同様。 「信頼されない言語」はことごとくはねつけるって事?
あ、PATH名からもわかるようにWindows版です。
>>22 単にPythonをインストールしていないだけに1000カノッサ
ついてるDLLだけじゃあねえ
27 :
NAME IS NULL :2006/01/25(水) 10:21:47 ID:4RYGdBr9
19990212 19990508 20000119 20010203 20010930 20020322 20031210 というような6桁の数字がありますが、 たまに末尾に半角スペースが紛れているデータがあります。 これらを検索し、一括で [20010203 ]→[20010203]と変換するにはどのようにしたらよいでしょうか?
Table A 支払い区分 | 金額 ----------------------- 1 |1000 2 |500 2 |1500 1 |1300 というテーブルAから、 支払い区分 | 合計金額 ----------------------- 1 |2300 2 |2000 というように、支払い区分毎で金額の集計をした結果を取得したいのですが、 支払い区分のパターンは不特定でTable Aの検索時に動的に決まるものとして、 一つのSELECTで取得することは可能でしょうか?
こんなんどうでしょう? select min(支払い区分),sum(金額) as 合計金額 from A group by 支払い区分;
31 :
NAME IS NULL :2006/01/26(木) 18:59:37 ID:znF3M60R
半角英数字のみを使っているものはただしいのですが、 たまに半角英数字以外のものが混じっている場合があります。 「m199」 「a20」 「r674」 「2234」 「r674」←中に全角の6が含まれるのエラー 「77 」←語尾に半角スペースがあるのでエラー これらを抽出するにはどのようにしたらよいでしょう
32 :
29 :2006/01/26(木) 19:02:11 ID:???
>>30 レスありがとうございます。解決いたしました。
恥ずかしながら、group by句の使い方等をよく理解していなかったようです。
ありがとうございました。
>>31 少々荒っぽいやり方ですが、
SELECT * FROM テーブル名 WHERE octet_length(検証対象カラム) <> char_length(trim(検証対象カラム))
てな感じに、バイト数≠前後空白除去後の文字数、の行を抽出するってのはどうでしょうか。
34 :
31 :2006/01/26(木) 20:43:30 ID:znF3M60R
自己解決しました
35 :
NAME IS NULL :2006/01/26(木) 21:41:44 ID:K6TFUKHU
MIN関数にする必要ないだろ LIKEで半角英数かしらべろ
minとかわろす
37 :
NAME IS NULL :2006/01/27(金) 00:31:56 ID:y3y92JGu
このようなテーブル id | connect_id | date ------------------------------- 100 | NULL | 10/10 101 | 100 | 10/15 200 | NULL | 10/12 300 | NULL | 10/13 301 | 300 | 10/18 302 | 300 | 10/20 から id | date1 | date2 ----------------------------------------------- 100 | 10/10 | 10/15 200 | 10/12 | 10/12 300 | 10/13 | 10/20 とIDを重複させずに出力するにはどういうSQL文を書いたらよいのでしょうか?
出力はとりあえずあってると思うが、狙いとは違うかもなー。 SELECT CASE WHEN connect_id IS NULL THEN id ELSE connect_id END AS id, min(date) AS date1,max(date) AS date2 FROM Table GROUP BY 1;
40 :
NAME IS NULL :2006/01/27(金) 07:10:56 ID:ccq9hxN8
>>35 >MIN関数にする必要ないだろ
どうすれば?
>>41 select /*min(*/支払い区分/*)*/,sum(金額) as 合計金額 from A group by 支払い区分;
>>41 GROUP BY でまとめた項目はそのまま出力できる
Slony-I 1.1.5 Released At long last, here is version 1.1.5, which now supports PostgreSQL version 8.1. 人柱キボンヌ
やっとRCとれたかあ 早速ためしてみるよ
47 :
NAME IS NULL :2006/01/31(火) 23:19:44 ID:AXCSt9ym
max_fsm_pagesで指定する値が十分でないとvacuumで不要領域を 回収できない場合があるとの説明を見ますが、 ここでいうvacuumはconcurrent、full、どちらでも同じでしょうか? vacuum fullの場合はmax_fsm_pagesの値に関係なく、全ての不要領域を 回収してくれるということはありませんでしょうか? ちなみにWindows版 PostgreSQL 7.2.1を使ってます。
>>47 VACUUM FULL でも一応 FSM は使われる。
ただし、FULL は詰め合わせるので、FreeSpace の量は少ないと思われる。
>>47 >>Windows版 PostgreSQL 7.2.1
何それ?
新システムに思い切って8.1.2をいれてみました。 INDEXがなくても充分に速いクエリが増えた。やっぱ高速化されてるんだな。 autovacuumは普通に便利だ。
51 :
NAME IS NULL :2006/02/01(水) 21:22:09 ID:pJ8T7YoI
ちょっと聞きたい。 αっていうサーバで動いている「A」というDBの「a」というテーブルと、 βっていうサーバで動いている「B」というDBの「b」というテーブルを結合させて 表示するなんてことはできるもんでしょうか。
遅くなりましたが、
>>48 レスありがとうございます。
毎日ほぼ一定量のinsert/deleteのあるシステムで、
毎日行っていたvacuumをfullからconcurrentに変えた以降、
どうにもディスク使用率が増え続けて困ってました。
データ量からいえば明らかにmax_fsm_pagesの設定が小さいのですが、
過去に適切と思われる値を入れたらPostgreSQLが落ちてしまったことがあり、
チキンになってました。とりあえずfullに戻して様子を見てみます。
>>49 いちおselect version()すると「PostgreSQL 7.2.1」と出ます。
ある製品にバンドルされているもので、好んで使っているわけではないのですが。
昔なつかしの独自のマルチスレッド対応版のことかな
あるいはPowerGresで select version()すると「PostgreSQL …」ってでるかもね。
cygwin+postgresとか
LinuxにとWinに8.1.1を入れてたんだけど、 複数のビューを結合してselectすると、条件によっては 当てはまらないはずの結果が返ってくるという現象があった。 (詳細な条件は失念) 同じ条件で、8.1.2に入れ替えたら直った。
詳細な条件が無いと検証できません・・・
60 :
NAME IS NULL :2006/02/03(金) 22:23:37 ID:ug/mwVC7
自分でコンパイルするメリットってなんですか?
ありません。
達成感
射精感
改造→射精感→ とくれば次は「ふたなり」ですか?
以下のコードでresにNULLが返ってきます なぜだかさっぱりわかりません。 考えられる原因が少しでもわかる方おられましたら教えてやってください。 if( PQstatus( m_PGconn ) == CONNECTION_OK ){ PGresult* res = PQexec( m_PGconn, "select * from tbl_abon ); }
"が閉じてないからだろうか?
>>66 エラーはでないのか?
>>67 それだとコンパイルエラーじゃないのか?
69 :
66 :2006/02/05(日) 10:25:43 ID:???
しまった・・テーブル名かえるたときに消しちゃった ぬるぽが返ってきたときはちゃんと"で閉じてました
>>66 データが入ってないとか。
配列でデータが返ってきてるのに取り出し方間違ってるとか
71 :
66 :2006/02/05(日) 13:59:47 ID:???
お前らレスありがとう。 データが壊れてるのかと思い、リストアしたり、 Apacheが入ってたのでなんかわるさしてるのかと思って消したりしてたら うまくいきました。 なにが原因だったのかよくわかりませんでしたが・・。
自分でコンパイルするとオプション変えたいとき自由にできるし コンパイルするしか手が無かった時からやってるので苦じゃないというのもあるかな。 オプションは、Slony-I入れるのにsafety-thread 使ったのと、 64bit でコンパイルするために、インストール先変えたのくらいだけどね。 Solarisだからってのもあるけどな。
>>60 ・バイナリが提供されてない環境へも(頑張れば)インストールできる(かもしれない)。
・コンパイルオプション等を最適化できる(かもしれない)。
・問題が起きたとき、動作が不明なときデバッガで追えば何かわかる(かもしれない)。
74 :
初心者 :2006/02/08(水) 12:20:02 ID:8gf8kpEe
POSTGRESを勉強中の初心者です。 表1と表2の2つの表が在り、顧客IDとして 「表1ID」「表2ID」の項目を作ってある物とします。 表1IDに存在しないIDは表2からも削除したい場合 どのようなクエリを発行すれば良いのでしょうか
DELETE FROM 表2 WHERE 表2ID IN ( SELECT 表2ID FROM 表2 EXCEPT SELECT 表1ID FROM 表1) とかでどうか
DELETE FROM 表2 WHERE (SELECT count(*) FROM 表1 WHERE 表1ID = 表2ID) <= 0
77 :
初心者 :2006/02/08(水) 15:49:41 ID:8gf8kpEe
素早いご回答ありがとうございました。 色々な方法があるのですね。EXCEPTが手元の資料では見つからないようなので 勉強して出直します。とりあえず DELETE FROM 表2 WHERE 表2ID NOT IN (SELECT 表1ID FROM 表1) とかしても動いたっぽいのですが、POSTGRESのバージョンも 古い様なのでバージョンアップして、実行時間を計測しながらじっくり動かして見ようと思います。
PGSQL-JPのメーリスを読んでるんだが 最近 pgpoolの話題ばっかりだなwww
80 :
NAME IS NULL :2006/02/10(金) 17:53:56 ID:mV3E0Zue
少しは高速になりましたか?
かなり光速に近付きました
もークエリ出す前に結果が返ってくるほど
あの世へも近づけました。
MySQLには及びませんがorz
サブクエリ&トランザクション使う MySQL5 と比べると PostgreSQL 8.1 の方が速かったよ。
参照主体なら十分速いんだが、更新が多いと下手すりゃ半分くらいの速度だなぁ。
MYSQLのほうが更新遅いけど Postgresはその分バキュームで後回しになってるだけ
>>88 autovaccum でその問題もなくなったよ。
オートも含めて後回しになったのをどうするかというだけだろ
負荷の変動が予想できるなら、後回しのほうが有利だけどね。 忙しい時には処理をサボって速くして、暇なときにvacuumすればいい。
でも他のDBはそういうのを自動でやってきただけだから デフォルトで有効になってなんぼだな
INHERITSまともに使ってる人いますか? CREATE RULE と CHECK 制約の組み合わせうめぇwwwwwwwwwwwwwww
95 :
NAME IS NULL :2006/02/14(火) 01:06:16 ID:Num5h3qC
libpq使ってバリバリ書いてる猛者いねがー? ああ、PHPなんてウザくてつかってらんねえ。
96 :
NAME IS NULL :2006/02/14(火) 04:52:55 ID:yUpNwadt
MySQLは4.1以降日本語対応が微妙なのですが Potgresはそのあたりどうなのでしょうか?
Cからlibpq使いやすくて( ・∀・)イイ! SQLiteでも同じようなラッパーかませて使ってる
libpq 全機能説明したものってあるのかな。 ヘッダファイルからたどってるが、知らないのがけっこうある まあ一部だけで十分使えてるけど
99 :
NAME IS NULL :2006/02/16(木) 11:52:08 ID:RsH/enz2
なんかPostgreSQLに認定資格あるっぽいけど,受けたやつおるか?
一時資格板にも建った。。。 つーか隔離したんだがな。 100も行かずに落ちたw
質問です。 DBとユーザをスーパーユーザで作って ALTERでパスワードを設定したにも関わらず パスワードなしでDBに接続できてしまいます。 パスワードを入力しないと接続できないようにするには どうしたらいいのでしょうか?
>>102 pg_hba.conf を編集。trust だとパスワード関係ないよ
104 :
102 :2006/02/16(木) 18:29:48 ID:???
できました! ありがとうございます!
105 :
NAME IS NULL :2006/02/16(木) 18:52:44 ID:RsH/enz2
PostgreSQL CE認定試験受けた人おる?
106 :
NAME IS NULL :2006/02/16(木) 23:16:13 ID:lmTDu9ZJ
could not load library "/usr/local/pgsql/lib/LIBAAA.so": /usr/local/pgsql/lib/LIBAAA.so: 再配置後にセグメントprotをリストアできません: 許可がありません とでて、実行できません、ご教授いただけないでしょうか?
107 :
NAME IS NULL :2006/02/17(金) 08:19:48 ID:rC+wyKN3
>>105 受けたよ。Silverだけどな。
日常業務で開発・管理をやっている人なら誰でも受かるよ。
ストアドってアトミックに実行されるんでしょうか? 今「テーブルが空ならtruncateする」という処理を実装しようと思っています。 アプリで実装した場合以下のようになると思うのですが、 ストアドで実装した場合は (1) はいるのか気になってます。 (1) lock xxx in exclusive mode (2) select * from xxx limit 1 (3) 2 で空なら truncate
誰かアホな俺に空なのにtruncateする理由を教えてくれ。
空じゃないのにtruncateしたらデータが消えちゃうから。
もうさ 満月じゃないのに恋したら魔法が消えちゃうから でもよくね?
意味ないことを真剣にやるのも大切だよね
vacuum full xxxじゃダメなのかな?
パフォーマンスの問題じゃない? VACUUM FULLは不要領域を探して回収。 TRUNCATEは無条件に領域を解放。
0件か確認してまで、ロックしてまでtruncateするぐらいなら 無条件にvacuumのがよっぽどいい
つヒント:適材適所
119 :
NAME IS NULL :2006/02/26(日) 12:19:26 ID:GgeRVLto
シルバとったよ。問題集一個で取れるよ。 でも7系なんだよね。8系はまだやってないみたいだし。 時期が悪かったかな。 まーちょっとPostgresというものを知ってるよ。使えるよ。 詳しくは調べなきゃわかんないけど ってレベルですね。 私自身もそうです。 Vineでソースからコンパイルしてpsqlでselect までやるってだけで 気持ちいいです。pgpoolも面白いですね。
120 :
NAME IS NULL :2006/02/26(日) 21:33:44 ID:HZDQrYll
select point from table order by point desc; で現在ランキングを表示させているのですが、ランキングの 順位はプログラム側でカウントアップさせながら出力させる ようにしております。 これをSQL側(pointの横に新規フィールドを持たせるような方 法)で行うことは可能でしょうか。 このポイントが厄介で、例えば20ポイントが1人、10ポイントが 3人、5ポイントが1人いた場合、順位は 1位:20ポイント 2位:10ポイント 2位:10ポイント 2位:10ポイント 5位:5ポイント となるため、SQLでは不可能だと判断したわけですが、もしも できるのであればどうかご教示いただきたい次第です。 恐れ入りますが、宜しくお願いいたします。
>>120 試してないけど、こんな感じだっけ。
select a.point, (select count(*)+1 from table b where b.point > a.point) as rank from table a order by a.point
>>121 早急なご返答、誠に有難うございます。
今すぐ試して結果をご報告させていただきます。
>>121 すごいです。
本当にそのとおり出力されました。
結果を以下に記載させていただきます。(descオプションのみつけました)
select a.point, (select count(*)+1 from table b where b.point > a.point) as rank from table a order by a.point desc;
point | rank
--------+------
20 | 1
10 | 2
10 | 2
10 | 2
5 | 5
0 | 6
0 | 6
0 | 6
重ね重ねの質問で恐縮ですが、これにouter joinをしたい関係で
カラム名にテーブル名をつける場合、
select a.table.point, (select count(*)+1 from table b where b.table.point > a.table.point) as rank from table a order by a.table.point desc;
このようにやってみたのですが、「ERROR: schema "table" does not exist」
と怒られてしまいました。
もしも可能であればご教示いただきたい次第でございます。
すみません。
a.table.point は a.point じゃないの?
125 :
NAME IS NULL :2006/03/01(水) 11:03:11 ID:7z+ZoZNh
Postgres もSQLも、ど素人なのですが、質問させてください。 最新登録されたエントリ50みたいなものを取得するとき、 全部を取得して、ORDER するんじゃなく、ORDERしてかつ 上位50個だけのRowを取得するようにする命令ってありませんか?
limit
128 :
NAME IS NULL :2006/03/01(水) 14:01:17 ID:4jwinoiQ
libpgを使ってちょいっとモノ書いてたんだ。 PGresult 構造体変数を2個宣言したんだが、 片方を使うと、もいっぽは汚染されてしまって 使えなかったんだ。 あれそういうものなの?
129 :
NAME IS NULL :2006/03/02(木) 12:25:32 ID:KY0UZN2N
postgres8をWindowsで使っているんだけど、これをLinuxに移行するにはどのようにしたらよいでしょうか?
>>129 移行ってデータのことですか?
コマンドラインに慣れてないなら、pgAdminIIIでバックアップしてリストアすればできますよ
131 :
129 :2006/03/02(木) 12:37:12 ID:KY0UZN2N
データの事です。 ありがとうございます。
コマンドラインなら pg_dump
133 :
NAME IS NULL :2006/03/02(木) 19:53:16 ID:hQwhNbpV
このメッセージってデータ量のオーバーなんですか? どうすればいいんですか? WARNING: Some databases have not been vacuumed in over 2 billion transactions. You may have already suffered transaction-wraparound data loss.
>>133 読んで字のごとく2百万以上のトランザクション実行したのにバキュームしてないよって
怒られてるんだからバキュームすれば解決するよ
135 :
NAME IS NULL :2006/03/02(木) 21:36:47 ID:vnBQBHjr
perDBI->do()でtext型に?を入力しようとすると プレースホルダと解釈されてエラー等になるんですが、 どうしたら解決できますか? psqlコマンドでは?を問題なく入力できたので、 perlDBIの問題だと推測してます。
136 :
NAME IS NULL :2006/03/02(木) 21:54:50 ID:N5vujdH7
>>134 知ったかは市ね!
×2百万以上のトランザクション実行したのにバキュームしてないよ
○2百万以上のトランザクション実行したからバキュームできないよ
>135 プレースホルダを使ってから、?付きの文字を入れれば? まさかCGIで使っててプレースホルダ使ってないって事ないだろうな?
139 :
135 :2006/03/02(木) 23:04:28 ID:vnBQBHjr
>>138 最初プレースホルダを使っててダメだったので
色々ためしてみましたけど、上手く行きませんでした
>>134 billionとmillionの違いの分からないマヌケがいるスレはここでつか?
>139 何をどうやってダメだったか書かないと何も解決しないよ? 俺はPerlCGIでプレースホルダを利用できている。 だからできないとしたら使い方が悪い。
142 :
135 :2006/03/03(金) 08:11:18 ID:sybz08G0
普通に
$db->do("INSERT INTO テーブル VALUES(?, ?, ?)", undef, @values) or print ref $this,__LINE__.$db->errstr;
ってやってて
@valuesの中にURL(
http://hoge.com?var=1みたいなの )を入れてるとエラーになりました
144 :
143 :2006/03/03(金) 12:23:35 ID:???
環境は、
Solaris 9 の x86
PostgreSQL が 8.1.3
perl が 5.8.3
DBI が 1.50
DBD-Pg が 1.45
で、まんま、
$db->do("INSERT INTO テーブル VALUES(?, ?, ?)", undef, @values) or print ref $this,__LINE__.$db->errstr;
を使い、
http://hoge.com?var=1を入れて何の問題も出なかった 。
警告: いくつかのデータベースは20億以上のトランザクションで掃除機をかけられていません。 あなたは既にトランザクション巻きつけて着るドレスデータの損失を受けたかもしれません。
>142 エラーはなんて出てるのよ?
147 :
135 :2006/03/03(金) 14:59:23 ID:u89Rf0X1
エラーはシンタックスエラーです MySQLではエラーにならなかったので、推測だとDBD-PgPP0.5?に問題が有りそう
>>147 だから検証コード出せって。
>>144 でDBD-PgPP 0.05 に差し替えたが、問題なく動作したぞ。
変更箇所は、DBI->connect("dbi:Pg: を DBI->connect("dbi:PgPP: にかえただけだが
シンタックスエラーって・・・
DBD-PgPPのコード見てみたけどprepared statementはエミュレーションなんだな。
151 :
135 :2006/03/03(金) 16:32:47 ID:u89Rf0X1
会社のPCからは2chアクセスできないです XPのPPMでDBD-Pgがインストールできない リポジトリ追加したけどそれが死んでるっぽい 簡単なコード作ってみる
152 :
135 :2006/03/03(金) 17:26:55 ID:u89Rf0X1
再現するコードできた 帰ったらUPします
153 :
135 :2006/03/03(金) 21:12:29 ID:rWRgaIfu
コードです まずSQL CREATE USER testuser PASSWORD 'test'; DROP TABLE test; DROP TABLE review; CREATE TABLE test ( "発行番号" TEXT NOT NULL , "社内URL" TEXT NOT NULL , PRIMARY KEY ("発行番号") ); CREATE TABLE review ( "発行番号" TEXT NOT NULL , "社内URL" TEXT NOT NULL , "販社URL" TEXT NOT NULL , PRIMARY KEY ("発行番号") ); GRANT SELECT,INSERT,UPDATE,DELETE ON test, review TO testuser;
154 :
135 :2006/03/03(金) 21:14:00 ID:rWRgaIfu
perlのコードです
tes1(),tes2()ではエラーにならず
tes3()でエラーになりました
use DBI;
$db = DBI->connect("DBI:PgPP:questest:localhost", 'testuser', 'test') or print __LINE__.$DBI::errstr."\n";
srand();
$sw = int(rand(99999999));
print "--- tes1 ---\n";
tes1();
print "--- tes2 ---\n";
tes2();
print "--- tes3 ---\n";
tes3();
$db->disconnect;
sub tes1 {
my @values=($sw, '
http://aaa.cgi?var=1 ');
$db->do("INSERT INTO test VALUES(?, ?)", undef, @values) or print __LINE__.$db->errstr;
my $rs = $db->selectall_arrayref("SELECT * FROM test") or print __LINE__.$db::errstr;
for (my $i=0; $i<=$#$rs; $i++){
for (my $j=0; $j<=$#{$$rs[$i]}; $j++){
print "$$rs[$i][$j]\t";
}
print "\n";
}
}
sub tes2 {
my @values=($sw, '
http://aaa.cgivar=1 ', 'aa');
$db->do("INSERT INTO review VALUES(?, ?, ?)", undef, @values) or print __LINE__.$db->errstr;
my $rs = $db->selectall_arrayref("SELECT * FROM review") or print __LINE__.$db::errstr;
for (my $i=0; $i<=$#$rs; $i++){
for (my $j=0; $j<=$#{$$rs[$i]}; $j++){
print "$$rs[$i][$j]\t";
}
print "\n";
}
}
sub tes3 {
my @values=($sw, '
http://aaa.cgi?var=1 ', 'aa');
$db->do("INSERT INTO review VALUES(?, ?, ?)", undef, @values) or print __LINE__.$db->errstr;
my $rs = $db->selectall_arrayref("SELECT * FROM review") or print __LINE__.$db::errstr;
for (my $i=0; $i<=$#$rs; $i++){
for (my $j=0; $j<=$#{$$rs[$i]}; $j++){
print "$$rs[$i][$j]\t";
}
print "\n";
}
}
155 :
NAME IS NULL :2006/03/04(土) 01:34:24 ID:5lvDcx+z
このメッセージってデータ量のオーバーなんですか? どうすればいいんですか? WARNING: Some databases have not been vacuumed in over 2 billion transactions. You may have already suffered transaction-wraparound data loss.
156 :
NAME IS NULL :2006/03/04(土) 01:41:35 ID:ayXoCSIP
vacuum すれば?
>154 そりゃお前、ただの主キーの重複じゃねーの? $swの値がtes2()とtes3()で同じになってないかい? だからちゃんとエラーコード出せって言ってるの。
158 :
NAME IS NULL :2006/03/04(土) 08:53:16 ID:PWWsdLmu
>>157 ああホントだ orz
でもtes3()に
$sw = int(rand(99999999));
を持ってきても
ERROR: syntax error at or near "a" at character xxx
みたいなエラーが出ますよ
最初は$swは各関数内に置いてテストしてましたから。
それで色々試してるうちに、$swをグローバルにした経緯があります。
>158 srandも一緒に入れてたんじゃねーの?
160 :
135 :2006/03/04(土) 11:58:41 ID:/Aqne4MT
>>159 それは無いですね
それに、主キーが重複した場合は別のエラーになるし
161 :
NAME IS NULL :2006/03/04(土) 12:03:12 ID:5lvDcx+z
>>156 vacuum すると出てくるメッセージ(;_:)
つーかPgPPのソース読んだほうが早いぞ。 バグ以前にトホホな作りで使いたくなくなる。
163 :
135 :2006/03/04(土) 13:23:26 ID:/Aqne4MT
別のLinuxのマシンとかでDBD-Pgを使うようにしてみます どうしてもPgPPを使う必要がある場合は、?を&ques;みたいに変換して対処しようと思ってます
>>161 もしかして木曜日からまだ解決してないのかw
このまま使い続けるとどんどんデータが壊れていくから、
さっさとdump/restoreしてDB作り直せ。
Intel MacにPostgreSQLはインストールできますか?
cpuはx86と同じなの?
>>161 今回のに限らず、いつでもどこでも pg_dump(all) とpg_restoreやpsqlで戻すやり方を
使えるようにしとけ
>155 何か知らんけど、プログラムで2億行インサートしたんだろ? プログラム見直して、テーブル再作成しろ。
スマソ、login:Penguinが直ってなかった。
俺は
>>161 でないけど、
>>161 みたいなメッセージ出たらどうすればいいのか
知らなかった。結局は
>>164 や
>>167 の通り、DUMPとRESTOREをすれば
いいみたいだけど、2十億のトランザクションって何なのですか?
データ件数とは違いますよね?
>>170 ループして "over 2billion" insertしたんじゃないの?
「2億行あるけど、vacuumしてねえよ。」って。
>>172 分からない人は参加しないように(ゲラ
>transaction != row だぞ、わかる? >insertやupdateしてから20億トランザクション以上経過した【行】は、 >勝手にどんどん消されていってしまんだよ。 矛盾していないか? テーブルの状態を表わすのならば、分かり易く行と書いただけだろ。 >マニュアルくらい嫁。 揚げ足にならないようにな。
>20億トランザクション 金融システムか? そもそもそんな利用頻度の高いシステムでPostgreなんて使うなよw
しかし、20億トランザクションもの間DBを放置しつづける香具師が管理者やっちゃダメだろ。 PostgreSQLってのは、vacuumが何のためにあるのか全く知らずに 扱えるような代物じゃないぞ。 # 8.1以降は autovacuum があるから一応大丈夫なのか?
>insertやupdateしてから20億トランザクション以上経過した行は、 >勝手にどんどん消されていってしまんだよ。 >それを防ぐためには、少なくとも10億トランザクション毎に一回以上の間隔で >定期的にvacuumを実行する必要がある だから、168, 172, 173は「プログラムがループして不要行を書き出したんじゃないの?」 と書いているわけだから ロジックミスじゃねえの? 2億でも、20億でも良いけど、個人的にインサートする行数じゃねえし 「テスト」と書いてあるからね。
vacuumに失敗しているのにvacuumしないのが原因だって・・プププ
183 :
175 :2006/03/05(日) 13:04:51 ID:???
>>176 > >transaction != row だぞ、わかる?
>
> >insertやupdateしてから20億トランザクション以上経過した【行】は、
> >勝手にどんどん消されていってしまんだよ。
>
> 矛盾していないか?
> テーブルの状態を表わすのならば、分かり易く行と書いただけだろ。
何も矛盾していないが?
begin transaction のあといろいろ操作して最後に commit すれば、
その間に何万行insertしても1トランザクションだ。
逆に、1行しかないテーブルでも、その行への update & commit を
20億回繰り返せば、20億トランザクションになる。
> 「2億行あるけど、vacuumしてねえよ。」
この発言こそ、トランザクションと行を混同している証拠。
まあ、あれだ。「みんな仲良くしなさい」
>183 トランザクションと行の概念はみんな知ってる。 突っ込み所が違う。
みんな知ってるけど
>>168 だけ知らなかったw
そもそも他のDBMSで問題になることがない「トランザクション数」が
なんでpostgresで問題になるのか、原理をわかってないだろ。
何が原因でどう対処すべきかを明確に回答できる香具師は誰もいない(w
20億のトランザクションなんて有名サイトのサーバ以外にあるのかなぁ? 10万トラン/日でも、3,650万/年だから50年以上かかるんだがw
スゲー 自分のアフォさ加減をここまで堂々とカミングアウトできる度胸に脱帽
190 :
189 :2006/03/05(日) 16:49:33 ID:???
>>189 今頃必死にトランザクションをググッてるアフォですね!(プププ
>>189 ageとsageの違いくらい覚えようね!(プププ
193 :
189 :2006/03/05(日) 16:52:48 ID:???
だから、トランザクションが行だって過去レスに書いてあるだろ
194 :
189 :2006/03/05(日) 16:53:52 ID:???
20億件以上のテーブルなんて大手サイト以外にも世の中にいくらでもある。
initdbすればいいだよね?
哀れな
>>168 …
成りすましまでして何がしたいんだか。
この先postgresを使うたび、今日のこの屈辱と自分の醜態を思い出すことになるんだよw
英語を読むくらいできんとね
煽ってる馬鹿は双方マ板にでもいってくれ
プログラムで処理する単位はトラザンザクションだが Vacuumする単位はテーブルだから 行という表現を使ってるだけだろ? あおってる奴はわけ分からん。 重箱の隅つついても仕方ないだろ。
>183 Vacuumのときに、Vacuumしろというメッセージが出たら どういう対処が正しいんだ? トランザクションと行の講釈は「知ってるからいいよ。」
ヒント:DUMP&RESTORE
>>155 だからOracleにしておけば良かったのに・・・
Oracle>MySQL>>>PostgresSQL
vacuumしろってメッセージが出たらvacuumしたらいいんじゃないの?
>>161 がvacuumしようとして見たのは別のメッセージだしw
179 != 189だぞ。 vacuumdしたら「vacuumしろよ」と出たから困ったんだろ? 155が161で返答している。
>>206 Oracle > DB2 > SQL Serever(※Windowsのみだが)
>>208 日本語も英語も、どっちもまず落ち着いて読み直してみれ
211 :
161 :2006/03/05(日) 19:23:57 ID:SkO79mVG
212 :
175 :2006/03/05(日) 19:55:31 ID:???
>>201 > Vacuumのときに、Vacuumしろというメッセージが出たら
> どういう対処が正しいんだ?
「Vacuumしろというメッセージ」なんてどこにあるんだ?
>155 のメッセージは「Vacuumしろ」って意味じゃないぞ。
> トランザクションと行の講釈は「知ってるからいいよ。」
じゃあ、英語の講釈でもしてやろうか?
>>175 日本語もロクに使えない奴が英語の講釈だってよ( ´,_ゝ`)プッ
>>211 安全策としてはその通り。
このスレの回答やそのメールに対する返答を読めばある程度わかるはずだが。
216 :
161 :2006/03/05(日) 21:51:17 ID:SkO79mVG
>>215 vacuumdb -a -z でも回復しますか?
>>212 20億のトランザクションが起きたが、未だにvacuumを実行していないという意味だろ。
vacuumしたときのメッセージに出ているwarningが出ているから
意訳すると下で合っている。
>>vacuumしたら「vacuumしろよ」と出たから困ったんだろ?
>vacuumしたときのメッセージに出ているwarningが出ているから 「vacuumしたときのメッセージにwarningが出ているから」に訂正しておく。
ちしょーちしょーしょー ちしょーちしょーしょー
PostgreSQLユーザーの知能もさることながら、PostgreSQLもダメダメじゃん。
PostgreSQlは、放置するとデータロストするDB。 だが、どんなDBでも放置してよいかというのは、別問題。
しかし、個人でメンテする規模のDBで20億トランザクションは異常。 いったい、何をどうしたら、どのくらいの期間で達成できるのか。
223 :
NAME IS NULL :2006/03/06(月) 10:43:22 ID:dOuOdfCl
で、回復策はないのか?
>>223 本人?
もうすでに数日とまってるし業務用じゃないよね?
ないならデータ破棄したら?
225 :
NAME IS NULL :2006/03/06(月) 11:02:52 ID:dOuOdfCl
>>224 本人ではないが、業務使用の管理担当なので、万が一の時の策として知っておきたい
226 :
NAME IS NULL :2006/03/06(月) 11:11:33 ID:VsO9mqmP
話の腰を折ってすみませんが・・・ ちょっと教えてください。。 template0を使ってtemplate1を元に戻すにはどうしたらいいのでしょうか? (template1は普通にはdrop出来ない?) バージョンは8.1.3です。 あんまり こういうケースってないのでしょうかね。 ネットや本で調べてみたんですが、、情報が見つけられなかったもので・・・ 簡単にはtemplate1を削除、でtemplate0をコピって書いてあるのは見たんですが・・じゃ、それは具体的には?ってことですね。
227 :
161 :2006/03/06(月) 19:32:56 ID:mKHNjloC
>>220 禿同!
PostgreってDBもユーザーも駄目だなw
誰一人として、今回の俺様の質問に回答出来ないしw
ちなみに俺様は簡単に解決したが、アフォらしくてこんなDBはとっとと変えてやるwww
大手:Oracle,MS-SQL,DB2 中堅:MySQL,MSDE(MS-SQL2005ExpressEdition) 零細:MS-ACCESS,PostgreSQL,FileMaker
東大:sybase 早稲田:Oracle 慶應:MS-SQL 中央:MySQL 明治:MSDE 法政:MS-ACCESS 駒沢:FileMaker 独協:PostgreSQL
>>227 もうほとんど答はでてるだろうが、
o とりあえずpg_dumpでバックアップとる。
o vacuumdb -a -z で運が良ければ回復する。
o 原因は、全てのデータベースに対してvacuumをしていなかったから
(かもしれない)。
あと、トランザクションIDはSELECTでも消費するから。
233 :
NAME IS NULL :2006/03/06(月) 22:34:38 ID:fcELk+sR
プログラム板でも書いたんですが、posgreスレがあったので、こちらで質問させていただきます。 postgreSQL7.3で、ユニークキーの削除と、追加をしたいんですが、できません。 データを消さずにやりたいのですが、どうすればいいでしょうか? alter table でできないでしょうか?
234 :
161 :2006/03/06(月) 22:35:19 ID:mKHNjloC
>>231 では、datfrozenxid が未だに20億を超えているがコレは何故?
問題ないの?
236 :
NAME IS NULL :2006/03/06(月) 23:12:53 ID:fcELk+sR
>>233 自己レスだけど、
ALTER TABLE table DROP UNIQUE key;
であってる?あと、Key名ってコンソール上じゃなくてcommonsqlとかで調べることってできますか?
ALTER TABLE table DROP CONSTRAINT key;
>
>>231 > では、datfrozenxid が未だに20億を超えているがコレは何故?
> 問題ないの?
「では」というのは、
1. バックアップをとってリストアしなおしたが、未だに20億を越えている
2. vacuumdb -a -z を行ったが未だに20億を越えている
3. その他
のうちどれでしょうか。
あと、PostgreSQLのバージョンってもう出てたっけ?
>>238 >のうちどれでしょうか。
それくらい分かりそうなもんだが。。。
釣れますか?
テーブルのパーティショニングってどうやったらできるの? 50万レコードの激重のテーブルがあって、 5万ずつ区切って、検索速度を早くしたいです
50万程度で重くなるのは作りが悪い。EXPLAIN使え
50万程度で重くなるのは作りが悪い。BRAIN使え
50万程度も出せない貧乏が悪い。Oracle買え
245 :
NAME IS NULL :2006/03/07(火) 12:46:50 ID:cAKvatDR
俺ならMySQLにするね オラコーが目を付けたくらいだし
空気嫁
ポスグレ使いってダサダサ・・・・・・・・・・・
ポスグレって呼ぶな
250 :
NAME IS NULL :2006/03/07(火) 22:57:38 ID:OclRE+xF
ポスグレ・・・ダサッ( ´,_ゝ`)プッ
パーティションサポートされたんだ。知らなかった。
MySQLはストアドプロシージャーが無い、viewが定義できない。 解決したっけ?
>>254 ストアドもviewも5.0からあったような希ガス
256 :
NAME IS NULL :2006/03/08(水) 22:00:08 ID:bNReUZ1T
パーティションで扱えるテーブル数の上限ってどれ位
上限気にするより、適切にパーティションにわけろ。 1万とかそんなテーブル数にするつもり?? その場合は使いかた間違えてるよ。
258 :
NAME IS NULL :2006/03/08(水) 22:47:38 ID:bNReUZ1T
50万位のテーブルを使いたいのだけど…やっぱり駄目か 顧客毎のレコード数が不定の上、かなりでかくなる事が予想されるので 顧客毎にテーブルにして、検索、削除の速度を稼ぎたいのだけど…
DB分ける
260 :
NAME IS NULL :2006/03/08(水) 22:54:34 ID:bNReUZ1T
早っ。ありがとう DB分けると相互でデーターをやり取りするときに不便では? 例えば、検索結果で更新するとか…
dblinkとか。 っていうか、かなりでかくなるってよくわからん。 具体的に言えば教えてもらえるかもよ。
>顧客毎にテーブルにして おれが不勉強なのかもしれないけど こんなやり方初めて見た
264 :
NAME IS NULL :2006/03/08(水) 23:18:41 ID:bNReUZ1T
具体的には患者の治療履歴を記録、検索するものと思ってください(ってまんまやん) 患者毎のデーターは来院日毎に所見やら画像やら。画像はもしかしたら別ファイルにするかも。 患者毎のデーター量は最大で数Mバイト。テキストが主です。初診のみの患者も居るので データー量としては1Gも行かないと思います当面は50〜100Mバイト位 UPDATEは患者を見る毎に更新なので頻度は大したことないのですが 統計を取る時に結構複雑な統計らしいので、検索速度を稼いでおきたいのです。 病名等で患者=テーブルの選択が出来れば早くなるかと考えたのですが… dblink、調べて見ます。
265 :
NAME IS NULL :2006/03/08(水) 23:25:46 ID:bNReUZ1T
>>262 データーベースは素人な物でもっと良い方法が有るのかもしれません。
元々アセンブラで書いてたプログラムで、患者毎にバイナリファイルにしてたのですが
ブラウザで見たいとの要求が有って移行中です。
他に良い方法が有ったらご教示頂けるとありがたいです。
まずはリレーショナルDBの基本みたいな本を読むべきでは?
267 :
NAME IS NULL :2006/03/09(木) 00:50:12 ID:UV7gMtNJ
>>266 とりあえず
基礎SQL インプレス
SQL書き方ドリル 技術評論社
SQLポケットリファレンス 技術評論社
先輩に聞くSQLの素朴な疑問 九天社
標準POSTGRESQL ソフトバンク
POSTGRESQL全機能リファレンス 技術評論社
等を買って読み漁ってますが、お勧めの本とか有りますでしょうか?
PEN4 3.4GHz 2GBYTEメインメモリ HDDはSATA10000RPMで
顧客毎の表であれば一人分のTEXTを1m秒前後で検索出来るのですが
表を纏めてしまうと数秒掛かってしまう状況なので、この辺の情報が載ってる本が欲しいのですが…
>>267 正規化ってわかるようになった?
それができるならだいたいいいと思うけど。
データが多そうだし経験者にみてもらって助言もらう方がいいと思うよ
ここで全部さらせるならそれでもいいかもだけど
270 :
NAME IS NULL :2006/03/09(木) 04:29:34 ID:UV7gMtNJ
>>268 インデックスは張って見た事が在り半分位にはなりましたが余り改善されませんでした。
ハードディスクのランプを見ていると、表を纏めた時は、忙しなく点滅していて
どうもIOボトルネックの様な感じです。
DOS5+32ビットアセンブラなら、メインメモリをリニアに使えてやりたい放題なのですが
なかなか手こずっておりますw
271 :
NAME IS NULL :2006/03/09(木) 04:38:47 ID:UV7gMtNJ
>>269 正規化は多分理解してます。で、カルテと言う表を作って全患者のTEXT
を入れてしまった所、検索に時間が掛かってしまったしだいです。
少なくても患者の数X来院日数のレコードが必要なのでデーターは確かに多いです。
経験者は僕一人なのですが、特急の仕事という訳ではないので
色々試してみようと思います。
>>271 >特急の仕事という訳ではないので
>色々試してみようと思います。
メチャウラヤマス
検索ってもしや karte LIKE '%キーワード%' とかやってないですか? そうだとしたら遅くて当たり前。 pgestraier, pg_rast, tsearch2 + kakashi (or mecab) 等を使うか、 全文検索用のインデックスを PostgreSQL とは別に持つとかしないと。
>>271 まず問題の切り分けが大切。
遅いというのが、索引を使っての検索かそうでないのか。
1レコードを呼び出す処理が遅いのか、統計のための処理が遅いのか。
こういうところをすっ飛ばして1ユーザー(患者)1テーブルとか言い出すと電波臭がしてくる。
これ何でSJISに対応してないの('A`) 一々エンコードするのマンドクセ
テーブル1つでカード型DBの1レコード、みたいな考えか・・・ 「データベース村へ,ようこそ」がお勧めだなあ
>>275 SET CLIENT_ENCODING TO 'SJIS'
ってやれば、いちいちエンコードしなくてもいいよ
278 :
NAME IS NULL :2006/03/09(木) 11:25:11 ID:TW+6gLHB
>>274 テーブルが沢山あるのは相当でかい基幹システムで、
COBOL系SEが作ったやつとかなあ。
万単位のテーブルは一人でやる仕事じゃない。
俺一人でやった会計システムでも200超えてきたころ
リレーションを覚えきれなくなってやばいかったです。
ISAMとか勉強してから、SQLにくるもんだと思っていたよ。
279 :
NAME IS NULL :2006/03/09(木) 12:07:25 ID:PpmxJvWl
pl/rqlでフェッチしてきた変数をDBに格納したい場合、INSERT INTOで実現可能ですかね?
患者毎にテーブルを分けてしまうと統計取るときに面倒な気がするけど。
患者単位の統計なのか?。。。いや、病名から患者=テーブルを選択するって書いてあるから(
>>264 )、
そうなると、SQLの外側の処理が面倒な気がするな。SQL呼び出しも多発しそうな気がする。
いや、そのたくさんのテーブルを結合するのか?それはそれで遅そうだが。。。
インメモリDBって選択肢もあるのかもな。
日本語検索だけ、なまず使うとか。
284 :
NAME IS NULL :2006/03/10(金) 05:45:03 ID:2CfbRVGE
>>272 >メチャウラヤマス
お金にならない仕事なので多分ウラヤマシクないと思いますw
なので、せっかくなら勉強がてらPOSTGRESQLをマスターしたいかと…
285 :
NAME IS NULL :2006/03/10(金) 05:55:29 ID:2CfbRVGE
>>273 LIKE使ってます。ただ、患者毎の処理なので1レコード内の検索で済み全文検索
不要かと考えてたのですが…そちらの方が早いのでしょうか?
全くいじった事が無いので勉強してみます。
構文解析みたいな物なのでインデックスが使えるかどうか…
286 :
NAME IS NULL :2006/03/10(金) 06:09:10 ID:2CfbRVGE
>>274 1レコードを呼び出す時間が遅いです。実データーを入れた時
267に書いたように数秒掛かってしまいます。
唯、 generate_seriesで50000000レコードのテーブルを作成してインデックス
をつけてやると、インデックスを付けるのに200秒程度掛かりますが
1レコードの呼び出し時間は0.4m秒前後と十分高速になるようです
実データーとの差が何なのかは今調査中です。HDDのアクセスランプを見た感じ
データーが飛び飛びに記憶されている為に遅くなっているのでは?との印象ですが
未だほんとの所は不明です。
287 :
NAME IS NULL :2006/03/10(金) 06:11:47 ID:2CfbRVGE
288 :
NAME IS NULL :2006/03/10(金) 06:25:40 ID:2CfbRVGE
>>281 最終的にやりたい事は、投薬、治癒等の関係を患者毎に抽出して
数値化した物をカウントするので、患者間のデーターは無関係で
患者一人毎に処理して行きます。
ですので、複数の患者テーブルを同時にセレクトや結合する事は有りません。
患者単位で文書を処理して数値化した物を一つのテーブルにするつもりなのですが…
説明が下手ですみませんorz
289 :
NAME IS NULL :2006/03/10(金) 06:27:26 ID:2CfbRVGE
>>282 良く聞く名前ですが使った事が無いので勉強してみます。
>>286 カルテ関係のデータ構造を予想で書くとこうなると思うのだが
カルテ番号 プライマリーキー
患者ID、 受診日 副次キー(非ユニーク?)
その他の情報
必ず患者単位の処理をするなら where 患者ID = 'xxx' が問い合わせに含まれ
EXPLAINでプランを見れば最初に副次キーで患者の絞込み(索引の範囲スキャン)
がされているはずだがどうだろうか?
この辺の動作が正しくてなおかつ遅いようなら、OSやメモリ、HDD周りの問題かもしれない。
データベースアクセスでは、メモリからアクセスすることがあるから HDDアクセスランプでは確認できないぞ。 一般論としては。。。
>>286 比較しているgenerate_seriesテーブルも実データテーブルも同じくらいの行数で、
どちらも索引付きの列を条件に絞り込んでいるのですよね?
その時の絞り込みの条件は、等価条件ですか?それとも、Likeや不等号などの非等価条件?
前者であればそんなに時間差が出るものなのかな。
後者であれば、場合によっては索引が役立ってないこともある。
>>288 「患者単位の処理結果をひとつのテーブルにする」のは、
SQLとは別に行う(SQLの結果をJavaなどの別の言語でまとめる)、ということなのですね。
で、そのまとめる部分の処理時間は問題ない(単純に並べるだけとか)ということかな。
であれば、動的にSQLを生成してテーブル名を変更しながらSQL処理をする、というのもひとつの方法かも。
ただ、投薬や治療などを条件に患者を絞り込む(つまりテーブルを特定する)ことはできなくなるので、
常に全患者を処理対象とすることになりますが、この辺は問題ない?
>>292 でも触れたけど、絞り込みの条件は患者番号による等価条件検索?
それとも、医師所見などの文章中からLike条件でキーワードを検索?
患者毎にテーブル分けするなら、患者番号による検索はできなくなるよね。
患者番号をテーブル名にして直接テーブルを指定することになるかと。
294 :
NAME IS NULL :2006/03/10(金) 11:33:19 ID:jgzwRyRV
静的SQLだけでアプリケーションが書けるケースは稀。 SQL文は当たり前のように動的生成されるもんだよ。
>>288 >投薬、治癒等の関係を患者毎に抽出して
がどういう処理なのかわからんけど、入力時にカウントできないの?
あと、
・like検索でインデックス使えてる?
・抽出するのが特定の単語で決まってるならそれだけ別テーブルに持ってもいいかも
PostgreSQLって、管理できるDBの数って制限ありますか? 1000DBとか管理できるんですかね?ディスクの容量は無視したとして。 バージョンは8です。
>>294 誰も静的SQLだけで出来るとは書いてないと思うぞ
おそらく293に対して勝ち誇りたいのだと思うが、
単に、テーブル名を変更する方法として動的って書いてあるだけに読める
まぁ、俺はクライアント側でSQL文を組み立てるから、厳密には動的SQLとはいわんけど。 それに、テーブル名を変更するのは、たいていテーブル設計が悪い。
代案も出せず否定だけか。
いや、ちょっとしか読んでないから、代案だせん。
>>286 タプルの物理的な並び順は、インデックススキャンのコストに影響するよ。
generate_seriesしたやつを別テーブルにorder by random()して
いれて比較するといいかもしれない。
302 :
NAME IS NULL :2006/03/11(土) 08:55:11 ID:2HzSNpE4
色々ありがとうございます。非常に参考になります。 昨日は疲れて寝てしまいました。今、出先なので、帰ったら書き込ませて頂きますorz
303 :
NAME IS NULL :2006/03/12(日) 07:09:24 ID:eqZ6XIiC
>>290 予想の通りです。で、EXPLAINは敷居が高くて見てなかったのですが
簡単にする為
select * where 患者ID = 'xxx' from カルテTBL
で検索して数秒掛かっていたので、全患者を処理するにはちょっと
遅すぎる為、せめて2m秒未満に抑えたい所です。
テストに使っていた実データテーブルはDROPしてしまっていたので
再度入れてEXPLAINを見てみます。ただ、実データテーブルは1日がかりで
変換しながら入れたので出来れば
>>301 にご教示頂いた方法で再現すると良いのですが…
>>291 検索している数秒の間、ランプが激しく点滅していたのと
シーク音がしていたのでキャッシュに収まりきれて無い感じでは有りますが…
確かにそうですね。
304 :
NAME IS NULL :2006/03/12(日) 07:10:27 ID:eqZ6XIiC
>>292 比較しているgenerate_seriesテーブルは実データテーブルよりも
10倍位大きくしてありますがgenerate_seriesテーブルの方が断然早いです。
実際は日付による絞込みとLikeで文書の中から単語検索したいのですが
遅すぎるのでどの辺りに問題があるか調査する為、患者IDで絞り込んで見て
検索時間を実測し使用可能かどうかの検討中です。
>>293 患者単位の処理結果をひとつのテーブルにするのは今の所PHPを予定してます。
本来はSQL一発で出来ると良いのですが、複数の文書から治療期間や副作用の程度等
を数値化しないといけないので、ロジックをプログラムで実装した方が良いとの判断からです。
統計を取る患者は使った薬の名前や病名等で選択する為
投薬や病名等は、診察時に日付などと一緒に別テーブルにもUPDATEして
この別テーブルを元に統計に関する患者を割り出す様にしようと考えてました。
(現状のアセンブラプログラムと同じ作り)患者毎にテーブルを作らなくて済めば
必要なくなるかも知れませんが…
305 :
NAME IS NULL :2006/03/12(日) 07:11:26 ID:eqZ6XIiC
>>295 >投薬、治癒等の関係を患者毎に抽出して
の処理は複数の来院記録からの文書処理な上、検出する単語も薬名等特定の単語だけでは無く文書として
処理しなくてはいけないので、入力時のカウントや別テーブルに持っていく等は難しいと思います。
未だ、文書処理の検討迄進んで無いのですがorz like検索でインデックスって使える物なのですか?
素人目には、文字列が変化するとインデックスも別物が必要になりそうで…
>>301 order by random()なんて方法が使えるのですね(感動
テストテーブル作るのにrandom()使いたいと思ってたのですが
使い方がいまいち良く判らなかったので、外部プログラムでUPDATEしてました。
>>304 generate_seriesテーブルも実データテーブルも
同じデータ型の単一列(患者ID)の等価検索ですよね?
こちらでは実際に速度を計ってみているわけではないので、あくまでも仕組み上からの推測ですが、
「双方の検索条件が同じ(同じデータ型の単一列に対する等価検索)」
「双方の検索条件列にB-Treeの索引が張られている」
「双方共その索引が使用されている」
「双方共、同じくらいの行数(実際には速い方がより行数が多いらしいですが)」
ということであれば、そんなに速度差はでないような気がしますね。
ちなみに、患者数の想定人数はどのくらいなのでしょうか?
ちなみに、like検索では先頭が固定じゃないと索引は使われません(like '%風邪%' は索引は使われない)。
ちなみに、↓矛盾してません?
304>投薬や病名等は、診察時に日付などと一緒に別テーブルにもUPDATEして
305>処理しなくてはいけないので、入力時のカウントや別テーブルに持っていく等は難しいと思います。
>>305 では別テーブルに持っていくのは難しい、とありますが、
>>304 では別テーブルにもUPDATEするように考えているらしいですが。
307 :
NAME IS NULL :2006/03/13(月) 04:21:55 ID:kf2AaTFQ
>>304 generate_seriesテーブルと実データテーブルで実は若干の違いがあります。
実データーテーブルでは患者が来院の度にインサートするので同じIDが複数あります
所がSQLに疎いのでgenerate_seriesの方は重複しない番号となっています。
又、実データーテーブルではTEXTの欄は文字数が毎レコード違いますが
generate_seriesの方はTEXTの欄が50バイトのANK文字となっています。
索引が使われているかは
>>290 でご指摘された様にEXPLAINを
見ておけば良かったですね。未だ実データーテーブルを復旧出来てないので
復旧しだい、実行します。
患者の想定人数=500000人で、カルテテーブルには患者が来る度に
レコードが一つ増えていきます。同じ患者が1000回来院すれば同じIDが
1000レコード存在する事になります。
304と305の違い、説明不足ですみません。
後で統計処理を行う際、患者の選択をする為のテーブルは診察時にUPDATEします。
これは病名、薬名程度の決まった物で済みます。しかし実際の統計処理は
薬の名前や病名だけでは無く、カルテ文書として処理する必要が有り
予めカウント出来ないです(開発の時点で必要な要素が不明)
お約束だがanalyzeしてる?って話は出たっけ?
まぁ、パーティション使うにしても、患者毎にパーティションわけるのじゃなくて、 普通はレンジパーティションを使って複数の患者毎にわける。 患者ID1〜10000はこのパーティション、10001〜20000とか、パーティションキーが この場合患者IDだけど、何をパーティションキーにするかは、データが検索されるときに もっとも頻繁に使われるキーがベスト。
>>307 がさっさと、テーブル構造と使用しているSQL文をさらせば、
こんなレスが長引くこともないのは事実。
俺も含めてみんなはっきりわかってないから、みんなあーだこーだ、言って、
話に収拾がつかなくなっている。
確かに
久々に来たらまだ続いてた
永遠にループです
あぼーと
startup
>患者の想定人数=500000人で、カルテテーブルには患者が来る度に >レコードが一つ増えていきます。同じ患者が1000回来院すれば同じIDが >1000レコード存在する事になります。 原因はこれ。 ストレージの劣化。 一度フルバックアップを取ってからdropdbして書き戻しを行うと驚くほど速度が上がる。 商用DBでは常識なのにPostgresではあまり言及されていないのが不思議。
>>316 本番運用で遅くなったんじゃなくて、これまでファイルベースでやってたデータをロードしたら遅かったって書いてるじゃないか。
ロードしたてのを一度フルバックアップを取ってからdropdbして書き戻しを行うと驚くほど速度が上がるのか。
そんなことできるタイミングあるの? 病院の人は開発中だから出来ると思うけど
auto vacuum でいいだろう
320 :
NAME IS NULL :2006/03/16(木) 21:24:09 ID:3BwNbTx0
Linux板から誘導されてきました。
http://www.a-yu.com/pub/postgres01.html ここのページを参照しながら設定を行っていました。
Version番号やその他の設定は自分の環境に合わせて実行しています。
ユーザー名postgresでは無事にデータベースを扱えるようになりました。
ところが、新しいユーザーを作ろうと、
% createuser penguin
とすると、
[postgres@localhost pgsql]$ createuser penguin
Shall the new role be a superuser? (y/n) y
createuser: creation of new role failed: ERROR: syntax error at or near "ROLE"at character 8
というようなエラーが発生してしまいます。
「ROLE」の近くでエラーが発生しているというのは読み取れるのですが、
どの設定ファイルのどのあたりで「ROLE」に関するエラーが発生しているのかというのが分かりません。
PostgreSQLで同じようなエラーになった方等いましたら、
エラーを回避するためのアドバイスの方よろしくお願いします。
>>320 /usr/local/bin/createuser penguin
ならばどうなるか?
>>321 実は、いろいろ試してたところ、症状が悪化してしまいました…
tarボールでインストールしていたのが原因かなと思ってRPMでインストールし直した所、
[postgres@localhost pgsql]$ /usr/local/pgsql/bin/createuser penguin
Shall the new role be a superuser? (y/n) y
createuser: could not connect to database postgres:
FATAL: could not open file"/var/lib/pgsql/data/global/1262": 許可がありません
というようなパーミッションのエラーが発生してしまうようになってしまいました…
実際に権限は以下のようになっているのですが
[postgres@localhost global]$ ls -l
合計 132
-rw------- 1 postgres postgres 8192 3月 16 22:30 1260
-rw------- 1 postgres postgres 0 3月 16 22:30 1261
-rw------- 1 postgres postgres 8192 3月 16 22:30 1262
RPMをアンインストールしてtarボールでインストールし直しても
同じような症状が発生するようになってしまいました。
ググってみたところ、SELinuxが怪しいかなというところにこぎつけています。
http://ml.postgresql.jp/pipermail/pgsql-jp/2005-April/018745.html 権限について調べてみます。
余計な事しなければ良かったです…
だいぶ分かってきました。 # /etc/rc.d/init.d/postgres start としてみたところ、 [root@localhost init.d]# ./postgresql start An old version of the database format was found. You need to upgrade the data format before using PostgreSQL. See /usr/share/doc/postgresql-8.1.3/README.rpm-dist for more information. postgresのサーバが古かったみたいです。 ドキュメントを読んで調べてみます。
目隠ししたままアクセル全開だなw
もうわけ分からなくなったので、片っ端からpostgresと名のつくファイルを削除して yumでインストールしたら直りました。 ありがとうございました。
326 :
NAME IS NULL :2006/03/17(金) 02:52:07 ID:XgLEg+Wq
tar-ball以外で入れると、どこに何が出来るか追いきれない
と思うのは漏れだけですか。
>>324 まったくそのたうりな飢餓。
CライブラリのGetValueで文字列を取得して、その文字列の長さを取得する際にPQgetlengthを使うと思うのですが。 マニュアルにはstrlen()と同じと書いてるにも関わらず、フィールドの大きさが返って来るのは何故なんでしょ。
仕様。 普通にstrlen()でいいじゃん。
って、ちょっとドキュメント見てみたよ。 フィールドの長さ指定の無いTEXT型においてのみ strlen()と同一って書いてあるじゃん。
「のみ」とは書いてないか。
でも
>>327 の内容みると、事前にフィールドサイズがわかってるってことは
TEXT型じゃないフィールドのことだよね?
331 :
327 :2006/03/17(金) 22:55:17 ID:???
char(n)だと空白部分に半角スペースが入るんですねorz 勉強不足でした。text型に変えてみます。
>>326 それは単なる知識不足か誤解だな。
君の後を引き継ぐ人は君がどこに何を入れたか追いきれず呆然とするだろう。
333 :
NAME IS NULL :2006/03/18(土) 02:13:48 ID:7qplQcUf
dpkg -l 、 dpkg -L とか。 rpm とか他でも似たようなのあるだろ。
gif画像をフォームからアップロードして、 ラージオブジェクトに登録し ブラウザで表示させるスクリプトをつくったのですが 画像が壊れていますという表示がでてうまくいきません。 一応以下の点は確認したので、 どこに原因があるのか、よくわからず、 ずっと悩んでいます どなたか、エロイ人で心当たりのある方がおられましたら ご教示よろしくお願いいたします。 select * from pg_largeobject where loid=該当oid; を行うとデータは入っている header("Content-type: image/gif"); で出力するmime-typeの指定は行っている. mb_http_output("pass"); はきちんと行っている. 同じ一連のスクリプトで 画像でなくhtmlをアップロードした場合 はきちんとページが表示される。
336 :
335 :2006/03/18(土) 21:14:50 ID:???
PHPで という言葉がぬけてました スマソ
>>335 そのアップロードした画像を再度保存してみて、元の画像とMD5ハッシュ値で比較したらきっと違ってるんだよね?
ってことは、本当に壊れている。
入れるときに壊れたのかかもしれないし。
バイナリモードで出力してないというオチに一票。
ディレクトリやフォルダみたいな階層構造ってテーブルでどう表現すれば良い?
CREATE TABLE DIRECTORY_LIST( DIRECTORY_NO INTEGER, PARENT_DIRECTORY_NO INTEGER, DIRECTORY_NAME VARCHAR(256), CONSTRAINT "DIRECTORY_LIST_pkey" PRIMARY KEY (DIRECTORY_NO) ); tu-ka,PostgreSQLと関係ない質問な気もするな。
PostGIS使ってる人います? Windows版でポリゴンをtransformすると落ちる
すみません、質問させてください。 Postgresql8.0.3 + fedora core4 + +Apache2.0.54 + PHP5.1.2 + PDOで使用しています。 PHP内で、 $DB=new PDO('pgsql:dbname=testdb','testuser','test') と記述し、fetchを行なうスクリプトを書いています。 コマンドラインから php test.phpを実行すると、 DBへ接続が出来、フィールドの値を取得する事が出来ますが、 ブラウザから127.0.0.1/cgi-bin/test.phpを開くと、 "SQLSTATE[08006][7]could not connect to server:Permission denied is the server running locall and accepting connection on Unix domain socket "/tmp/s.PGSQL.5432"? と出てしまいます。 ユーザーも存在しますし、ポートもあっているのですが、どこを確認したらよいでしょうか?
コマンドラインからの実行時は、環境変数が効いてること無いですか? php のソースで省略無しでサーバ名からポート番号まで入れるとどうでしょう?
344 :
342 :2006/03/20(月) 19:19:18 ID:???
>343さん、アドバイスありがとうございます。 ホスト名とポート番号を接続文字列に入れてみたのですが同じでした。 ただ、メッセージは少し変わりました。 "SQLSTATE[08006][7]could not connect to server:Permission denied is the server running on host 127.0.0.1 and accepting TCP/IP connection on Unix domain socket "/tmp/s.PGSQL.5432"? コマンドラインからの接続自体はhost=localhostでも127.0.0.1でも成功しているようですから、 Apacheに何かPDOの為の設定をしなければならないようですね。
ldconfigはどうですか まあコマンドラインで動いてるしエラーもpostgresqlが出してるっぽいので 問題無いとは思いますが あとSELinuxは邪魔してないですかねえ
346 :
NAME IS NULL :2006/03/21(火) 23:54:26 ID:a1kVAgbN
Oracle の all_tab_columns みたいに テーブル名称、列名称、型、データ長、NotNull制約有無、デフォルト値 を取得したいのですが、SELECT文はどのようにすればよろしいでしょうか? \d テーブル名ではなくて、select使う方法で知りたいのですが、、、
>>346 psql -E で起動して\d table_name 打って見れ。
348 :
346 :2006/03/22(水) 09:47:56 ID:9HRcWdXB
>347 お前は文盲か?
>>348 ヒントだよ。やってみればわかる。
-E オプションが味噌。
346を騙ってるのかどうか知らんが、やってみもしないで文句言うのではないかと 心配していた。もし本人ならカスだな。
351 :
346 :2006/03/22(水) 10:43:43 ID:???
俺、会社やいじめっ子達からよくカスって言われるんだよ。 意味が良く分からないけど、どうやら誉め言葉らしいという事は理解している。
人は褒められて育つ。
353 :
346 :2006/03/22(水) 11:12:29 ID:???
ほほう・・・
354 :
342 :2006/03/22(水) 12:35:47 ID:???
>345さん ありがとうございます! SELinuxビンゴでした!
>>346 information_schema という解もあるけどね
356 :
NAME IS NULL :2006/03/27(月) 16:03:40 ID:wpZsKoyT
15万行ほどレコードをDELETEしたんだけど、やっぱり元にもどしてほしいと言われました。 UNDELETEするの無理?
初心者です potsgres用のユーザー作成のため @adduser postgres Auseradd postgres Bgroupadd postgres Caddgroup postgres とコマンドしてみたんですが、4つとも command not found になってしまうんですがどうしてでしょうか? 誰か教えてください。
>>357 なんかpostgres以前の質問のような気がするが。
OSは?
>>358 fedora core4 です。
すいません、素人丸出しで。 マニュアル本どうりにやってたらつまづいてしまいました。
基本的に/sbin や /usr/sbin にはPATH通って無いと思うんで、 /usr/sbin/adduser 以下同様、としなさい。
>>360 ありがとうございます。 PATHが通ってない・・・
m( )m 恥を承知ですいません、もう一度質問させて下さい。
postgreSQLをインストールするまえに、まずユーザーアカウントを作れ と書いてあったので
adduser postgres
とコマンドを打ったら command not found て出てしまったのですが・・
LINUX歴 1ヶ月 なんでもしかしたら、すげー勘違いをおかしてるのかも・・・
泥縄で質問せずに、入門書読んで出直せ。
だから
/usr/sbin/adduser postgres
とやれって言ってんだよ。
これが読み取れないようじゃ、
>>362 の言うとおりにしたほうがいい
でもまあ Fedora Code4 だと、インストール時に何選択したかにもよるが すでにユーザーpostgresは作成されてて、インストールもされてる気がするな。 邪魔だから消して自分で入れなおしたほうがいいけど。
そのようなファイルやディレクトリはありません と出ました。 わかりました。入門書、他に何冊か買ってみて調べてみます。お騒がせしてすいませんでした。
>>365 Linuxではadduserではなくuseraddが標準。
入門書ばかり何冊も買うんじゃなくて、4000円くらいの分厚い奴を買わないと駄目。
まさかroot以外のユーザがadduserしようとしているのではあるまいな
すいません、やさしそうなかたがいらっしゃるみたいなので、もう一回だけ粘着させてください
>>364 えっととりあえず最初に入っていたやつは remove して消しました。
>>368 root はとっていると思います。 あれですよね su って打ってpassword 打ち込むやつですよね
>>369 いえ、4つともやってみました。
subinディレクトリ内に useradd という実行ファイルがあるのですが、
/user/subin/useradd postgres
というのは、つまり useraddの実行ファイルを起動させて それにpostgresとぶち込めってことを
命令させてるってことでいいんですか?
>>356 普段やらない作業で、データの削除を大量に伴う場合
バックアップぐらいとっとくのが普通なんだが・・・運用マニュアル大丈夫か?
とりあえず無理。
データベース板の人達は慣れてないだろうけど、 これが最近流行中の初心者を装った釣り
情報を小出しにするのがポイントだよな
全角アルファベットを混ぜたり、機種依存文字をあえて使うのもそれか。
su で - 付けてないと予想。
最後に大どんでん返しが用意されてないと釣りの要件を満たさない。 例:言い忘れましたけどこないだからHDDにエラーが出てました あっけにとられた面々を後に「自己解決しますた」と言って颯爽と去る。
ああー なんかオレのレスで盛り上がってるwww すいません、マジ素人ですよオレ。 一月以内に LINUX(fc4)とPHPとposgreでサーバー立てようと 思ってまして、これから本気モードで勉強します。質問はとりあえず置いておくので 答えてくれるかたがいらっしゃったら答えてください。 ちなみにwindows歴は95から使ってますが、LINUXはまだ1月です。 つい何日か前まで、 cd/usr/ CDって何? みたいな感じでしたwww 空気は嫁ませんが、みなさんのレベルであれば息抜きぐらの程度の質問だと思いますので 気分転換ぐらいで答えてくれたら幸いです。 もしコテハンで答えていただければ僕の企画が うまくいけば、絶対に借りは返します。
>>377 おれはWindows3.0から使ってるよ
Windows使ってたのにcd知らないとは…
>>375 すいません、それでした!!
su - ってこれやらんと駄目なんですね。 入門書に書いてねーし。マジつかえねー
本当にありがとうございます。
381 :
NAME IS NULL :2006/03/28(火) 02:09:15 ID:3mxdC1F1
char型とtext型は使い分けた方がいいですかね?
>>381 postgresのマニュアルには基本的にすべて全部
textでよくて、charとかは互換性維持のためにあるだけ
みたいなことが書いてあったような希ガスるので確認よろ
>>356 PITR使えばいけるハズだけど、事前に設定が必要。
設定してないならご愁傷様でした。
>>383 コードなどもtextでOKなんですね?
>>356 そもそもそれほど大量にDELETEする前にバックアップとか何故取らんの?
su - なんて使わん。 Postgres関係はすぐpostgresにスイッチするし、 sbinにパス通ってもろくなことがない。 まあ作業はsudo -s ばかりだが・・ /usr/sbin を /usr/subin にタイプミスしたのも素でやったのか どうせbashなんだろ?TABキーで補間するようにすれば間違わん。
独り言はブログで
389 :
NAME IS NULL :2006/03/29(水) 21:12:47 ID:3EPL9Zak
誰か postgresql の認定試験受けてたらどんなだったかきかして
試験内容について第三者に話してはならない、のが受験条件。
391 :
NAME IS NULL :2006/03/30(木) 03:39:18 ID:4WjpxBFJ
>>389 内容に関してでなければ、おけと思われ。
テスト本出てるでしょ。あれ問題と答え見て理解して、
そんで実際にやってみて、7割りぐらい出来たかなと思えば取れます。
落ちたとか難しかったって意見は聞かないです。ま その程度です。
392 :
NAME IS NULL :2006/03/30(木) 12:16:03 ID:iw9+zW9U
おととい、JDLのソフトが入っているマシンを見たら、 postgresql なんてサービスが動いていた。 ふーんデジタル研究所ってそういうところなんだ。
文作くんが懐かしい。 本社、お城みたいなんだよなあ。 免許更新に行くと前を通る。
394 :
NAME IS NULL :2006/03/31(金) 11:32:07 ID:o2i7u1Xm
>>393 お城かあ、すごいね。この間デ研社長と同僚だった大先生が、トンデモな営業を
?まえて説教していたよ。 世の中って実に怖いねえ。
postgresqlで動いてるってことは、aclをゴニョゴニョすればデータ抜けるね。
いやあ、イイ仕事が出来そうなヨカーン。
鮫洲も府中も二俣川も行ったことあるけど、JDL知らんなあ と思ったらそっちか
上の写真の芝生、合成じゃないんだよ。 23区内だってのに、庭がでかいのなんの。 最初、迎賓館とかそういう建物かと思った。
398 :
NAME IS NULL :2006/03/32(土) 19:26:13 ID:KBpIoo38
ウチの会社、MSアクセスで作ったパッケージソフトを500万で販売してる。 開発の人がいうにはぼったくりらしい。売り物にするならACCESSは有り得ないらしい 俺は営業だけど顧客からそういう不満は聞かない 俺はいつかは独立したいのだけどPostgreSQLは医療向けのソリューションに適しているのですかね? 本で調べてたらこれが一番良さそう。 ちなみに、個人情報保護法の関係でクラサバは不可能で、スタンドアローンな個々のシステムにDBエンジンを持たないといけないのでORACLEは難しいですね
Access... 1万件超えてくるとダメでしょ。 うちは Oracle だったけど 値段はそのままに PostgreSQL に変更して 利益率を上げてるよ。ウマー。
OracleをPostgresにしたら、詐欺だろw
401 :
NAME IS NULL :2006/03/32(土) 23:39:39 ID:Gvf7E6wT
>>399 ええっ!そうかなあ。
俺の作らされたシステム、20万レコードも取引データがあるよ。
SEの親父が、COBOL→Accessという頭だから、どうにもならん。
何気に壊れるのが怖いから、毎回最適化して閉じたり、
マスターは別ファイルになっている。
でも、作り直しが入って、俺のプロジェクトになったら、
Postgresql+PHPで直すつもり・・・つか、もう既にいくつかの
テーブルがODBCでサーバへ行ってる。
402 :
NAME IS NULL :2006/03/32(土) 23:41:14 ID:Gvf7E6wT
>>398 Orcaの事を指しているなら、あれは化石の7.2ベースだから、
俺は洟も引っ掛けたくないけど、向こうから迫ってくるんで、
酒用が無いかもしれない。
403 :
NAME IS NULL :2006/03/32(土) 23:46:53 ID:Gvf7E6wT
> 個人情報保護法の関係でクラサバは不可能 は? だれに騙された? 素人が扱う場合のWindows端末と、クローズド環境LANで のC/Sで、リスクアセスメントをやってからそういうことを書けつの。 ネットワーク周りが弱いSIのいいそなこった。 これだから、素人は困るよ。
何で作ろうが私用を満たしていれば問題なし 逆にOracleだろうがpostgresだろうが使用を満たしていなければお話にならぬ
>404 MSに取り込まれるよりも俺はポスグレかmysqlの方がお勧めだと思うがMSSQLは開発楽なんだろうな〜 でも、データベースはこれからどんどん値段下がるのかね? ということは、開発者の給料もどんどん下がるのかね?何だか不安になってきたよ・・・・ >405 ふ〜ん
運用に関しては、まだ商用の方が圧倒的なアドバンテージがある。
ポスグレって呼ぶなぁ
ポストグレよりはマシw
グレテヤル
ポストグレって言う人いるな〜 俺の「ス」やるから、頼むからちゃんと付けとけと思ってしまう。
follow the white rabbit.
PostgreSQL だから、SQL を省略すると、Postgre でポストグレなんだよな、 FAQには、「ポストグレス」「ポストグレエスキューエル」「ポストグレスキューエル」「ポスグレ」 の例は出てるが・・・
昔々、postgres95とかあったから、「ポストグレス」って呼ぶ人が多いように思う。 自分は「ポストグレスキューエル」だけど。 「ポストグレ」って呼ぶのは素人さん(お客さん)しか会ったことないかな。
ingres の次だから postgres これ常識 ケツが SQL になったのはいつ頃からだったかな。 それ以降のユーザはポストグレだと思う。
だからポストグレスでいんでしょ。
厳密には、 パスゲェスィーケル が正しいかな
「ポストグレ」って言いかけて途中でやめた気持ち悪さがあるよなあ ポストグレスに慣れてると
だから俺の「ス」をやるからちゃんと付けとけと(ry
>>418 パスゲシケル? かえってわからんわ! 何語やねんて言われるで。
>>420 おまえだれやねん!
ここは間を取ってポストグレフってことで一つ
ネイティヴだろw
こなったら、リヌースのようにネイチブさんに発音してもらって音声ファイルをあぷして もらえると乙。
カタカナになった時点でどうでも良い。 PostgreSQL を ポテス と呼ぶスレ
pg ピージー
427 :
408 :2006/04/03(月) 21:05:08 ID:???
こんなに盛り上がるなんて感激
428 :
NAME IS NULL :2006/04/03(月) 21:57:57 ID:V5RtvizP
そもそも、Postgreってどういう意味だろ? MySQL とか MiniSQLとかはパーソナルユースっぽいね
簡単な歴史ならシーラカンス本の最初に載ってる。
416で正解じゃないの?
あのシーラカンスは実はロボットだって知りませんでした。
ロボットシーラカンスと言えばダライアスを思い出す。って俺もオッサンだな…
>>424 こないだカンファレンスでJoshがきたときのmp3があるじゃん。
ポストグレスキュゥエルかポストグレスって言ってるよ。
もうポスキューで良いよ! PostgreSQL をポスキューと呼ぶスレ
もうPQでいいじゃん。(うそ)
こう言ったネタは続くね。Linuxの時に経験済み。でも結構大事かも。
>>424 Thank U.
という事でやっぱネイチブてきには
ポスゲス の2音構成(アクセントはポ)
か
ポスゲキューエウの3音構成(アクセントはキュー 最後のLは無音に近い?)
って事になるんでしょうね。
ポストグェーうぇっうぇっ
Upps..... s/424/433/ U know..
(ヽ、 _ヽ、 )\ ヽヽ _ヽ、 ⌒ ヽ、 \\ \ ̄ __ )ノ ヽヽ ∠⌒ / ) ⌒ヽ | | ) / ゙̄- く \ ノノ / /ノ^)___)ノl ヽ_// / //(/ !_|_| ヽ三ヽ レヘ |j(/l_/ |ノヽ |──) ノ (/l_/ /⌒| | | | ! |二 二ヽ / |_/__| | | -| | ノノ ノ── 、) / `───| | ノ -| | |/(()) ヽ /⌒) ∧ ヽ/_// /j()ノ_ (()) i // ノ |_// / ̄ ̄`\ (()) j (ヘ  ̄ | ヽ \ / )/(/) / ⌒ |⌒ヽ |\ /i\ /| )ヽ |/ | ! / | ノ | ( ( )ヽ | / / ( ((| ) ヽ ( ) | / / ヽ| ( ) ) ( 、 / ) |ヽ、_ __ ノ ) ( ( ヽ (( / /−、| ( ヽ ( ) ) )ヽ ヽ_ノ | | ヽ ノ ) ) ( ( ノ ) | | ( ( ( ( (_ ノ )( ( ( / /^) ) ) ) ) / / / ( ( _ノ (/__/// // // ) .ト、. /ヽ |\ /ヽ /”゙ォv' .// // / |. ヽ./ | ヽ! .`、/ ヽ,/ ' /_ _ : --! ,,,,, ,,,,,  ̄./ \ ,illllli,,,,,,,,, lllll llll / _ヽ ,llllllllllllllll!' ,,,,,,,,,,,,,,,,,,,,  ̄ ̄ ̄''_,- \ ,illll!' ,illll!' !!!!lllll!!!!l゙` ,,, ,,, ,r-'''゙ ̄ > ゙゙゙゙' .,illlll゙ lllll| llllllllll!!!!! llll !ll! iiii,, <_. /_ .,illlll' ,,,,,,,llllll,,,,,,,,,, ,,,iillll!!゙ >  ̄/ ,llll!!' lllllllllllllllll!!!l_ :ll!!!゙゙゜ <_
>>435 いやほんと、まじで大事。
Mavenがいまいち流行らないのは
読み方がそこここでバラバラってのも大きいよな。
Linux を何て読むか、なんてのが数年前に
ぽきゅ〜
Postgre を家で勉強するためのソフトとかないですか?
mysqlの勉強をしたいならmysqlを入れればいいし、 PostgreSQLの場合も然り。
>>442 釣りっぽいけど。
Linux か Windows を用意する Solarisでも可。なんでも可。:-)
PostgreSQLをインストルする
DBを作ってみる。
SQLで テーブルを作ってみる。
SQLで select ,insert,delete,update とかして遊んでみる。
SQLで commitとかrollbakとかして遊んでみる。
と ここまでやれば、あとはクライアントとのI/F
をいろいろ変えて遊んでみると幸せになれるでしょう。
勉強じゃなくていろいろいじって遊ぶのが大事かと。
う〜んまぁそうですよね 知識が全然ないですが調べながらやってみます
446 :
NAME IS NULL :2006/04/06(木) 10:07:20 ID:JbhYYUUs
postgresでは主キーをtext型にしてもよいものでしょうか?
ポックキュ
448 :
NAME IS NULL :2006/04/06(木) 13:12:50 ID:70rk/E0E
ここで真面目な質問しても、良いものでしょうか? テンプレ見ても書いてなかったもので ・・・
俺で答えられる範囲なら何でも答えてやるぞ。 俺は42歳、独身、素人童貞。 初体験は21の時、地元のスナックのママにお金渡してスナックの2回で。 23歳で某地帝を卒業後、シンクタンクに就職。 統計ソフトなどを経験し、データベースのプロジェクトに加わる(事実上の左遷) シンクタンクを退職、現在求職中
451 :
448 :2006/04/06(木) 13:52:47 ID:70rk/E0E
>>449 その左遷されたときの経験が生かせるチャンスかも知れません。
postgresql で C言語で記述するユーザ定義関数を作っています。
pgsql 側と C関数側で、ヒープへのポインタをやり取りする方法
pgsql → C関数 : 引数にて
pgsql ← C関数 : 戻り値にて
って、ありますか?
C関数側で palloc() & repalloc() & そのヒープへのデータ操作 を行ない、
pgsql に渡したいのでつ。
453 :
NAME IS NULL :2006/04/07(金) 09:55:39 ID:O1sQuHCO
SQLで直接メモリ空間にアクセスは出来ないお Postgre を改造すれば出来るお
>>453 そんなおとるしい質問だったのですか。
正直さぱーりわかりませんでした。
うーむ未熟物 出直してきます。
455 :
NAME IS NULL :2006/04/07(金) 10:47:35 ID:IwmuPLeT
>>451 なんでDBを操作するのにヒープが関係するんだ?
DB自体を作っているのなら、この板には該当するスレすらないと思う。
>>451 がDBを利用する立場であれば、何かDBをさっぱりわかってなさそう。
DOSの時代に直接ハードを叩いていたような、
すべてを自分で操作しないと気に食わない人って感じがする。
>>455 ごめんね。 最終的な目的を書くべきだったね。
ユーザ定義の集約関数を作りたい。 具体的には、percentile() ね。 メジアンとか
中位数、あるいは第1四分位と第9十分位とかって言葉、ご存知ですか? これらを
返す関数でつ。
group by でグループ化されたレコードのあるフィールドを、( sfunc() にて ) ソートしながら配列に格納し、
グループ内全部のフィールドをソート&格納し終わったら、( finalfunc() にて ) 例えば中位数 ( メジアン )
なら、中央の値を集約値として返すような関数を作りたいんだ。
「 このソートしながら配列に格納 」とかが、SQL で書いたら大変そうだし出来たとしても重そう。
だから、C言語関数でやりたかった。
その後調べてみたら、C関数側では PG_GETARG_POINTER や PG_RETURN_POINTER を
使えば SQL 側とのポインタのやり取りは出来そうなことが判った。
でも SQL 側でポインタを扱うデータ型がない ・・・ orz
もう少し調べてみまつ & 引き続きレスお待ちします。
PostgreSQL=プゲラワロス
458 :
NAME IS NULL :2006/04/07(金) 11:33:29 ID:IwmuPLeT
>>456 JavaからしかDBを扱ったことないから、C言語でDBからデータを取得する方法は知らないけど。
1.ソートまではSQLに記述する。
2.データ数をカウントしておいて、中位数の位置Aを算出。
3.データを取得するときに、ループさせて1レコードずつ取り出すことになるだろうから、
位置Aにきたら、そこが中位数。
ではダメ?
どっちにしても、ソートはSQLに任せたほうが早いと思うよ。
>>458 レス、さんくす。
その方法だと、集約関数にはできなさそうですね。 こんな風に使いたかったんだが ・・・
製品名とその実売価格 ( 販売店によってまちまちな ) のテーブル t があったとして ( kakaku.com みたいな )
select
製品名,
avg(実売価格), -- 平均売価
percentile(実売価格, 0.25), -- 第1四分位 売価
percentile(実売価格, 0.5), -- 中位数(メジアン)売価
percentile(実売価格, 0.75) -- 第3四分位 売価
from
t
group by
製品名
;
こんな風に使える ユーザ定義集約関数 percentile() を作りたかったんだが。
pgsql で配列のソートを一発でやる方法ってありますか?
素直にCREATE AGGREGATEしろよ
>>456 外しているかもしれないけど。
byteaを使ってSQLとC関数とのやり取りをしたことはある。
>>461 素直に CREATE AGGREGATE しようと考えてるんですよ。
CREATE AGGREGATE percentile (
BASETYPE = double precision,
SFUNC = post, -- ソート&格納するC関数
STYPE = pointer, -- ポインタ型の集約状態値(配列のアドレスを保持するため ・・・ これができない)
FINALFUNC = get -- 配列から第nX分位数を計算して取り出すC関数
INITCOND = NULL -- 集約状態値の初期値(NULLポインタ)
);
んで、post() と get() は、
float8 *post(float8 *p, float8 f)
{
p が NULL ポインタなら palloc()、NULL でないなら repalloc() して
1データ分のエレメントを確保 ( 拡張 )
昇順並びとなるように、配列をシフトして f を挿入。 で,
return(p);
}
float8 get(float8 *p)
{
float8 f;
配列 p を処理して目的の数値を得、その数値を f へ
return(f);
}
STYPE は一時変数じゃなかったっけ? だから、pointer[]とするしかないんじゃない?
皆さん、レスありがとう。 その後色々調査してみて、展望が見えてきました。 も少し実験して、うまくいったら報告します ( 聞きたくもないですか、そうですか )。
聞きたい
禿しく実験した結果、pgsql と C言語関数との間で、ポインタのやり取りはできる。 C言語関数のなかで確保したヒープは、その関数をぬけて pgsql に帰ってきたのちも 維持される。 pgsql 側でポインタを扱うデータ型は、互換性に問題を残すものの、32bit 整数型である integer でOK。 C言語関数側の PG_GETARG_xxx と PG_RETURN_xxx について、xxx の部分は INT32 でも POINTER でも DATUM でもOK。 実は、このコードがうまく動かなかったので、ポインタの受け渡しに問題があるものと 悩んでいたのだが、問題は別のところにあった → 次レスにて
palloc() って、malloc 互換と思って使ってると、とんでもないことになるな。 void *a, *b, *c; a =(void *)palloc(10); b =(void *)palloc(10); c =(void *)palloc(10); このコードで返されるヒープへのポインタ a b c は、皆同じ値。 同じ場所を指して いた。 だから、自分では3つのヒープを確保して集約するグループ毎に使い分けている と思っていても、実は同じメモリを使って上書きしてしまう。 試しに malloc() を使うように変えてみたところ、期待したとおりの結果が得られた。 SFUNC では malloc() & realloc() で、集約対象データを集め、FINALFUNC で それら データから集約結果を計算したあと free() するようにしたのだが ・・・ このままだと トランザクションが何らかの原因でアボートした場合、ヒープを解放できない。 さて、どーしたもんかな。
void *a, *b, *c; a =(void *)palloc(30); b = a+10; c = a+20;
470 :
468 :2006/04/07(金) 18:23:39 ID:???
↑ いや、ちょっと違うかな。 正確には、palloc() でヒープを確保したあとその先頭アドレスはセーブしておいて いったんC言語関数を抜け、再び呼ばれてC言語関数に入ってきて palloc() を行なうと、 セーブしておいた前回の palloc() のときのアドレスと同じアドレスが返される、ってこと。
a = palloc(10); if (a <= old) { a = repalloc(10+old-a) + 10; } old = a;
2行わすれてた static void *old = NULL; void *a; a = palloc(10); if (a <= old) { a = repalloc(10+old-a) + 10; } old = a;
>>468 そんなこと無いと思うよ。コンパイラの最適化のワナとかかな。
ただ、集約関数に使おうと思ったら、普通のメモリコンテキストじゃダメだね。
ちょっと調べてみるね。
とりあえず STYPE=float8[]じゃダメなんだっけ?
475 :
473 :2006/04/07(金) 22:57:47 ID:???
あ、すまん。473は470を見ずに書いてました。そういう意味ね。 要するにpallocって、それなりのタイミングで自動的にメモリ開放しちゃうのよ。
中央値くらいファンクション作らなくても、 SQLでサクッといけると思うんだがなぁ
477 :
470 :2006/04/08(土) 00:29:26 ID:???
>>475 やっぱりそうなんだね。 おそらくC言語関数のコンテキストを抜けると、メモリを開放する
んだろうな。 だからトランザクションがアボートしても、メモリリークの心配がないんだな。
>>476 作りたいのは中央値だけの集約関数じゃないんだ。 中央値でも、第1四分位でも、第9十分位
でも、パラメータ次第で変更可能な汎用的な集約関数。 MS-Excel 持ってたら、そのヘルプで
「 percentile 」 を調べてみそ。 percentile(配列,ratio) において、
ratio:0.1,0.2,・・・,0.9 で、第1十分位 〜 第9十分位
ratio:0.25,0.75 で、第1四分位と第3四分位
ratio:0.0,0.5,1.0 はそれぞれ、min(),中位数 ( メジアン/中央値 ),max()
この percentile() と同等な、posgresql のユーザ定義集約関数を作りたいんです。
478 :
473 :2006/04/08(土) 01:42:12 ID:???
うん。で、色んなコンテキストがあって、一行毎に開放するのもあれば
トランザクション単位のもあれば、1つのSQL単位のもある。
出来なくはないけど、
>>459 みたいな呼び出し方だと、
三つのpercentile()がそれぞれ値を内部で保持することに
なるから、集約関数でやるのはあんま効率良くないよ。
count(*)して件数出してからカーソル使うかlimit/offsetじゃダメ?
>>478 アドバイス、さんくす
実は malloc/free を使ってもう完成してしまったんだが、トランザクションアボート
の対策ができていない。 また、
>>477 の 「 raio 」 をどうやって与えるか、も
要検討課題。 正しい動作 ( 演算 ) はできているんだが ・・・
そのうえ
>>478 が指摘してくれたとおり、同じフィールドに対して ratio を変えて
複数の集約を行なう場合、同じソート配列が複数作られてしまい、リソースを無駄に
消費する問題にも気付いた。
もっと検討してみます。 ありがとう、レスくれた皆さん。
480 :
479 :2006/04/10(月) 08:04:54 ID:???
>>479 ですけど、もう少し粘着させてください。
質問その1:
select func1(), func2(), func3() from table;
で、func1() 〜 func3() が実行される ( 呼び出される ) 順番には、決まりが
あるのでしょうか? 一般的には、左から あるいは 上から 順番に実行されそうな
気がしますが、それは保証されていますか?
質問その2:
トランザクションがアボートしたときに、ユーザ定義可能な、自動的に呼ばれる
「 後始末用の 」 関数ってありますか?
481 :
473 :2006/04/11(火) 01:17:31 ID:???
Windows の psql から Linux の PostgreSQL に接続するにはどうしたら良いのでしょうか?
コマンドプロンプトから、 psql -h linuxのipアドレス database でいける。
484 :
NAME IS NULL :2006/04/12(水) 11:16:00 ID:z/Y6FoA2
>>484 7.4なら本体のソースに含まれてないかい?
やべー、昔作ったところ7のドライバーでsetBinaryStreamやってる。 ファイル200kくらいだから問題ないかな。
なんか 8.1 の JDBC ドライバ使っても取り出しの時に全バイナリを 一旦メモリに格納しようとするらしいことが分かりました。保存できても 取り出しできなきゃ意味がないっつーの…
たびたびすみません。BYTEA 型 + getBinaryStream()/setBinaryStream() ではなく OID 型 + getBlob()/Blob#getBinaryStream()/Blob#setBinaryStream() を使うようにしたら 参照・更新ともに想定内の動きになりました。今 Blog にまとめている最中です。
494 :
NAME IS NULL :2006/04/13(木) 19:12:59 ID:agIcTOBF
半期の日付範囲の検索条件をSQLに含めたいのですが、 日付関数を駆使してPostgresだけで現在の日時から半期の範囲を求めることは 可能でしょうか? 生成したいSQLのWHERE句は以下のようなものです。 WHERE date between '2006-04-01 00:00:00' and '2006-09-30 23:59:59' (今日が2007/2/1だったら) WHERE date between '2006-10-01 00:00:00' and '2007-03-31 23:59:59'
CASE文を駆使する。 大体、半期って言ったって4月10月じゃない会社もあるんだから、一発で取り出すのは無理。 ちなみに>494の文だと'2006-09-30 23:59:59.1'が範囲外になるかもな。
>>496 数年前の話だから参考にはならない(上に、記憶も曖昧だ)が、OID使った場合、
実体は一つ一つが別のファイルだった、という実装だった。
NFS先に置いておいたので、死ぬほど遅くなった経験がある。
単に取り出すだけならいいだろうが、多数の取り出しが必要だとよく考えて
設計しないと性能が出ないかも。
今の実装は知らないので、話半分で。
>>496 > ところで lo_creat() で作ったオブジェクトってどういう空間に保存されるの?
pg_catalog.pg_largeobjectテーブル
> そもそも OID 型ガンガン使って大丈夫なのかな?
32bitカウンタなので、使いすぎると枯渇して重複エラーになる。そんなに使わなければ大丈
夫だが。
基本的にbytea型と比較して入出力のスピードとかメモリ効率で勝るのがloの利点だが、
登録に通常のSQL形式で出来ないとか検索の不自由さとか削除更新時とかにlo_unlink()
しないといけない手間とか面倒なので、どれを使えばいいかは微妙なんだよね。
ちなみにoidというか旧来のラージオブジェクト使う場合はcontrib/loも参照のこと。便利な
トリガとか入った専用の型が提供されているので便利だし、ODBCとかだとcontrib/lo決め
うちになってる。
>>498 > 実体は一つ一つが別のファイルだった、という実装だった。
数年前どころが、PostgreSQL以前からそんな実装だったことは一度もないのだが・・・
テーブル一つ1ファイルになっているのと勘違いしてない?
>>498-499 レスどうもです ヽ(´ー`)ノ
システムカタログの pg_largeobject を調べてみたところ、LOB を 2kB ごとにブッた切って
BYTEA 型として管理しているようでした。2kB は C のソース上で定義されてる定数なので
これをチューニングする場合はリコンパイルが必要みたいですね。たしか DB2 は
1 LOB 1 ファイルにできるオプション持ってました。
この OID 型ってテーブル定義の時に WITH OIDS で付ける OID と同じシーケンス使ってる
ようですね。枯渇を防ぐために全テーブル WITHOUT OIDS にしときます。
LOB だけ個別に lo_unlink() しなきゃいけないのは面倒ですね。ブログにも載せましたが
とりあえず DELETE 文のサブクエリーに仕込んで 1 発削除が楽かなと思いました。
DELETE FROM X WHERE ID=0 AND (SELECT lo_unlink((SELECT lobid FROM X WHERE ID=0)))=1;
ところでこの pg_largeobject がやたら大きくなりそうなので別テーブルスペースに配置
したいんですが、ALTER TABLE pg_largeobject SET TABLESPACE ほにゃらら、と
やるしかないんですかね? ドキュメントにはシステムカタログ更新すべからず、とあるんですが。
まぁ最初からそのパーティションで initdb しろよという話ですが。
>>499 >>498 は正しい。7.0あたりまではラージオブジェクトは
1つの独立したファイルだった
text 型に 1,000 や 30,000 が入っているカラム a があります。 この a を数値順に並べるにはどうですればいいでしょうか。 # text 型のままでお願いします。
>>504 別に言われないですけど。
8.1.3 ですが。
すいません。7.4.12 です。 # 確かに 8.1.3 は言われませんね。
ブランクや NULL なら 0 になるように CASE WHEN で組めば?
つまり ORDER BY (CASE WHEN num IS NULL OR num='' THEN 0 ELSE replace(num,',','')::int)
最後に END 入れ忘れた orz
なるほど。ブランクや NULL でエラーが出ていたのですか。
>>508 でばっちりでした。ありがとうございます。
511 :
NAME IS NULL :2006/04/21(金) 03:20:55 ID:YO5ykByU
PostgreSQL で Oracle の DUAL のようなテーブルはありませんか?
from句省略
>>511 create or replace view dual as select current_timestamp as sysdate;
514 :
NAME IS NULL :2006/04/21(金) 14:22:03 ID:YNK627Tz
>>492 JDBCの挙動って7年前からちっとも代わってないな。
オイラの身の回りに合った貧弱なマシンで使えないんだよその手法だと。
>>513 うまい。笑いました。
けどDUALはSYSDATEを取るものじゃないので
Oracle仕様に則ると、
create or replace view dual as select 'X' as dummy;
ですな。
Oracleで
desc dual とか
select * from dual ってやるとわかるよ。
sysdateって使いたければ上のと合わせてくれい。
dualのダミーテーブルを使うテクニックって昔からあるし。 笑うほどのことでもないな。
ところでdualってどこから出てきた名前なんだろう?Oracleスレのほうが適当かな?
OracleからPostgreSQLに移植するときのテクニックとしてはこのスレでもあり。
馬鹿なうえに師匠も友達も居ないから2chで質問するわけで。 馬鹿なうえに師匠も友達も居ないから2chで質問するわけで。 馬鹿なうえに師匠も友達も居ないから2chで質問するわけで。 馬鹿なうえに師匠も友達も居ないから2chで質問するわけで。 馬鹿なうえに師匠も友達も居ないから2chで質問するわけで。
馬鹿なうえに師匠も友達も居ないから2chで質問に対するレスをするわけで。
522 :
NAME IS NULL :2006/04/24(月) 21:47:10 ID:ZYj+T9mN
下記のようにgroup byで集約した後、各グループごとに1件だけを抽出したいのですがどんなSQL文書けばいいのでしょうか。 例: 元テーブル id date 01 2005/10/10 02 2006/1/1 01 2005/11/5 01 2005/10/28 02 2005/10/13 ↓ id date(最新の1件だけ抽出) 01 2005/11/5 02 2006/1/1
速質問する気になったな。 ↓ よく質問する気になったな。
526 :
NAME IS NULL :2006/04/27(木) 10:55:31 ID:6t4XS9V+
postgres で特定のDBしか見れないユーザーを作成したいんですが、どうすればいいんでしょうか? ヒントだけでも教えていただければ、幸いです。
pgaccess俺が君に贈れる言葉はそれだけさ
PostgreSQL に来てる接続全部を強制的に切断するにはどうすれば良いですか? DB2 で言う FORCE APPLICATIONS ALL みたいなの。
530 :
NAME IS NULL :2006/04/30(日) 15:33:05 ID:mEmNp+Rq
今ドキュメントの VACUUM んとこ読んでるんだけど、PostgreSQL のレコードって VACUUM 実行しないと物理的に削除されないのけ?
>>531 新しいのも自動でやってくれるだけだろ。
PostgreSQL は追記型なので UPDATE/DELETE は vacuum するまでレコードに残ってますよ。
「レコード」が残ってるわけじゃないだろ・・・と。
ありがとござんす。8.1 だと autovacuum ってのが裏でテーブルの更新頻度見ながら やってくれるみたいですね。
536 :
NAME IS NULL :2006/05/03(水) 22:34:05 ID:H/0DTq7n
本日も含めて蓄積されたデータの過去10日分の平均を求める為に select コード,日付,本日値, (select avg(本日値) from データ as S where S.コード=A.コード and S.日付 <= A.日付 order by A.日付 limit 10) as 平均 from データ as A; みたいなSQLを書きたいのですがサブクエリでは order by が書けないようですね 単純にサブクエリで並び替えが出来れば1本で解決するのですが 仕方なくワーク用テーブルをcreate table temp で書いて凌いでいます 何かスッキリとした良い方法があるでしょうか? 因みに、limit 10 でデータ件数を絞っているのは、コードによってデータが存在しない日がある為です
537 :
539 :2006/05/03(水) 22:41:55 ID:H/0DTq7n
select コード,日付,本日値, (select avg(本日値) from データ as S where S.コード=A.コード and S.日付 <= A.日付 order by A.日付 desc limit 10) as 平均 from データ as A; ちょっと違ってました、直近から10件なんで order by の所は desc です
538 :
536 :2006/05/03(水) 22:42:32 ID:H/0DTq7n
>>537 名前 539 じゃなくて 536 でした(汗
select コード,日付,本日値, (select avg(本日値) from データ as S where S.コード=A.コード and A.日付 - interval '10 day' <= S.日付 and S.日付 <= A.日付) as 平均 from データ as A; とかじゃまずいの?
>>539 最初にそのパターンが出てこないってことは「過去10日分」が、連続した10日分じゃないのでしょう。
データが存在する10日分じゃないのかな?
541 :
536 :2006/05/04(木) 12:32:05 ID:unA3PyxH
>>539 書き方が悪かったようでごめんなさい
“本日も含めて蓄積されたデータの過去10日分の”ってのは
要するに
>>540 さん が書かれておられるように過去10件分のことです
こーいった処理は結構あると思うのですが、
皆さんどうされておられるのでしょうかね、
例えば、移動平均や累計等の値を求める時に
プログラム側で態々書かなくてもSQLでサクット集計できた方が
楽な気がするのですが・・・
>541 じゃあ、日付じゃなくて通し番号つければいいじゃない。 S.通し番号 BETWEEN A.通し番号-10 AND A.通し番号
もちろん、コードごとの通し番号ね。
545 :
NAME IS NULL :2006/05/05(金) 02:45:46 ID:lKBJsAdE
その手の処理はpl/pgsqlだろ SQL真面目に勉強しても解決しないよ
通し番号に頼ると欠番ができないように管理するのが大変かもよ。 途中をひとつ削除するとそれ以降を全部詰めないといけない。
547 :
NAME IS NULL :2006/05/07(日) 17:15:27 ID:79J3zSF5
ワークのテーブルを1つ作って通しを生成すりゃいいんじゃないか?
>>545 が言うようにplpgsqlかプログラム側でやるべきだね
にしても、複雑なSQL書いてなるべくSQLだけで済ませようとする人と、 SQLは単純に書いてプログラム側でちょっとしたことをやる人とに 二分されるよなぁ。
3層C/Sの考え方からすれば、なるべくロジックはアプリ側でやるのが基本かな。 もちろん、ケース倍ケースではあるけど。
「ロジック側で欲しい形」でデータを引くのが理想。 たとえばSELECT * で読んで1つのカラムしか読まないとか 結果セットを大きく取りながら要らないレコードはスキップするとか そういうのは無しだね
>>551 SELECT * は今はO/Rマッピングとかあるから
事情は変わってきてるけど、
いらないレコードスキップはなあ。
パフォーマンスが無茶苦茶悪くなって調べたら
リーダーさんがそんな事やってて殺意を覚えましたよ。
ファイルリードの感覚でDB使ってる人間がそうなるよな。
>>553 ((((;゚Д゚)))ガクガクブルブル
あといまは3層式だから実際にデータが流れるのはDBと近いところにあるAP鯖だからな select *は昔ほど問題にならないばかりかメリットもあるからね
>>549 俺はプログラム側でやる方なんだけど、実行時間測定するとSQLで済ませた方が
圧倒的に早い。なので最近は改心してSQL勉強中
俺はSQL側でやる方なんだけど、SQLが複雑になるのを避けたい気持ちもある。 SQLで済ませた方が早いんだけど、O/Rマップ利用とのバランスに日々悩んでいる。
>>553 COBOLerとかCOBOLerとかCOBOLerにその傾向が強いな。
あとCOBOLerとかもひどい。
AccessやVB方面もかなりすごいよ nextをひたすらしてとか平気でやるやつ多い ネットワーク経由でやるやつとかバカハブ時代はそれだけでネットワークがパンクしてたな 接続先がOracleとかでも平気でそういうことやるから・・・
select * なんて、AP−DB間でやるメリット無いだろ。
>>556 といってなんでもかんでもDBでやろうとするとDB鯖の負荷が増えるので
臨機応変だよなぁ。
Web鯖の負荷分散は簡単だけど、DB鯖の負荷分散は面倒だし
>>561 それって、どっちでやってもトータル負荷が同じ、っていう前提が必要な気がする。
WebSv側でやるとDBSv側でやるよりもトータル負荷が掛かるんだったら、
一概にWebSv分散で回避ってわけにもいかないような。
COBOLerには マングースがいいと思います
>562 DB鯖は増やすのが比較的困難。 Web鯖は増やすのが比較的容易。 わかる?
>559 俺がい見た一番酷い例は、数万のデータを全部DB(Oracle)から取得して PHPで処理をしながら、目的のデータが見つかってもbreakすらしてないのがあった。 いくら研究所内という閉じた空間で専用の数GhzのCPU数GBのメモリを積んでて (ちなみにHDDはもちろんTB単位)それを少人数で使うだけだからって、限度があるだろうと。 その設備費用をこっちに回せと。
567 :
NAME IS NULL :2006/05/16(火) 04:09:33 ID:xWElNPPM
>>536 もう遅いと思うが、その場所にORDER BY/LIMIT書いでも、
集約関数の結果をORDER BY/LIMITすることになるからダメだよ。
サブクエリ内のFROM句にもうひとつサブクエリが必要だね。
568 :
NAME IS NULL :2006/05/17(水) 14:14:25 ID:imgPgdgK
SQLite での UNIQUE PRIMARY KEY みたいな指定はできますか? 勝手に1,2,3, … って増加していくんだけど、DELETE で空きができたら その番号を使用する、みたいな。
世界的に見るとなんでPosgreSQLってこんなに人気ないの? 日本以外じゃ、MySQL vs Firebird >>>>>>>>>>>>>>>>> PostgreSQLなんだね。
日本人は馬鹿だから
このスレとあのスレを見れば一目瞭然。 2ちゃんのPostgreSQLユーザーはひどいのが多い。
文字列を || で結合するとき、もし null があったら 空白っていうか消えちゃうのね
nullだけはSQLで特殊扱いだからな 文字ですらないわけだから当たり前 ただそのへんは環境依存
我々はnullだ。お前達を同化する。抵抗は無意味だ。
nullpo
576 :
NAME IS NULL :2006/05/22(月) 23:42:12 ID:GsIdHrGf
>>569 はぁ?FireBird?
amazon.com だと
1 - 10 of 215 results for mysql :
in Databases
1 - 10 of 13 results for postgresql :
in Databases
1 - 1 of 1 results for firebird :
in Databases
テーブル Create table 生産 ( 品番 as varchar(20) 生産日 as date 生産数 as integer primary key(品番,生産日) ); からView Create view v_生産計画 as select 品番 ,生産日 ,生産数 ,前生産日 ,前生産数 from xxxxxxx ; のようなものを作ることは可能でしょうか? それとも、都度、中間テーブルを作成する必要がありますか?
>>577 可能だと思うけど、遅いんじゃないかな。
具体的には、最新の生産日の検索結果を出し、それ以前の生産日を検索するSELECTを書き、
両者のJOINを取ることになるかと。同一テーブルを2〜3回スキャンすることになるので遅い、と。
579 :
577 :2006/05/23(火) 11:30:23 ID:???
>578 多少遅くなってもいいのですが、最新だけでなく履歴で取りたいのです。 SELECT a.品番,a.生産日,a.生産数,b.前生産日,b.前生産数 from 生産 as a join 生産 as b where 品番,生産日=(select 品番,max(生産日) from 生産 group by 品番) and select ...... はやってみましたがそれほど遅くはありませんでした。 しかし、 品番 生産日 生産数 前生産日 前生産数 A 5/1 10 4/30 40 A 5/2 40 5/1 10 A 5/3 30 5/2 40 といったViewを作りたいので、この方法では無理そうでした
アプリ側にやらせた方がいいと思うがな。
>579 そういうのって指数関数的にスピードが落ちるから データが増えた途端にガクッと速度落ちるよ。
元になる件数はどのくらいなの?
583 :
NAME IS NULL :2006/05/24(水) 02:19:46 ID:vyLIAcxg
SELECT 品番,生産日,生産数, (SELECT MAX(t1.生産日) FROM 生産 AS t1 WHERE t1.生産日 < 生産.生産日 AND t1.品番 = 生産.品番) AS 前生産日, (SELECT t1.生産数 FROM 生産 AS t1 WHERE t1.生産日 = (SELECT MAX(t2.生産日) FROM 生産 AS t2 WHERE t2.生産日 < 生産.生産日 AND t2.品番 = t1.品番) and t1.品番 = 生産.品番 ) AS 前生産数 FROM 生産; って素直にやってみれば?遅いと思うが。
584 :
NAME IS NULL :2006/05/24(水) 07:36:32 ID:NKFuhAff
よくわかってないかもしれないが、前生産日って1日前のことでいいなら SELECT a.品番,a.生産日,a.生産数,b.生産日,b.生産数 FROM 生産 a LEFT JOIN 生産 b ON (a.生産日 = b.生産日 + 1)
>前生産日って1日前のことでいいなら 普通に考えて、違うだろw
うわ、こんなに沢山のレスありがとうございます。 レコード数は3万位です。INDEXを指定しているので今のところレスポンスはさほど悪くありません >583 早速やってみます 謝謝
>>586 あまりに複雑orアクロバティックなSQLは、メンテナンス性を下げますよ。ほどほどに。
>>580 の言うように、アプリでやることも考えたほうがいいかもしれません。
すみません。 クライアント バージョン7.4系 → サーババージョン 8.1系 クライアント バージョン8.1系 → サーババージョン 7.4系 どちらかのアクセスがダメというのを、どこかで見たような気がしますが、 どちらがダメだったのでしょうか?
PostgreSQLのみのネタではないのですが。。。 USERテーブルが次のような構造であって +--+-------- | ID| NAME +==+======== | 1| SUZUKI +--+-------- | 2| YAMADA +--+-------- | 3| SATOU +--+-------- 外部に、IDだけを記述したテキストファイルがあって +------ |1 |2 | このテキストファイルから1行づつ読んで、 psqlを用いてUSERテーブルからNAMEのみを取得して、 別のファイルにはき出すってことはbashのスクリプトのみで可能ですかね? 可能だったらどう書けばいいんでしょうか?
shell scriptって、なんかこいつ皮先っぽいな…
>>589 俺なら逆にテキストファイルをテープルに突っ込んで
結合して出すかな
>>589 foo.sql
SELECT name FROM Usertable WHERE id = :ID;
foo.bash
#!/bin/bash
read line
while [ $line ]
do
psql -v ID=$line -o $line.result -t -f foo.sql
read line
done
cat id.txt | bash foo.bash
593 :
589 :2006/05/25(木) 23:16:19 ID:???
>>590 むむ、もしや漏れが火星方形だってことをご存じで!?
>>591 ありがとうございます。
それはまったく頭に浮かびませんでした。
テキストファイルをCSVと考えて、COPYでテンポラリテーブルに取り込んでから
処理すればできそうですね。
>>592 なんらの日本語コメントなくいきなり回答をありがとうございます。
まず処理内容を理解してから、試してみます。
>>588 7.4クライアント→8.1サーバはとりあえず動いているけど。
7.3以前はプロトコルバージョンが低いからダメかも知れん。
mixiの八木さんのとこからコピペ Q: 何がリリースされるの? A: PostgreSQLのマイナーバージョンアップ版、8.1.4、8.0.8、7.4.13、7.3.15です。 これらのバージョン全てには、ある特定のSQLインジェクション攻撃からの脆弱性を 解消するセキュリティパッチが実装されています。 Q: この脆弱性の影響を受けるのは誰? A: インターネットその他からの「信用できない入力」にさらされていて、UTF-8や SJISなどのあらゆるマルチバイトエンコーデョングを使っている PostgreSQLサーバ のユーザです。基本的にはウェブアプリケーションと一緒にオープンソースのデータ ベースを利用している大半のユーザです。 Q: 影響がないのは誰? A: ごく限られたアプリケーションです: 一人のユーザしか対象としない、インターネットに公開されていないアプリケーション など、信用できない入力にさらされていないデータベースアプリケーションのユーザや、 サーバとクライアントの両方がLATIN-1やその他のシングルバイトエンコーディングで 設定されたデータベースです。アプリケーションが信用できない文字列をSQLコマンド に直に埋め込まずに常にout-of-line parametersとして送信しているのであれば脆弱性 はありません。これはPostgreSQL 7.4以降でのみ利用できます。
質問です。 PostgreSQL 7.4.3,phpPgAdmin 3.4.1を触ってます。 スキーマのことを知らずに触っててpublicスキーマにテーブルが増えすぎたので、 新しいスキーマを作って、既存のテーブルの一部をそちらに移動させようとしました。 スキーマ間のテーブルの移動って、どうすればいいのでしょうか? phpPgAdmin上には、単純な移動のインターフェースがなさそうですし、 「構造とデータをエクスポート→public側を破棄→新スキーマにインポート」 しようにも、dump.sqlが0バイトファイルだったりして、どうにも困っています。
597 :
592 :2006/05/26(金) 06:29:11 ID:???
>>589 > 別のファイルにはき出す
を、ID毎に別ファイルと取ったか、読み直したら出力は単一ファイルで良さそうな気が今頃してきた。
foo.bashのpsqlのオプションは、
psql -v ID=$line -t -f foo.sql
で、コマンドラインは
cat id.txt | bash foo.bash > resultfile
でいいか。
598 :
589 :2006/05/26(金) 09:07:05 ID:???
>>597 更なる回答に感謝。
まずちょっとお詫び。前レスで
>なんらの日本語コメントなくいきなり回答をありがとうございます。
と書きましたが、コメントがなかったことを不満に感じたなどという
甚だお門違いの意味ではなくて、いきなりの本質回答に感謝したいという意味でした。
誤解させたなら申し訳ありません。
で、いただいた新たな情報を元に試してみます。
ありがとうございました。
599 :
589 :2006/05/26(金) 10:09:16 ID:???
>>592 さんにいただいたスクリプトを、自分なりに理解して
修正してみましたので報告します。これで、うまくいってます。
内容的には、id.txtに書かれたid一覧に紐付くnameをselectし、
結果をresult.txtに出力します。
bashの勉強もちょっとできて、得した気分です。
ありがとうございました。
#---------------------------------------------------
#!/bin/bash
#結果ファイルの存在チェック。エラー表示は/dev/nullに捨てる
file=`ls ./result.txt 2> /dev/null`
# 結果ファイルが存在したら、それを最初に削除する
if [ "$file" != "" ] ; then
rm ./result.txt
fi
# id.txtからIDを1行づつ読み込み、DBに問い合わせた結果を
# 結果ファイルに順次書き出す
while read line; do
result=`psql -h localhost -d db_name -U db_user -v ID=$line -t -f foo.sql`
echo $result >> result.txt
done < id.txt
ここで質問していい内容かわからないのですが、もしスレ違いでしたらお詫びいたします。 Postgres7.4.8を使っているのですが、 CSEで今までは日本語表示がちゃんと出力されていたものが、 サーバーの再起動後、文字化けして出力されるようになりました。 コンソールから出力して見比べてみたりなどしてるうちに解ったのですが どうもCSEで表示すると、UTF変換されて出力されているようでした。 ただ、これをどうやってそのままEUCで出力させるかが解らず、かれこれ一週間以上悩んでいます。
CSEを窓から投げ捨てて一から勉強しなおすというのはどうでしょうか?
そうしたほうがよろしいでしょうか。。。 今日もPHPで出力させてみたりコンソールからpsqlで実行してみたのですが原因がまったくわからず…。 最悪データベースをリストアさせようかと思っていたのですが、初心に返るつもりでがんばってみます。 ありがとうございました。
603 :
601 :2006/05/26(金) 18:44:11 ID:???
おう、大変だろうけど、お前、これからもがんばれよな! わかんねえこと有ったらいつでも俺に聞いてくれや! このスレの奴らはみんなお前の味方だぞ
604 :
NAME IS NULL :2006/05/26(金) 18:56:22 ID:4SSfJU7w
すいません、3日前程にサーバがクラッシュしちゃって、データ復旧に出したのですが ポスグレのデータを取り出す方法とかありますか? データのみ復旧されて帰ってきたのですが、どうにかならないですか? 試した事 8.14をインストールしてデータをコピーしてみた。 ↓バージョンが違います。 cygwinで7.4.1を入れてデータをコピーして起動してみた。 ↓ 立ち上がりすらしません。 このデータというのは postgres/date の中のものです。 どうかよろしくお願いします。
データを窓から投げ捨てて一から構築しなおすというのはどうでしょうか?
606 :
604 :2006/05/27(土) 16:21:54 ID:/QEoXRkU
>>605 データを窓から投げ捨てて逃げるの方がいいです。
a
現在下記SQLを投げてます select a,b,c from hoge where a = ? offset ? limit ? limitつけなかった時の件数も知りたいので select count(*) from (select a,b,c from hoge where a = ?) as moge みたいな感じで2回クエリー投げてるんですけど、 これを上のSQL一回だけで済ますことは可能でしょうか?
>>608 下のSQLは、
select count(*) from hoge where a=?
ではだめなの?
595で書かれていた -------------------------------------- Q: この脆弱性の影響を受けるのは誰? A: インターネットその他からの「信用できない入力」にさらされていて、UTF-8や SJISなどのあらゆるマルチバイトエンコーデョングを使っている PostgreSQLサーバ のユーザです。基本的にはウェブアプリケーションと一緒にオープンソースのデータ ベースを利用している大半のユーザです。 -------------------------------------- は携帯電話からしか入力できない場合でも「信用できない入力」ですかね!?
理屈上は、自分の制御下にないクライアントからの入力は全て「信用できない入力」だわな。 ただ、携帯電話ネットワーク経由で送信可能な攻撃コードなのかどうかは分からない。
612 :
NAME IS NULL :2006/05/30(火) 10:55:15 ID:g+erXbHs
すでにあるDBの構造をを丸ごと他のサーバにコピーしたいのですが簡単な方法はないでしょうか。 出来たらテーブルの構造だけをコピーしたいと思っています。 pg_dump dbname > outfile または pg_dumpall > outfile が一般的なのでしょうか。 出来たら既にあるテーブルを、別のDBに作成するSQL文を自動で生成してくれたりすると嬉しいですが・・。
>>612 pg_dump -h バックアップしたいホスト -t テーブル名 DB名 | psql -h 別のホスト DB名
例:db_1のusersテーブルをバックアップして、別ホストのdb_2データベースに作成する。
pg_dump -h 192.168.0.1 -t users db_1 | psql -h 192.168.0.2 db_2
614 :
NAME IS NULL :2006/05/30(火) 11:43:30 ID:g+erXbHs
>>613 お返事ありがとうございます。
-hオプションなど調べて参考に致します。
コピーしたいサーバ同士がネットワーク的に繋がっていないので、ダンプファイルを用意してみようと思います。
データファイルを含むとなると容量が心配ですが・・。
ダンプファイルをアーカイブして出力すれば? たしか、pg_dumpの -Fc オプションでできた希ガス pg_dump -Fc -b DB名 > アーカイブされたダンプ リストアは、 pg_restore -d DB名 アーカイブされたダンプ
dataディレクトリごとコピーするのは?
617 :
612 :2006/05/30(火) 13:48:44 ID:???
>>615 詳細な方法ありがとうございます。
>>616 単純にコピーすれば動くものなのでしょうか?
>>617 >
>>616 > 単純にコピーすれば動くものなのでしょうか?
同じバージョンでなら。
もちろんOSも同じ。
619 :
612 :2006/05/30(火) 15:51:23 ID:g+erXbHs
>>618 なるほどOSが違うので敷居が高そうですね。
$ pg_dumpall > db.out
で全部読み出して
$ psql -f db.out template1
で再現してみようと思います。
この際にdbを作りディレクトリを指定する方法を探してみます。
620 :
NAME IS NULL :2006/06/01(木) 11:45:11 ID:RxPZ53yt
debianのaptでpostgresをインストールしました。 initdbによるデータベースクラスタのディレクトリを変更したいのですが。 initdb -D /var/hdb/data2 というコマンドをpostgresユーザで実行し問題なく終了 postgresユーザの.bash_profileを ---------------------------------- . /etc/postgresql/postmaster.conf PATH=/bin:/usr/bin:/usr/lib/postgresql/bin POSTGRES_DATA=/var/hdb/data2 PGDATA=${POSTGRES_DATA:-/var/hdb/data2} PGLIB=/usr/lib/postgresql/lib export PGLIB PGDATA ---------------------------------- と変更してみました。 しかし、psql -lを実行すると過去のDBが表示されてしまいます。 そもそも方法が間違っているのでしょうか。
621 :
620 :2006/06/01(木) 13:54:50 ID:RxPZ53yt
すいません一応自己解決しました postmaster -D /var/hdb/data2 >logfile 2>&1 & でdbを切り替えることが出来ました。 自動起動についてはちょっとすれ違いっぽいので調べてみます
INSERT や DELETE する時にたまに 「tuple concurrently updated」 とか出て失敗してる みたいなんだけど、これってどういう意味? 別のトランザクションが更新かけてるのにロックかかってないの?
すでに作ったDBに沢山テーブルがあるんだけど ひとつずつ。 GRANT ALL ON {テーブル名} to "www-data"; やらなきゃ駄目? DB丸ごとに権限つけられないのだろうか・・。
>>623 それ、そんなに大変か?
丸ごと処理する方法は知らない
>>623 GRANT ALL ON DB名.* TO "www-data";
って通らなかったっけ。
626 :
623 :2006/06/02(金) 17:15:39 ID:ynAf6rFb
>>624 テーブルが112こあります。 ><
>>625 喜び勇んでやりましたが、通りませんですた
627 :
625 :2006/06/02(金) 18:10:46 ID:???
>>626 =623
そっかー。期待させてすみませんでした。
考えて見れば、MySQLの影響受けてたGRANTだったな…
テーブル名をディクショナリから取得して、
SELECT 'GRANT ALL ON '||table_name||' TO "www-data;"' FROM テーブルのディクショナリ
でスクリプト作って流すことになるかな。
これはこれで、Oracleの影響受けてますけど。
そのくらいなら、テーブル名の一覧を得て、 エディタのマクロとか使って〜
112テーブルなんぞ、マクロ作るほどでもなく、コピペで十分。
grant all on table1 , table2 to [人] でテーブル一覧を別に拾ってきて 放り込んだらいけね?
631 :
NAME IS NULL :2006/06/04(日) 20:41:24 ID:TGoB9i8i
先日見つかったPostgresqlの虚弱性の関係で8.1.3 -> 8.1.4に更新しようと思っています。 Windows版は簡単に更新できるようなのですがLinux環境ではどうなのでしょうか。 現在 /usr/local/pgsql にインストールされているのですが、 単純に上書きされるように 8.1.4をインストールすればよいのかがわからずこまっています。 Linux環境での更新方法をご存知の方、ご教授願えませんか。
「虚弱性」って今流行ってるのか?
俺は初めてあの字を見た時は きじゃくせい と読んだもんだけどなあ。
>>631 マイナーバージョンアップなら上書きでいいけど、念の為、バックアップ
FATAL: database "www-data" does not exist ってphpプログラムからDBにアクセスするとログに出るんだけど www-dataってテーブルが無いって言ってるんですよね? www-dataってアパッチユーザなだけで、そんなテーブル無いのに・・
638 :
636 :2006/06/05(月) 14:23:57 ID:???
データベースを指定していないとユーザ名のDBにアクセスに行くって事でしょうか? 一応DBは指定しているつもりです。
>>636 www-dataってデータベースが無いって言ってるんです
640 :
636 :2006/06/05(月) 14:51:39 ID:???
>>639 そうですよね、ありがとうございます。
phpプログラム側の問題っぽいので調べて見ます
ポスグレとは関係ないけど debianはなんでwww-dataなんてユーザにすんだろうな
Debianの連中は頭がおかしい。 その中でも特にApacheのメンテナは頭がおかしい。イカレポンチ。
DebianのApacheなんてディレクトリやconfファイルの構成がApache標準はもちろん、 Debianの他のパッケージと比べても明らかに変だものなぁ。 しかも、Apache 2.2が出てapache.orgのほうが乗り換えを推奨しても頑に2.0系を 使い続けるとか。2.0はいまやlegacy releaseなんだよ!って何度言われても理解出来ない 知能障害者の集まり。
644 :
NAME IS NULL :2006/06/06(火) 14:42:59 ID:h5kZihCT
申し訳御座いませんが,以下の現象について教えてください. ダンプファイルよりリストアを行おうと思いまして、 以下のコマンドを実行したところ、 psql testdb < dump.testdb 何度やってみても cannot allocate memory for output buffer のメッセージが出て途中で止まってしまいます。 原因がお分かりの方がいらっしゃればご教授願いたく思います。 OS:CentOS バージョン:PostgreSQL 8.1.3 以上です。よろしくお願いいたします。
root権限で、psqlを使う方法ってありますか?
etcの下にそう書けば良いんじゃないの?
>>645 ・rootでログインしてpsql
・su -cでpsql
・sudoでpsql
お好きなものをどうぞ。
個人的にはせっかくDB管理者がrootじゃなくてもいいのに、rootを使うのは大嫌いですが。
>>646-647 ありがとう。
とりあえず、root権限では使わない方向に動いてみます。。。
649 :
NAME IS NULL :2006/06/08(木) 14:03:19 ID:OAniT9XO
複数のデータベース(DB1、DB2)が存在します。 DB1に接続したまま、DB2のテーブルをselectする事は可能なのでしょうか?
dblink?
651 :
NAME IS NULL :2006/06/08(木) 14:19:51 ID:FqH+M/1w
group byでグループ化したときに、先頭のものを抽出するにはどうしたらよいでしょうか?
>>650 ありがとうございます
>>651 SQLの一番最後に、limit n で上位n行取得できます。
>>652 limitだと結果レコード全体の先頭ですよね?
すみません、説明不足でした。
グループ化したものの中で先頭のものを出したいです。
minやmaxのようなかんじです。
おーだーばいしてりみっとするといいとおもうお
同一のグループ化されたレコードが複数ある中で、それぞれ先頭レコードのみ抽出と いう事でしたら、先頭と言うより、どのようなデータを先頭と捉えるかが重要かと思います。 例えば、オークション出品レコードがあるとしましょう。 1件の出品データが1レコードとして、落札日で一番額の大きい金額を見たい場合は、exists関数と having関数を使えば出てきます。 select a.落札日 ,a.落札金額 from 出品レコード a where [落札日の範囲など、絞込データ] and exists ( select '1' from 出品レコード ex where ex.オークションID = a.オークションID ←キー1とする and ex.落札日 = a.落札日 ←キー2とする group by ex.落札日 having max(ex.落札金額) = a.落札金額 ← 最大の落札金額と一致したレコードを取得 ) group by a.落札日 外してたらすんません
656 :
655 :2006/06/08(木) 16:22:47 ID:???
しまつた!!!! 最後の行 >group by a.落札日 は要りません。 さらに、existsを使う場合は、レコードを丸ごと取得したい場合だけでいいです。 この例の抽出レコードの場合だと、単純にhaving句だけで出来ますねぇ。 orz
657 :
NAME IS NULL :2006/06/08(木) 16:39:57 ID:ZOSfh7e8
テーブル内に存在する「ほげ」というデータをカラムを問わず探し出したいのですが、
そういう場合はどうすればいいのでしょうか。
また、テーブル内のすべてのカラム名を抽出したいのですが、どうすればいいのでしょうか。
あと、
>>596 も解決していません。よろしくお願いします。
NAT 配下にあるクライアントからサーバに接続してるんだけど 長時間クエリを発行せずに放置していると NAT テーブルのエントリが消えて バックエンド(サーバ)との接続が切れちゃうし バックエンドプロセスも残ってしまうのでどうにかしたいです。 接続が切れないようにするには tcp_keepalives_idle を十分大きな秒数に しておけば良いのでしょうか? あと、クライアント側の異常終了などで残ってしまったバックエンドプロセスを 適当なアイドル時間経過後に自動終了させるようなことは出来ないでしょうか?
>>659 間違えた。
tcp_keepalives_idle は制限なしの十分大きな秒数ではなく
NAT テーブルのエントリが消去される時間の範囲内で十分大きな秒数
の意味です。
create table log ( autono serial, ip cidr, date timestamp with time zone, partner_id varchar(15), searchword text, carrier_id varchar(5), user_ip cidr, user_agent text, listings varchar(5) ); ってして insert INTO log VALUES ('','127.102.111.26','10/Jun/2006:16:37:33 +0900','1000310','g1CDY4OBg0ODVg==','2','123.7.56.214','KDDI-SA35+UP.Browser%2F6.2.0.9.1+%28GUI%29+MMP%2F2.0','2'); やったら ERROR: invalid input syntax for integer: "" って怒られるんだけど何ゆえ?
serialんとこに値入れていいの?
663 :
661 :2006/06/12(月) 15:22:27 ID:???
>>662 値を入れたくないので '' にしたんですが。
これだと空白が入ってしまうのでしょうか。
どのように指定すべきか教えて頂けると嬉しいです。
カラムを指定してinsertすべきなのかな・・。
664 :
666 :2006/06/12(月) 15:27:41 ID:???
ありがとうございました カラムを指定してinsertで問題なくいけました、ヒントありがとうございます。
665 :
661 :2006/06/12(月) 15:28:34 ID:???
あぁ、オーメンになってしまった・・
>>661 の間違いです
666 :
NAME IS NULL :2006/06/13(火) 15:07:18 ID:1reyH9GU
野菜ってカラムのランキングをスマートに出すSQLを教えてくださいませ とまと 125 すいか 102 かぼちゃ 80 いちご 20 見たいな感じで一つのカラムでの多い順ランキングとかを出したいのです。 何卒よろしくお願いします。
667 :
666 :2006/06/13(火) 15:11:04 ID:1reyH9GU
group by でいけそうですね、失礼しましたっ
668 :
NAME IS NULL :2006/06/13(火) 15:19:15 ID:IKyyB3+i
古いOracleでもいいから安く提供して欲しいよ・・・ そうしたら10gが売れなくなるから無理だろうけど。
669 :
666 :2006/06/13(火) 16:11:59 ID:1reyH9GU
>>667 group by だけだと順位だけでカウントできない・・
670 :
666 :2006/06/13(火) 17:30:35 ID:???
count で出来ますた・・ orz おじゃましました・・
>>668 Oracle本体をそんなに使いたい理由がよくわからん。
OracleでいいのはDB本体よりもOracleに対応した製品群でそ。
オンラインバックアップだとか。
postgresは貧乏人のOracleです
Oracleは無能な者のpostgresです。
Oracleはネームバリューに弱い重役のためのpostgresです
Oracleは予算が余って仕方がない組織のための最終兵器です。
Oracleは守りに入ったPostgreSQLです
>>677 Oracleは官公庁のためのPostgreSQLです
よそでやれ
PostgreSQLのスレじゃないのか?
Oracle厨によそでやれと言われるためのPostgreSQLスレです
えーとこの流れで質問していいのか分かりませんが、します。 psql -h 127.0.0.1 template1 とローカルにTCP/IP ソケット経由でアクセスしようとすると。 psql: could not connect to server: lD)@(g%@ Is the server running on host "127.0.0.1" and accepting TCP/IP connections on port 5432? と怒られます。 もちろん tcpip_socket = true にはしています。 ディストリはdebianです。
>>683 pg_hba.conf の設定内容は?
685 :
683 :2006/06/21(水) 16:23:28 ID:???
>>684 レスありがとうございます。
有効な部分だけ抜き出すとこんな感じです。
host all all 127.0.0.1 255.255.255.255 trust
local all postgres ident sameuser
local all all ident sameuser
host all all ::1 ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff ident sameuser
host all all ::ffff:127.0.0.1/128 ident sameuser
host all all 192.168.0.0 255.255.255.0 trust
>>685 あとは、iptables とか。
tcpip_socket = true にしてから再起動されていないとか。
あとは、PostgreSQL が 8.x なので、tcpip_socket の設定が変わってるとか。
687 :
683 :2006/06/21(水) 17:38:37 ID:X4xWcPlO
>>686 丁寧にありがとうございます。
iptablesについて調べてみます。
再起動はしているつもりなので・・。
ちなみにバージョンは
postgresql 7.4.7-6sarge1
です。
もしかして8にしか出来ない設定をしているとかいうミスでしょうか・・
688 :
683 :2006/06/21(水) 18:10:20 ID:X4xWcPlO
netstat -ln でチェックしたんですが。 5432がLISTENになってませんでした。 ご報告まで・・
>>688 =683
postmasterの引数に-iがないとかいう落ちはないですか?
>>689 tcpip_socket = true
にすれば-iオプションいらないのかと思ってました・・
で・出来ました・・ どっかにtcpip_socket = true にすれば-iオプションいらない って書いてあったのを鵜呑みにしてました・・ orz
692 :
683 :2006/06/21(水) 20:00:31 ID:???
ローカルでは psql -h 127.0.0.1 template1 で接続できるようになったのですが。 外部サーバ(192.168.0.184)からphpで接続すると Warning: pg_connect(): Unable to connect to PostgreSQL server: FATAL: no pg_hba.conf entry for host "192.168.0.184", user "postgres", database "at_fms", SSL off in C:\Program Files\pg_connect.php on line 7 相変わらず怒られますね・・ pg_hba.conf には下記を追加したんですが駄目でした・・。 host all all 0.0.0.0 0.0.0.0 trust host all all 127.0.0.1 255.255.255.255 trust host all all 192.168.0.0 255.255.255.0 password host all all 0.0.0.0 0.0.0.0 trust host all all 192.168.0.184 255.255.255.255 password ローカルからでも接続できたので少し進んだ気がするんですが、もう少し粘ってみます。 外部から接続する場合、システムのユーザ名(apache等)とポストグレスのユーザ(postgres等)が一致しなくてもいけますよね?
>>692 user postgres のパスワードは?
とりあえず、trust にして問題の切り分けを。
>>692 設定変えたあとちゃんとリスタートしてるか?
ファイアーウォールは通れるようにしてるか?
バージョン書いてくれませんか。 その辺の記述は最近のバージョンでちょっと変わるので
6.5.42 Service Releace 8864 です
>>696 なんでそんな古いバージョンを?
特に理由ないならバージョンあげれ
6.x.x にtcpip_socket = true の項目あったっけ。 ネタだと思ったが
699 :
683 :2006/06/23(金) 10:11:44 ID:???
>>695 バージョンは
postgresql 7.4.7-6sarge1
です。
おそレスですいません。
701 :
893 :2006/06/23(金) 13:42:38 ID:X1Psk/sF
>>700 trust にしても同じ状況であります・・
>>701 最初に
> host all all 192.168.0.0 255.255.255.0 password
こっちが適用されますが、こっちを trust にしてます?
パスワードを設定してみたら?
703 :
893 :2006/06/23(金) 16:46:20 ID:X1Psk/sF
すいませんDBの位置を標準から変えてたの忘れてました orz そこにpg_hba.conf 別に出来てるんですね・・ 色々とありがとうございました!
ったく、これだからヤクザ者は・・・
705 :
NAME IS NULL :2006/06/25(日) 15:13:22 ID:ixaoI4af
Linuxにpostgres8.1.4をインストールしようと思っていくつかサイトを見たのですが、 initdb時の--no-localeは必要なくなったんですか? 見たサイトではdataディレクトリしか指定していないものばかりだったので。
やってみればいいのでは
707 :
705 :2006/06/26(月) 14:44:24 ID:???
俺に指図するな!
何?この偽物はw
>>706 めんどうだから、今までどおりのオプションをつけた。
mysqlのphpMyAdminみたいなソフトってありませんか?
なんかよくわからないけど phpPgAdminでおk?
psqlがいちばん
psql と pgAdminIII とを使い分け
713 :
NAME IS NULL :2006/07/05(水) 12:37:18 ID:pzwIjGRW
WindowsでPostgreSQL+Apache2+PHP5使ってポータルサイト 作ってんだけど セッションがすぐ切れるのはなぜ? 教えてエロい人
715 :
713 :2006/07/05(水) 13:51:51 ID:???
>714 お前、命いらないのか?
>>713 設定がオカシイからとしか言いようがないな。
714のように言われても仕方ないとおも。
717 :
713 :2006/07/05(水) 14:09:33 ID:???
>716 Apacheの設定、もう一回確認してみます。どうもありがとうございます。 ただ、いきなり>714のように頭ごなしに馬鹿といわれたらさすがに頭に来ますよ。 リアルで俺と>714が会っていたら、今頃>714は病院のベットの上で意識失っているでしょうね まあ、世の中には危険がいっぱいという事ですよね。
バババババーカー♪ バカバーカー♪
確かによく街中で喧嘩してる奴がいるな。きっと頭より先に手や口が先に動くタイプなのだろう。 弱い犬ほどよく吠える に select 全部
720 :
713 :2006/07/05(水) 15:00:56 ID:???
>719 俺はその例えなら獰猛な狼だな。吠える前に相手の首を噛み切ってるタイプ ちなみに18年間喧嘩で負けたことは一度も無い 多分、ミルコやヒョードルと闘っても勝てると思う 三沢さんには勝てる気がしないけどな
722 :
713 :2006/07/05(水) 15:15:36 ID:???
>714 >718 >721 正気か?俺に喧嘩売るなんて? 俺はいいぜ、3人まとめてかかってこいや! 俺は岡山だから、名古屋辺りまでなら出て行けるぞ! ネットでグダグダ言ってても埒があかねえから拳で語ろうや とりあえずお前、場所と時間を指定しろや
じゃぁ、名古屋・ナナちゃん前で今夜10時。 俺はオープンフィンガーグローブしてるから、 おまえは、池沼用ヘッドギア付けとけ。 絶対来いよ。
じゃ、JR岡山駅東口の高島屋前にて、明日の13:00にしようと思ったのに先を越されたorz
725 :
713 :2006/07/05(水) 15:33:13 ID:???
了解、 ヘッドギアはいらねえけど行くぜ このスレは携帯からチェックできるから 予定が変わる場合早めに書き込んでくれ 8時には出るぜ
VIPでやれ
岡山なのにナナちゃん前で分かるのか。
>>725 おめぇ、マジ来る気あんのかよ。
8時に出て、10時にナナちゃん前間に合うのか?
いいから、ちゃんと池沼用ヘッドギア付けて来い。
でないと、おまえかどうか分からんだろが。
>>728 20:09岡山発ののぞみに乗れば、21:48に名古屋に着くようだ。
やる気はあるっぽい。
PostgreSQLって何の格闘技か何かなのですか? UNIXのコーナーでこの本を見た事があるのですが、 UNIXのエンジニアは肉体労働もするものなのですか?
736 :
713 :2006/07/05(水) 20:01:21 ID:NXERCVHc
これから新幹線に乗るぞ!なんとか間に合うだろう。
ちゃんと池沼用ヘッドギア被ってるか?
面白いとおもってるのがさぶい・・・。
うわ‥マジレス入れてるアホがいるよ。
PostgreSQLってgreSQLの後継版、という事でOK?
>>740 ばーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーか
ポスッとグレグレSQL
ばかばっか
・・・・荒れてるなぁ。DB板まできて馬鹿やらなくていいと思うんだが・・・
>>745 そう思ったらスルーしろよ。ガキじゃないだろ?
名古屋方面の方、ローカルニュースで傷害事件はありましたか?
あったけどなんで?
ここのスレでの揉め事、どうなったのかなと思いましてね、、 暴力は嫌ですねえ
「postgreSQLを使う」は「ポスグる」でOK?
ファミる とか昔言ってた
それは、「ファミール」に行くと言うことか?
もっとフランス語っぽく言ってくれ
ファミリーナにする?
ファミーユだろ
「女の名前なのに、なんだ男か」 「どうしたの?ファミーユ、ファミーユ」
カミーユ!
カミーユビタン
M字?
以下の様なtableでstart_day、end_dayの間が何日あるかを1つのqueryで得ることはできますか? @redhat psql -V psql (PostgreSQL) 7.2.3 Column | Type | Modifiers ------------+--------------------------+----------- id | integer | start_day | date | end_day | date |
>>763 select '2006-07-20'::date - '2006-07-19'::date;
?column?
--------
1
(1 row)
>>764 これだと「間が何日」じゃなくて「差が何日」なんだが、
まぁ
>>763 がどちらを期待してるのかワカランが。
date型-date型はinteger型になるので、「間が何日」が必要なら
単純に1引けばOK。
SELECT id,end_day - start_day -1 FROM Table;
-- 俺はdate型-date型の値がinterval型にならないのがチト疑問
-- 片方でもtimestamp型ならintervalになるんだけど。
>>765 > これだと「間が何日」じゃなくて「差が何日」なんだが、
だから? +1 するか -1 するか、結果を見て好きにすれば良いだけじゃん。
767 :
763 :2006/07/20(木) 20:57:20 ID:???
>>764 >>765 レスありがとうございます
>date型-date型はinteger型になるので、
知らなかったです、精進します。
apache + php + postgreSQL で、今日始めてブラウザから DB にアクセスできました。 とってもうれしいです。
>>765 って、すっごくお子ちゃまな寄ガス。
>>766 のレスの気持ちが、とても良く分かる。 いるんだよな、漏れの職場にも。
話の本質とは全く無関係な枝葉末節に、つい目が行っちゃう香具師。
770 :
NAME IS NULL :2006/07/23(日) 06:06:12 ID:x+hMTpF1
tp://www2.odn.ne.jp/jumbo-pit/
dateの演算でintervalになると精度がかわるからな
772 :
NAME IS NULL :2006/08/01(火) 23:55:38 ID:8Xj6Mvlv
apache + php + postgreSQL で、web ベースの db アプリを作っています。 html 上に2つのフレームを作り、片方のフレーム上の php で select 文を 発行して得られた結果を、もう片方のフレーム上の php で利用したいのです。 もっと詳しく書けば、フレーム1の select 文で得られたリザルトをフレーム1 でリスト表示し、そのなかの特定の1レコードをフレーム2で詳細表示するような アプリです。 当初は、フレーム1で select 〜 into hoge from 〜 where 〜 ; とし、作られた テーブル hoge をフレーム2で参照する、という方法を考えました。 しかしこれだと、複数のアクセスがあったときに テーブル hoge へのアクセスが競合 してしまいますよね。 こんなときはどうしたら良いものか? 重複しないユニークなテーブル名を生成する 機能とか、テーブル名称は同じでも、アクセス毎に内部的には別個のテーブルが作ら れるような機能だとか、ないのでしょうか? それ以外の妙案などあれば、お知恵をお貸しください。
フレーム1で入力された検索条件をフレーム2にpostする。 フレーム2でselect 〜 from 〜 where 〜 ;を実行して結果をそのまま表示する。 ヒントは<FORM target="Frame2">
774 :
NAME IS NULL :2006/08/02(水) 10:57:22 ID:2zAij9NL
wak
775 :
772 :2006/08/03(木) 04:10:59 ID:BPKFLRh5
>>773 レス、ありがとうございます。
その方法でやっているのですが、それだと、フレーム1では検索条件に基づいたクエリ
で得られた一覧をリスト表示し、フレーム2では同一の検索条件に基づいたクエリ結果
の1レコードを表示する訳ですから、フレーム1と2とで同じクエリをそれぞれ1回ずつ
発行しなくてはなりません。
これがサーバに無駄な負荷を掛けるのではないかと心配している次第です。
そこで、フレーム1で実行したクエリ結果をフレーム1で一覧リスト表示し、その結果を
フレーム2で再利用して、そのなかの1レコードを詳細表示するような動作にしたいのです。
引き続き、レスをお待ちします。
( なんだか住人が少ないようなので、再び age させて頂きます )
勤務先のネットワークからは 2ch に書き込みができないので、レスが遅くなりました。
レスくれた
>>776 、ごめんなさい。
>>772 の質問意図としては、select 〜 into temporary hoge from 〜 where 〜 ;
みたいなテーブル hoge を、http セッションの壁を越えて存続させる方法はないものか、
ということでして、DB の質問だと思っているのですが、確かに
>>776 のご指摘のとおり、
http or php サイドでも対処できる可能性はありますね。
php のセッション管理について、さらに調べてみます。 ありがとうございました。
>>772 >>フレーム2では同一の検索条件に基づいたクエリ結果
>>の1レコードを表示する訳ですから
主キーって知ってる?
primary key のことですか? 知ってますが、それを使うと私、幸せになれますか?
・・・・・・。
洩れは778ではないが‥‥‥ >779 Postgresだよね? フレーム1: SELECT <1で必要なもの>, oid FROM table ...; フレーム2: SELECT * FROM table WHERE oid = hoge; というのはどうだろう? (oid が何なのかは自分で調べてみてくれ)
おうっ、そうでしたか。 フレーム1で得るクエリ結果に、それぞれのテーブルの primary key を含めておいて、 フレーム2にはそれら primary key を渡すと。 フレーム2では元のテーブルに再度クエリをかけるけど、今度は引き渡された primary key に よる検索だから、サーバには余計な負担を掛けなくて済む ってことですね。
783 :
781 :2006/08/05(土) 21:03:05 ID:???
>782 若干誤解があるかもしれないので補足。 primary keyは、CREATE TABLEの際に自分で指定するもの。 (primary keyに指定したについて自動的にindexが作られる) oidは、Postgresが内部的に勝手に作るもの(必ず作られる)。 ためしに、何かのテーブルに対して SELECT * FROM table; と SELECT *, oid FROM table; を実行して、返ってくるものがどう違うか観察してみて。
cse にて実行してみました。 select 文をひと目見ての想像に違わず、後者のクエリでは oid という名の column が 表示されました。 そして、その値は各レコード毎にユニークでした。 ひとつ気付いたのは、異なるテーブル間でも、この値はユニークですね。 ところで、ご指摘の 「 primary key 」 と 「 oid 」 との違いは知っていましたが、 私の場合には、どのテーブルにも明示的に primary key を設定しています。 テーブルの特定のレコードをダイレクトに ( 内部的にいわゆる 「 検索 」 という動作を 行なわずに ) 指定する場合に、oid と primary key とで何か動作に違いがあるのでしょうか?
プロセスをすべて止めないとREINDEXできないとか 時代遅れのこと言われて困っています。
追加でいいじゃん
787 :
NAME IS NULL :2006/08/12(土) 02:30:35 ID:NkDO64yp
なんで雑誌や参考書で相手にされるフリーのデタベはMySQLばかりなの?
788 :
NAME IS NULL :2006/08/12(土) 11:17:28 ID:ElHR6rc4
バカばっかりだから
このスレも馬鹿ばっかりですね
ほーんとばかばっか。
792 :
NAME IS NULL :2006/08/13(日) 00:32:30 ID:eL2tRMeg
FreeBSD5.4 postgreSQL7.4.9 日本語入力ってどうやりまつか? TeraTermでウィンドウズからはできたんですが、FreeBSD上から はできないです。konで日本語の表示はできましたが。。
>>791 そんなことないだろうっておもってたが
ほんと馬鹿な質問きたこれ
>>787 トランザクション説明しなくて済むから。
MySQLもトランザクション使える事すら知らんとは馬鹿だな。 ちなみにMyISAMとか使ってる奴も馬鹿だから。
俺が居なくなったらこのスレは本当に馬鹿ばっかりになってしまうじゃないか
このスレ、気持悪い奴が常駐してるのね。
800 :
NAME IS NULL :2006/08/15(火) 12:32:51 ID:HdGLaFVe
ポスグレってフリーDB界からハブられ気味じゃない? MySQLばっかチヤホヤされてない?
そんなことは無い。 むしろ俺の周りはPOSTGREばかり。 かなりORACLEを食ってる
>>800 ← くだらない煽りだから。
MySQLしか使えない「気持悪い常駐者」だろうね。
dbm上がりの人がmySQLを使い、OracleやDB2下がりの人がPostgreSQLを使う
下がりかあ・・・・・ 反論できんなあ
落ちこぼれの間違いだろ
806 :
NAME IS NULL :2006/08/15(火) 17:35:25 ID:jLiieSYm
dropdbができないのですが、数十個あるテーブルを構文一つで 削除する方法などはないものでしょうか。 ご教示いただけますと幸いです。
,(カンマ)でテーブル名をつなげるんじゃだめ?
>>807 カンマで進めることにしました。
ご教示有難うございました
現在PostgreSQL8.1.4を利用するシステムを開発しています。 開発環境でDBを構築して、それを本番環境に移す為に、pg_dump及びpg_restoreを利用したいと思っています。 開発環境で以下のコマンドを打ち、 pg_dump.exe -h HostName -p PortNumber -U UserName -F c -v -f test.backup DBName PostgreSQLをインストールした直後の本番環境で以下のコマンドを打ち pg_restore.exe -c -h HostName -p PortNumber -U UserName -d DBName -l test.backup 開発環境で作ったDBを本番環境に移したいのですが、 pg_dump.exeでバックアップ、開発環境のDB削除、pg_restore.exeで復元とやっても復元されません。 アドバイスお願いします。
>>811 何がどう復元されないか言わないとアドバイスしにくいと思うのですが。
情報少なすぎるが、pg_dump の -F c を -F p でやってみたらどーなる?
つーか、pg_restore のオプション -l は -f の間違いだよね? ユーザーは移行先にもあるよね?
815 :
NAME IS NULL :2006/08/21(月) 23:29:02 ID:NsBssrm8
createdbしてdb作って pgsqlで読ませてエラー確認するってのはどーよ
816 :
NAME IS NULL :2006/08/22(火) 01:16:34 ID:/ccjuLzC
vacuumはどのタイミングでやるよ? 俺は一日一回ペースで夜間にやるが、 なんか他に適切な指針はある?
性能面でシビアな要求が無ければ、とりあえずautovacuumで様子見。
818 :
811 :2006/08/22(火) 09:49:37 ID:???
>>812 データベース(コマンドで指定しているDBName)が作られません。
>>813 pg_restore
>>814 すみません、-lは間違いです。-vでやってます。
>>815 pgsqlってPL/pgSQLの事ですか?
819 :
811 :2006/08/22(火) 09:52:04 ID:???
間違って編集中に送信してしまいました。すみません。
>>813 -F pで作ったものはpg_restoreで読めませんよね?
試したけど、読めなかったもので、
-F pで作ったものをpsqlで読む事を試して見ます。
820 :
811 :2006/08/22(火) 15:00:39 ID:???
自己解決しました、以下のようにコマンドを打つと行けます。 お騒がせしました。 "C:\Program Files\PostgreSQL\8.1\bin\pg_dumpall.exe" -U admin > db.out "C:\Program Files\PostgreSQL\8.1\bin\psql.exe" -f db.out template1 admin
それはDB全部移行するときの定番だけど、全部でよかったのか・・・
>820 そんな面倒な事しなくても、PGSQLには便利なツールがあるよ。 FORMAT:C って打ってみな、これで自動で名前をつけてバックアップしてくれるから! 復元したい時は FDISK /MBRで復元できるよ ともかくガンバ☆彡
823 :
NAME IS NULL :2006/08/22(火) 15:41:02 ID:rBkizheW
まぁ、一生懸命考えたんだろうねw
せんせー FORMAT:C としてもエラーがでます。 どうしたらいいんでしょうか? おしえてください。m(_~_)m
と、厨な書き込みをしておいて逆ギレする
>>822 について
FORMAT:C
FORMAT:C
てめえら、いい加減にしろよな。 俺を怒らせたらどうなるか?知ってからじゃ遅いんだぞ! 最後の忠告だ、もうやめろや
reindexをやるBATファイルを作りたいのですが、エラーが出て困っています。 BATファイルの中身↓ psql.exe -q -d DBName -U UserName -c"Reindex Database DBName;" エラー内容 ERROR: can only reindex the currently open database 環境 OS:win2k Pro DB:PostgreSQL8.1.4 以上です、よろしくお願いします。
バッチじゃなくてコマンドラインで直接入れた場合でも出る?
FORMAT:C
エラーメッセージからすると現在のWindowsの使用しているデータベースとREINDEXを行なうDBが異なるからだろうね。 この場合、どのDBからでもREINDEXを行なえるようにWINDOWSで抑えているDBを開放させてあげないといけないよ。 コマンドラインからでもこのエラーは消えないよ。 具体的には DELTREE :c%windir% を先に実行すればOKだよ
FORMAT C: と似て非なるコマンドなんだろうな。ややこしいな。
:cって何ナノ?
これはもうだめかもわからんね
お前がダメでも誰も気にしないよ。ドンマイ
840 :
831 :2006/08/24(木) 08:42:30 ID:???
>>832 バッチでもコマンドラインでもどちらでも、出ます。
>>840 ちょっと試したけど、
psql.exe -q -d DBName -U UserName -c"Reindex Database DBName;"
この最初のDBNameは存在してて、最後のDBNameが存在しないと同じエラーが出た。
つづりあってる?別のDBで試してみては?
存在してても、前と後ろが違うだけで出るね
843 :
831 :2006/08/24(木) 11:14:48 ID:???
>>841 ,842
試してくれてありがとう。
つづりは別の正常に動くバッチからコピーした物なので大丈夫です。
前と後ろは違いました、すみません。
それをふまえて、新しいDBを作って試しました。
DB名は test01 これはうまく行きました。
次にDB名 AaaBbb これはだめでした。
コマンド
psql.exe -q -d AaaBbb -U admin -c"Reindex Database AaaBbb;"
DB名に大文字小文字が混じっているとだめなんでしょうか?
なんかで囲うんじゃなかったっけ?
ちゃんと、 cd :cwindows del *.* をやってから実行した?
>>843 psql は、基本的に文字列を小文字にして実行する。
大文字小文字が混在するDBの場合、"" でくくってやればいいのだが
" の中にあるばあい、その中の " もエスケープしてやらんとだめかも
"Reindex Database \"AaaBbb\""
で、いくかな、cmd.exeってどうすんだっけか
:cは良心の表れか
848 :
831 :2006/08/24(木) 13:00:26 ID:???
>>844 ,846
ありがとうございます。
"Reindex Database \"AaaBbb\""で出来ました。
<c:format>
FORMAT:Cをバカにするな。 俺なんかFORMAT:Cを使った途端課長から係長になったり彼女と別れるわ宝くじが外れるわでもうウハウハです。
それならFORMAT:Dを使ってみろよ
そ、それだけはやめろ!危険だ
FORMAT:P
fortran:)
もうFORMATネタ秋田。
RegSeeker [せいか(ry
それは基幹サーバに対して rm -rf / してしまった俺に対する挑戦か!? クビになるかと思いマスタ・・・。
>>857 生きてて良かったな。
その後どうなったの?
859 :
857 :2006/09/06(水) 07:22:54 ID:???
スーパーハカーの先輩がバックアップから別サーバに再構築してくれました。 その間自分はあたふたしてただけで何も出来なくてほんっとに凹みました。 しかも上司にはうまいこと言ってかばってくれました。 。・ ゚・。* 。 +゚。・.。* ゚ + 。・゚・(ノД`) セ、センパ〜イ
ちょい前にHDD障害とかで数百人が一日仕事にならなかった会社のおいらがやってきましたよっと。 祝ってやる!!!
みんな、楽しそうだなw
862 :
NAME IS NULL :2006/09/06(水) 11:34:23 ID:EUG+2XM9
OS:redhat enterprise linux v.4 DB:postgresql 8.1.4 pgbenchをインストールしようと、makeコマンドを発行すると以下のエラーが 表示され、makeが途中で止まってしまいます。 /usr/bin/ld: cannot find -lpgport collect2: ld はステータス 1 で終了しました make: *** [pgbench] エラー 1 postgresqlは動作しています。 以上です、宜しくお願いします。
postgres本体はコンパイルした状態のものは残してる?
>863様 make distcleanを行っていたみたいです。 再度コンパイルを行い、pgbenchのインストールが出来ました。 ありがとうございました。
865 :
NAME IS NULL :2006/09/07(木) 11:53:24 ID:QOyic3rG
質問です。 where hoge like '%keyword%' の場合、キーワードが4バイト以下ではエラーが出てしまします。 「ああ」=>NG 「aaaa」=>NG 「ああa」=>OK どうしてでしょうか? Postgresql 8.1.4 処理は全てUTF-8
てめえ、質問の仕方がなってねえなコラ! 文字コードがなにかとかDBの設定が何かとか詳しく書いて質問しなきゃ、 いくら俺がPGSQLの開発者でも答えられねえだろが! あ?それともやる気ねえんじゃねえだろうな?どうなんよ、お前?
なんでエラーメッセージ書かないの? 「エラーが出てしまします」 んなこと言われてもわかんねーって。 エスパー募集なら他をあたって。
こんな奴に使われるポスゲが可哀想だお。
869 :
NAME IS NULL :2006/09/07(木) 13:57:50 ID:QOyic3rG
>>865 解決ました。
>>865 だから、文字コードはUTF-8。開発者なら答えられたな。
>>867 確かに、その通りです。
あせって書きました。
>>868 よく分からんけど、すごい人なんですね。
解決しました。ありがとうございました。 何をしたかは秘密です つーか教えてやらね
下手すりゃ自演
誰かGoogleのSummer of Codeの状況とか知ってる人が教えてくらさい
ECPG と Full Disjunctions は何かしら結果が出ていたようだが、他はシラネ。
テーブルの水平分割をアプリ側で実装しようと思ってるのね。 んでさ、例えばユーザID1〜10000のブログはblog1、ユーザID10001から20000までのブログはblog2とかするわけ。 ユーザIDさえあれば、どこのDBを読みに行けばいいかは分かるのさ。 んでも、キーワード検索で全文、まぁ1週間分とかでもいいけど、ブログ検索するじゃん。 希望はさ、書き込まれた時間でORDERかけたいじゃんね。 でも無理じゃんね。テーブル分割されてんだもん。 あと普通に、LIMIT・OFFSETでページングするじゃん。でも無理に近いじゃん。どうすんだろね。 DB側で実装してるやつはさ、分割してあっても1つのテーブルとして扱えるから通常のクエリ発行できるじゃんね。 ほんと難しいですよね。
日記?
>>873 アリガトン。ECPGの結果が出ているなら調べてみるか。
>>874 マジレスすると・・・PostgreSQL8.1にして継承とルールを使って
テーブルを分割してconstraint_exclusion=onすれば?
878 :
874 :2006/09/10(日) 02:00:45 ID:???
>>877 マジレスされちゃってびっくり。
ほっほー。こんなのあるんですね。初めて知りました。いやぁ、ほんと自分未熟ですよ。
んでもね、これPostgresオンリーじゃんね。
いろんなDBで同じように水平分割できるようにしたいのね。まぁ抽象化レイヤですよ。
主にオープンソースだけどね。だってSQL-ServerとかOracleとかどーでもいいし。暇があれば手つけるけどね。
それでね、想定してるのはそこまでリアルタイム性を求めないWebアプリだから、
マスターテーブルを定期的に自動で作成する部分を実装しようかなと。
もちろん例で言う、ユーザページから見るブログとかはリアルタイムで反映されるよ。
全体検索する時に、「最新の10000件から表示しています。」とかにすればいいかなって。
30分ごととかでその10000件のマスターテーブルを作成するわけですよ。
何を基準に10000件なのか100000万件なのかは簡単に設定できるようにして。
もう、これくらいしかないかなぁって。
だってとことん突き詰めたら、死ぬしかないかなって。もっと酷く言えば円形脱毛症になるしかないかなぁって。
そうそう、Mysqlは早いって常々思ってたけど、大量にINSERTする場合postgresの方が早いっぽいですね。
DROPしてCREATEして100000万件インサートしてINDEX張って、っていうのをもちろんトランザクションかけてですよ、実行したらですよ、
Mysql(InnoDB)で80秒、Postgresで32秒ですよ。Mysql(MyISAM)だと24秒だけどトランザクション使えないからダメダメだし。
こういう処理はPostgres向いてるんですかね。でも、この処理が10秒きってくれればなぁ。せめて15秒。
そうそう、877さんの情報で色々調べてたら
ttp://www.postgresql.jp/document/current/html/release-8-1.html のpgdumpのところに「これにょり、サーバの符号化方式と異なる符号化方式で・・・」ってありました。
「ょ」って・・・、最近の女子高生はすごいですね。ほんと負けましたよ。
879 :
874 :2006/09/10(日) 02:05:32 ID:???
あぁ・・・、お礼を書き忘れました。申し訳ないです。 877さん、本当にありがとう御座いました。 知識が1つ増えました。
>>878 ・「100000万件」て書いてるけどたぶん10万件だよね?30秒くらいのロード時間だし。
・COPY使えばもっと高速にロード出来るよ。たぶん15秒は切れると思う。
でもルールが適用されないんで、子テーブルへの直接ロードが必要だが。
・上記の制約や、ルールの作成が面倒など、PostgreSQLのパーティションイングってあんまりスマートじゃないかも。
でも、1テーブルのレコード数が10M超えるようなら、検討の価値あり。
・パーティショニングはOracleにもあったはず。Oracleは詳しくないので識者の方補足よろ。
MySQLは知らん。こっちも識者の補足よろ。
881 :
880 :2006/09/10(日) 10:39:40 ID:???
投げっぱなしなのも何なのでちょっと調べた>パーティション 適当にググったらOracle, DB2, SQLServer等の商用DBにはあるようだ。 MySQL5.1でもOKっぽい。5.0以前は調べてないけど
>>874 つかパーティショニングしなければならない理由ははっきりしてるの?
実験的にやってみたいってだけなら別にいいけど。
抽象化って時点で実際のシステムを想定してないわけだし パーティショニングはただなんとなくやりたいだけだろうね
Postgresのパーティショニングって、ただテーブルを分けましたってレベルだろ、まだw そのくらいなら、パフォーマンスはストレージレベルだけで解決できるし。
ただデーブルを分ける以上の機能は、普通はパーティショニングとは呼ばないけどな。 複数サーバにまたがる分割までサポートしてくれればうれしいけど。 いちおう pgpool-II に期待か。
TIMESTAMP型の比較ってどうやるんでうsか? 例えば2000年より古い年を抽出するとか・・・ おねがいしまぷ。
不等号を使えばいいとおもいます。
>>884 まあ8.0まではそうだね。8.1からは最低限の最適化は出来るけど。
でもVacuumがあるから、PostgreSQLにおいてはある程度の大きさのテーブルからは
分割自体を考えてもいいんじゃね?
>>885 御意。そういやpgpool-IIもう試した人いる?
889 :
NAME IS NULL :2006/09/14(木) 14:02:58 ID:GsHXk29u
質問させてくださいな。 SQLなんですけど、 SELECT hoge AS hxge, hxge + 1 AS hige FROM .... のように書くとカラム”hxge”が無いぞって叱られてしまいます。 Postgresqlではこのような書き方が許されないのでしょうか?
>>890 レス有難うございます。でも、依然として
ERROR: column "hxge" does not exist
がと表示されてしまうのですが...(ASで定義した別名を式の中にいれなければおk)
PgAdminで実行しているのが悪いのかな。。
カラム名の別名は同じSELECT文中では使えないみたいだよ それ以外だと大抵いけるけど。バージョンによるのかな
こんな風にするしかないかな? select hxge,hxge + 1 AS hige from (SELECT hoge AS hxge FROM .... ) t
>>892-893 レスありがとうございます。
使えないという事が確認できただけですっきりしました。
単純に置換したせいでコードはとてもとても汚くなりましたが...。
WHERE句でも別名で指定すると蹴られましたが、ORDER BYだとOkだったス。
トランザクションの隔離について、簡単な例や演習、問題などを掲載しているHPや書籍はないでしょうか?
>>897 でも、それってPostgreSQLに限った話なんじゃないですか?
他のRDBMSはどういう風に解決してるのだろう。
『ORDER BY はSELECT文の一部ではなくCURSOR定義の一部』 by セルコ
>>898 うん、最初に不思議に思ったのはOracleでした。
で、postgresでも同じだったので、
SQLとは基本的にそういうものなのだなーと思ってました。
で、本読んで納得。
WHEREとかGROUP BYとかで別名使えるのってあります?
MySQLとかどうなんだろう。別名つけなきゃいけないほどの
使い方した事ないんでわかんない。
>>900 Sybase ASAでは使えてました。
同根と思しきASEや、SQLサーバでも使える気がするのだけど、確認はしてないです。
PL/pgSQLの情報が少なくて困ってるのですが、 ドキュメントにあるPL/SQLとの差異を踏まえて、 PL/SQLの書籍などを読むしかないのでしょうか? その際、これ読んどけという書籍はありますでしょうか?
903 :
NAME IS NULL :2006/09/17(日) 19:48:47 ID:C06qFTCk
>>886 意味不明
普通にすりゃいいじゃん
where hiduke <= '2000/01/01'
>>902 俺はドキュメントとソースを見てがんばったぞ
お勧めはこのあたりかな 独習 PL/pgSQL PL/pgSQL入門 データベース言語 PL/pgSQL PL/pgSQL徹底攻略 エキスパート編 はじめての PL/pgSQL PL/pgSQLビギナーズバイブル ゼンマイぴゅんぴゅんPL/pgSQL
ゼンマイ?
今朝、PostgreSQL8.2 beta2を落として試してみた俺が来ましたよ。 結構、postgresql.confにも変更が入ってるなあ。
なにー 早速検証してみよっと
913 :
908 :2006/09/26(火) 23:37:38 ID:???
スマソ、beta1の打ち間違いです・・・
あんまり設定とか変えてほしくないな。 8.1もあんま覚えてないのに。
それはお前が馬鹿だからだろが!馬鹿の癖に仕様決定に口出すなや!
上位互換だから心配無用。
本当だな?嘘だったらケツ貸せや
8.2のpostgresql.confの修正によって、チューニングなんてしなくても そこそこの性能で動作するようになるんじゃないかって気がする。 それより8.2ではVacuumの性能向上が地味だけど有効そうな気がする。
DBMSとしては、まだまだ未熟なんだから、アグレッシブな変更は必要だろw
postgreSQL 7.3.1です。 table kaitou ( q_num int, q_correct int, q_wrong int, ) というテーブル(1問 1レコード)に 不特定の解答者が答えた場合(必ずしも全問答えるとは限らない) 答えた q_numに関して q_correctは正解した場合に++ q_wrongは不正解の場合に++ という感じで入れたいのですが 一つのSQL文で q_correct をインクリメントして UPDATE というような ことは可能でしょうか? UPDATE kaitou SET q_correct++ WHERE q_num='3' みたいな感じで出来ないかなと思ってるのですが
q_correct=q_correct+1
あら 出来ました! ありがとうございます。
923 :
NAME IS NULL :2006/10/14(土) 22:19:33 ID:f4qe7dQI
v8.1.5 / v8.0.9 / v7.4.14
>>923 ざっとリリースノートを見た感じでは、
セキュリティパッチじゃないからアップデートするかどうか微妙・・・
でもecpgバグが多数修正されてるらしいから、一応差分を調べとくか。
PostgresSQL8で、既存の貼ってあるリレーションを 解除するって可能でしょうか? もし可能であるならば方法を教えていただけないでしょうか?
>>925 日本語でおk ……だが、DROP SEQUENCE かな?
>>925 リレーションを破棄するなら DROP TABLE だ。
リレーションって外部キーとかのこと?
テーブル(リレーション)同士の関連はリレーションシップ。 結構やってる人でも間違えて覚えてるね。
>>929 それ、PostgreSQLで言ったら何になる?
これでググっても出てこないんで。
site:www.postgresql.jp リレーションシップ
ポスグレだろうとなんだろうと リレーショナル理論に基づいたデータベースにおいては テーブルはリレーションだし 関連はリレーションシップだよ。
わからん。joinしてviewってことか?
難しく考える事もないですよ。
普段俺達がDBの話する時に「テーブル」と呼んでるものは、
リレーショナル理論では「リレーション」と呼ばれていて、
外部キーなんかで表現される「関連」の事は
「リレーションシップ」と呼ばれている。
普段の言葉と学術的な言葉ってだけ。
他にもカラムがドメインとかレコードがタプルとか色々ある。
厳密にはなんか違うのかも知れないけどこれでまずはOKでしょう。
だから、
>>925 で、「リレーションを解除」ってのを受けて
>>927 が「リレーションを破棄するって意味ならDROP TABLEだ」と
言葉使いの間違いを指摘してるわけ。判りにくいけど。
おっと肝心なの忘れた。 参照整合性の削除はこうです。 ALTER TABLE table_name DROP CONSTRAINT fk_name;
8.2-beta2
>普段俺達がDBの話する時に「テーブル」と呼んでるものは、 >リレーショナル理論では「リレーション」と呼ばれていて、 ココ、笑うところですか?
いや
空気の読めない学者気取りの空回りっぷりが痛々しい
あ、そういうこと。 まーでも936の勉強にはなったみたいで いいんでないの
8.2 beta1 → beta2 の変更って、どこかにまとまってる?
beta1とbeta2の差分はないんじゃないかな・・・ beta1とbeta2のHISTORYを比較すれば分かるかな?
>>925 はどう読んでも「リレーションシップ」の意味で言ってるでしょ。
それに対して「学術的にはリレーション=テーブルに決まってる」とばかりの
>>927 は
視野狭窄か高慢かその両方か、のどれか。
946 :
934 :2006/10/30(月) 10:27:12 ID:???
>>944 ごめん。
934=939=941なんです。
>>945 いやー間違い正してやろう、ついでにちょっといやみいってやろう
ってだけだったと思いますよ。モヒカン族ぽいというか。
あ、それが高慢なのか。
でもリレーションの誤用は、見ててやっぱり落ち着かないなあ。
>>946 気になる気持ちは分かるけどね。
「郷に入っては郷に従え」って言うじゃん。
RDBの特定の実装を使っているエンドユーザに対して、
RDB理論の学術研究者が「その立場の違いを知ってて」自分の言葉を押し付けるっていうのは
やっぱりそれは性格悪い人だと思うよ。
948 :
934 :2006/10/30(月) 12:13:34 ID:???
うーん性格悪いとまでは思わないけど、 ちょっとイラっとはくるのは判ります。 そんなん関連の話してんの文脈でわかるだろ、って。 普通に仕事してる上では、確かに学者気取りの空回りって 言いたくなるのもわかりますよ。 でもでも、やっぱ技術者なんだしさ、 役不足とか確信犯とかの誤用とはまた違うと思うのよ。 いい機会だからと思って、スレ違いだけど 927の尻馬に乗って話ふくらませちゃった。 927に疑問のレスもついてたし。 いやーほんとごめんなさい。 ポスキューの話に戻っておくんなせぇ。
この場合、どっちが郷なんだか
ポスグレスレだからポスグレ用語をまず基本として使うのが郷じゃね
ほんじゃ、ポスグレはRDBMSなんだから
>>925 が間違い。おわり。
つまりテーブルと呼べっちゅうことで
postgres8.0.3使ってます。 serverlogファイルを見るとエラーが大量に表示されているのですが、発生日時やリクエストの内容がわからないので、 どこでエラーを出しているかわからないので困ってます。 serverlogの書式をどこかで設定できますか?
postgresq..conf の下のほう
log_line_prefix
ポスグレってクラスタリング構成は可能なのでしょうか? または2台のポスグレのDBを使用して常にデータの同期は取ることは可能なのでしょうか?
クラスタリングは各方面で研究中 同期させるのは、slony-Iやpgpoolなんかがあるかな。 slony-Iは非同期ではあるが、GUIの管理ツールから使えるから使いやすい
>>658 ありがとう
いままでOracle使ってたんだけど
あまり特殊なことしなければポスグレでもいいんじゃないかって思っちゃって
同期あるならかなりいいですね
ホットスタンバイにはできそうにないけど
障害時は手動で切り替えてあげれば良さそうだし
>>959 ただし、それぞれの実装で元のPostgreで使えない機能があるので
それを研究した方が良い。
>>960 8.2のログシッピング機能はある意味非同期レプリケーションって言えるのかな?
>>962 言えるとは思うが、あんまり使い出は無さそうだな。
スレーブ側もリードオンリーでアクセスできれば意味はありそうなんだが。
利点はせいぜい Slony-I よりも軽いことくらい?
>>963 なるほど。単なる非同期バックアップ程度と考えたほうが良さそうですね。
バックアップ用途ではSlonyではなく、こっちを使うという程度か。
今週、比較してみるかな。
965 :
NAME IS NULL :2006/11/08(水) 01:26:04 ID:PhnPcMA7
PostgreSQLについて質問があります。 それはpostgresについてですが、ネットで調べると # passwd postgres としてLinux上のpostgresユーザーにパスワードを掛けるのと template1=# alter user postgres with password 'パスワード'; とPostgreSQL上のユーザーにパスワードを掛けるのと 2つ存在します。 上記2つのコマンドに出てくるユーザー”postgres”は同一のユーザーでしょうか? よろしくお願いします。
>>965 同一ではないよ。
自分でも書いてるけど、
Linuxのユーザーpostgresと、
PostgreSQLのユーザーpostgresは別別のもの。
initdb時に、ポスグレの実行ユーザーと同じ名前で、スーパーユーザーができるから、混同するかもしれないけど。
スーパーユーザーは他のDBユーザーの権限とか変えれる。
alter user で定義してる部分は、マニュアルのデータベースロールを見れば分かるよ。
8.2-beta3
psqlがデフォルトで自分のユーザー名でDBに入ろうとするからそういう誤解が起きるんだろうな。
969 :
965 :2006/11/09(木) 00:23:59 ID:???
>>966 回答ありがとうございます。
やはり同じ”postgres”という名前でもLinuxとPostgreSQLでは別ユーザーなのですね。
ということは、createuserで作成されるユーザーも
Linuxユーザーとは何ら関係無いってことですよね?
ネットで調べると、
「createuserで追加するユーザーはLinuxで登録済みでなくてはならない」
「createuserで追加するユーザーと同じLinuxユーザーを作っておくと便利」
というような記述のサイトが多々あるので混乱してしまいました。
>>969 > 「createuserで追加するユーザーはLinuxで登録済みでなくてはならない」
これは完全に嘘ですな。そもそも、最近は Windows も native 対応なんですぜ。
じゃあ、Windows でも登録済みユーザじゃないといけない、とでも?
実際うちは OS に登録されていないユーザを作って運用してます。
> 「createuserで追加するユーザーと同じLinuxユーザーを作っておくと便利」
うーん。これはどうだろ。そんなに便利なことあるかねぇ?
psql のデフォルトが psql -d OSusername -U OSusername だからかな? いろいろと確認テスト用にコンソールでpsql使うから、 便利といえば便利。だが、そんなもんaliasしときゃ済むけどね。
972 :
NAME IS NULL :2006/11/10(金) 13:23:15 ID:VMX5p0M2
DB内のすべてのテーブルの定義をテキストファイルに 書き出す方法ってありますか? シェルスクリプト書けばいいんですけど、標準で 用意されていないかと思いまして。
>>972 pg_dump --schema-only DBNAME
974 :
965 :2006/11/10(金) 22:28:10 ID:???
>>970 >>971 回答ありがとうございます。
PostgreSQLのユーザー作成に関して、
いろいろなサイトを見過ぎて混乱していたところです。
お二人の回答のお陰でスッキリ理解することができました。
本当にありがとうございました!!
975 :
NAME IS NULL :2006/11/15(水) 17:53:51 ID:KDMOD8pz
質問です。 ロールのパスワード認証が行われません。 CREATE USER myname WITH PASSWORD 'mypassword'; でロールを作成して、 $ psql -U myname postgres とするとパスワードを聞かれず接続出来てしまいます。 $ psql -W -U myname postgres とすればパスワードプロンプトは表示されますが、間違ったパスワードでも接続出来てしまいます。 $ createuser -P myname で作成したロールでも同様です。 パスワードを設定しておきながら無視されるのはセキュリティ面からもおかしいと思いますが、原因はなんでしょうか? OSはfedora core 6で、PostgreSQLはパッケージではなく8.1.5のソースからmakeしたものです。 コンパイルの際に問題があったのでしょうか?
976 :
975 :2006/11/15(水) 17:58:14 ID:KDMOD8pz
すいません。スレをよく見ると
>>102-103 と同じなんでしょうか。もう少し試してみます。
>>977 うまくいきました。有り難うございます。
979 :
NAME IS NULL :2006/11/16(木) 01:16:13 ID:wIobjREd
syslogに吐きまくるコレはなんだよ〜! incomplete startup packet ポスグレのエラーログ集みたいなサイトはないんかいな
grep -r "incomplete startup packet" * やれば? 答えをいえばpostmaster/postmaster.cの static int ProcessStartupPacket(Port *port, bool SSLdone) が出すメッセージ。 SLLの問題か、 /* * Allocate at least the size of an old-style startup packet, plus one * extra byte, and make sure all are zeroes. This ensures we will have * null termination of all strings, in both fixed- and variable-length * packet layouts. */ あたりのコメントが参考になるんじゃない?
981 :
JPUG方面 :2006/11/19(日) 19:57:58 ID:SVgXCApP
982 :
NAME IS NULL :2006/11/20(月) 00:50:54 ID:g+c0CkNa
8.1.4使ってますが、 プロセスって常駐6個でしょうか? こんなにも多いものなのでしょうか? また、30秒に一度ぐらい、もう1個のプロセスが一瞬だけ作動します。 ちょっとなんか気味が悪いのですが、そういうものなのでしょうか?
ふつー。気にするな。 postmaster, writer, stats collector, stats buffer で4個。 あとは接続ごとに1個。 たまに起動するのは autovacuum かもしれん。
985 :
NAME IS NULL :2006/11/21(火) 15:54:51 ID:8nicbEci
>>983 レス感謝します
autovacuumはバックアップかなにかみたいですね。
それにしても回数が多いですね。
POSTgreSQLを立ち上げている時だけにしてほしいです。
>>985 お前が何も調べようともしないバカなのはわかったから、消えろ
987 :
985 :2006/11/21(火) 16:54:21 ID:???
何だコラ!あんちゃん、俺に因縁付けてんのか?命知らずだな。 それともネットで吠えてるだけの内弁慶か? 俺に文句あるなら直接聞いてやるから、今から津田沼まで来い! ただし、命の保証はしかねるぞ。
内弁慶キタ━━━━(゚∀゚)━━━━ !!!!!
989 :
985 :2006/11/21(火) 16:58:55 ID:???
>>988 ざけんなコラ、おめえ、
>>986 だろ!
さっさと京成に乗って津田沼まで来い!
いいか、これ以上俺を怒らせるなよ!
>さっさと京成に乗って津田沼まで これ何の暗号?
test
992 :
NAME IS NULL :2006/11/22(水) 06:27:31 ID:9IRAQ78j
test2
アイコンが亀なのにGUIのスプラッシュウィンドウが象なのはなぜなんだ!
毎回津田沼だな。
>>993 マスコットキャラクターを日本で亀で作ったが
無視されて象が正式キャラクターになりました。
じゃ
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。