5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

PostgreSQL & pgsql-jp ML 3テーブル目

1 :NAME IS NULL:04/03/20 17:24 ID:/Cqtf47w
PostgreSQLについて語って2万テーブルをめざしましょう。
関連アプリケーション特有の話題は、以下のスレッドへ。
pgsql-mlのヲチもここで。

●過去スレ
PostgreSQL
http://pc2.2ch.net/php/kako/989/989375812.html
PostgreSQL 2テーブル目(移転前)
http://pc2.2ch.net/test/read.cgi/php/1047317680/
PostgreSQL 2テーブル目
http://pc2.2ch.net/test/read.cgi/db/1056944337/

●関連スレ
PostgreSQLのことならここで聞け
http://pc2.2ch.net/test/read.cgi/db/1056960249/
MySQL vs PostgreSQL
http://pc2.2ch.net/test/read.cgi/db/1056943680/
PHP + PostgreSQL
http://pc2.2ch.net/test/read.cgi/php/983128806/
PerlでPostgreSQL
http://pc2.2ch.net/test/read.cgi/php/999249463/

650 :ココ電球(∩T∀T)  ◆tIS/.aX84. :2006/07/01(土) 02:37:20 ID:8EUWdSXu

じゃあこれは?
ーーーーーーーーーーーーーーーーーーーーーーーーー
クライアント1

  コネクションAオープン
    トランザクション開始
      表Aの書き換え
    トランザクション終了
  コネクションAクローズ

クライアントB コネクションAでcommitしたのを電話連絡を受けて以下を開始

  コネクションBオープン
   SELECT XX FROM 表A (ロックなし FOR UPDATEなし)
  コネクションBクローズ

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

651 :NAME IS NULL:2006/07/01(土) 02:58:54 ID:???
>>650
同じサーバなら取れるけど
違うサーバならメタデータなんなりでサーバ更新かけないと反映されない

652 :NAME IS NULL:2006/07/01(土) 03:06:39 ID:9lelxAwe
>>650
素人ですが、
2つ目のクライアントは「クライアントB」じゃなくて、「クライアント2」なんじゃないの?
流れからすれば。
そんな感じで、クライアント名とかコネクション名とか記号を間違うような、
タイポの問題で止まってたりしてない?

653 :ココ電球(∩T∀T)  ◆tIS/.aX84. :2006/07/01(土) 03:12:20 ID:8EUWdSXu

ーーーーーーーーーーーーーーーーーーーーーーーーー
クライアント1

  コネクションAオープン
    トランザクション開始
      表Aの書き換え
    トランザクション終了
  コネクションAクローズ

クライアント2 コネクションAでcommitしたのを電話連絡を受けて以下を開始

  コネクションBオープン
   SELECT XX FROM 表A (ロックなし FOR UPDATEなし)
  コネクションBクローズ

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

修正しました 


654 :NAME IS NULL:2006/07/01(土) 03:18:33 ID:???
ここ、データベースの基本的な話でなく、PostgreSQL についての話題を扱うとこだよね?
commit したら更新したものが取得できるのは当たり前の話じゃないか。
コネクションがどうとか、全然関係ないんですけど。

655 :NAME IS NULL:2006/07/01(土) 06:49:10 ID:l/0TGnCJ
ここの住人のレベルがうんざりするくらいアレだからw

656 :NAME IS NULL:2006/07/01(土) 10:48:47 ID:Q9DHHByP
俺なんてココ電球がいるから書いてるがDBの意味もわからんかったw
ハイラベルwww

657 :NAME IS NULL:2006/07/01(土) 14:29:37 ID:???
>>653
OracleであればDBMS_FLASHBACクエリーでできる。権限が必要だが。

658 :NAME IS NULL:2006/07/01(土) 14:39:37 ID:???
訂正
×DBMS_FLASHBAC
○フラッシュバック

他にもsysdba権限や、import database権限があり、直前のバックアップをもっていれば可能であろう。
そもそもsysdbaを監視設定していないシステムであれば、根本的な問題はシステムではない。

659 :ココ電球(∩T∀T)  ◆tIS/.aX84. :2006/07/02(日) 00:48:55 ID:xNO4Anq7
一つわかったぞ
PGClusterを使ってる場合
コネクションAのcommitを見てほかのコネクションでSELECTしても
コネクションAでの更新が反映されているとは限らないつうことだ

660 :NAME IS NULL:2006/07/02(日) 01:14:49 ID:???
>>659
おいおい… もう絶句や…

661 :ココ電球(∩T∀T)  ◆tIS/.aX84. :2006/07/02(日) 01:39:13 ID:xNO4Anq7
おまい日本語話せないの?
それとも論理的に説明すんの苦手なん?

662 :NAME IS NULL:2006/07/02(日) 01:40:49 ID:???
>>661
自分で何言ってるか分かってるの? 失笑ものだよ。

663 :657,658:2006/07/02(日) 02:06:33 ID:???
PGClusterというのはSERIALIZABLEな一貫性、分離性が保証されている動作モードが
存在するのではないか。ファントム読み取りが発生しうる状況はクラスターじゃなくても
ありうるからそこから調べたらどうだろうか?


664 :ココ電球(∩T∀T)  ◆tIS/.aX84. :2006/07/02(日) 02:34:00 ID:xNO4Anq7
お答えありがとうございます。
このテーブルを書き換えるのはコネクションAだけなので
ファントムリードはないと理解していましたが合ってますでしょうか?
よろしくお願いします

665 :ココ電球(∩T∀T)  ◆tIS/.aX84. :2006/07/02(日) 02:40:45 ID:xNO4Anq7
検索条件は idの一致のみの単純な検索です

666 :NAME IS NULL:2006/07/02(日) 15:56:24 ID:???
PGCluster環境を使用していると仮定して、読み取り一貫性が
保証されているならそうでしょう。今回の件は単純にPGClusterの
レプリケーションが上手く機能していないのではないかと思われますが
いかがでしょうか?




667 :ココ電球(∩T∀T)  ◆tIS/.aX84. :2006/07/02(日) 18:01:59 ID:IkqVEBqE
お返事ありがとうございます。
PGクラスターのデフォルト設定では他のクラスタへのレプリケーションを確認しないで
直接受けたクラスタDBが成功したタイミングでクライアントに返事を返すらしいのです。
もう少し調査してみます。



668 :ココ電球(∩T∀T)  ◆tIS/.aX84. :2006/07/03(月) 21:50:55 ID:q+kqhE6y
usogresつかってますた・・・・
覚悟を決めます

669 :ココ電球(∩T∀T)  ◆Olz.C.gJ3k :2006/07/04(火) 21:13:47 ID:nOXv9efA
ココ電逝ったああああああああああああああああああああああああああああああああああ

670 :& ◆u7PlsZ7.G6 :2006/07/05(水) 16:42:04 ID:e24Z99Oj
!!!!!!っあああああああああああああああああああぁぁぁぁぁぁぁたっ逝電ココ

671 :NAME IS NULL:2006/07/06(木) 03:06:17 ID:TPN99xcc
>>668
usogresですか・・・クラスターやレプリケーションの目的というより、
大幅に速度を犠牲にして(1/2以下)バックアップをリアルタイムで
とる機能といっていますが、正常なDBの区別さえあいまいになる
ソフトウェアですね・・・2002.8.28以降、更新もされていないようで。
usogres.ccそのものはsocketの複製をしてwriteしているだけです
から、サーバを2つ立てて運用する意味が、まったくわかりません。

もちろんご存知だと思いますが、現在のPostgreSQLではWALも改良
されてリカバリーにほとんど問題はありませんし、ロック中のホットバックアップ
も以前よりかなり良くなっているはずなのですが・・・費用面等での7.4以前
の古いバージョンをPostgreSQL8.0以降にバージョンアップできない理由でも
あるのでしょうか?このような問題は、運用に踏み切れない部長なり次長なり
の責任者が不安定な既存システムを抱えるすべての人間を不安にしている
だけでなく、問題が何度も起こってからやっと重い腰をあげるケースが多いよう
に思われます。もちろん責任は一人のSEやPGレベルにはありませんから、そう
悲観なさることもないでしょう。ただ本当にそういった責任者は事実を知らない
のでしょうか・・・知っていて何ら手を打てないのであれば復旧にかかる工数と
導入にかかる工数の天秤にかけるより、より堅牢なシステム構成にしたほうが
望ましいと私は思います。PostgreSQLとは関係ありませんが同じ業界に携わる
ものとして御健闘お祈り致しております。

672 :ココ電球(∩T∀T)  ◆tIS/.aX84. :2006/07/06(木) 22:27:18 ID:f5exc1gI
どもです。
ぜってー二重化して双方使ってると思う。
乱数叩き込んでチェックしたいけど、叩き込んだ途端にハングしそうでこわい・・・



673 :NAME IS NULL:2006/07/08(土) 23:28:51 ID:???
ココ電逝ったあああああああああああああああああああああ

674 :NAME IS NULL:2006/07/09(日) 01:14:45 ID:jxHzBWxU
今posgresqlの勉強しているんだけど
1個のテーブルにデータ量で100万件あるとして
その中から5件を選び出したりするぐらいだったら
oracleもpostgresqlも速度的にはかわらないものなのでしょうか?

675 :NAME IS NULL:2006/07/09(日) 01:35:44 ID:???
変わる場合もあるし、変わらない場合もある。

PostgreSQLを勉強というよりも、もう少し根本的なところから勉強したほうがよろしい。

676 :NAME IS NULL:2006/07/09(日) 01:41:08 ID:jxHzBWxU
>>675
始めたばかりでとんちんかんな質問してしまいもうしわけないです
最近oracleも個人の使用だと安いと聞きましたので

全く同じデータを
同じセレクト文で検索したときはどちらの方が何%速いかっていう
ということなどは出ているのでしょうか?
もしそんなに変化ないようでしたらoracleって個人では意味のない商品ですね

677 :NAME IS NULL:2006/07/09(日) 02:01:21 ID:???
簡潔に。
同じ(ような)条件でのベンチマーク結果は、探せば見つかるはず。
ただし、繰り返し言われているとおり、それが「意味」を持つかどうかは・・・(ry

RDBMSは、速度だけで語られるべきでもない。
Oracle利用〜個人でも意味がある場合もあれば、無い場合もある。

とりあえず、PostgreSQLなりで色々やってみては?
もう少し、自分なりに調べて勉強してみたほうがよろしい。

678 :NAME IS NULL:2006/07/09(日) 06:52:51 ID:???
>>677
Oracle はそういったベンチの公開を禁止しているんじゃなかったっけ?

679 :NAME IS NULL:2006/07/15(土) 02:41:52 ID:???
ポストグレスではMySQLについてるAES関数のような暗号化関数は無いのでしょうか?

680 :NAME IS NULL:2006/07/18(火) 15:56:58 ID:7etx55f4
初歩的な質問ですみません

項目名「hogetime」の値は↓

2005-08-21 01:20:00+09
2005-08-27 12:30:00+09
2005-09-01 10:05:00+09
2005-09-02 08:51:00+09
2005-09-03 04:51:00+09

のようになっています。

これを日付のみの期間を指定してselectで抽出したいのですが、
どのようなSQL文を打てばよいでしょうか?
例えば2005年8月25日〜2005年9月2日のデータを取り出したい場合、
「hogetime」から↓が抽出されるようにしたいのです。

2005-08-27 12:30:00+09
2005-09-01 10:05:00+09
2005-09-02 08:51:00+09

681 :NAME IS NULL:2006/07/18(火) 16:02:14 ID:???
>>680
「SQL BETWEEN」なりで検索するといいよ。

682 :NAME IS NULL:2006/07/18(火) 16:46:27 ID:7etx55f4
>>681
お答えありがとうございます。

分からないのはBETWEENでは無く、日付なんです。
SELECT pubtime FROM article WHERE ?? BETWEEN 2005-08-27 AND 2005-08-28 ;
??の部分と日付の指定の仕方がよく分かりません。
もしお分かりでしたら、教えてください。
ヒントや解説のぺージでもけっこうです。

683 :NAME IS NULL:2006/07/18(火) 16:54:57 ID:???
>>682
ん? 何が分からないのか分からない…
> SELECT pubtime FROM article WHERE ?? BETWEEN 2005-08-27 AND 2005-08-28 ;

SELECT pubtime FROM article WHERE hogetime BETWEEN '2005-08-27' AND '2005-08-28'
で良いんでね? ただ、hogetime は timestamp みたいだから、28 日のデータは 00:00 のものしか含まれないけど。

684 :NAME IS NULL:2006/07/18(火) 17:04:48 ID:7etx55f4
>>683
ありがとうございます。
「'」単純にが抜けてましたorz...

お手数おかけしました。

685 :NAME IS NULL:2006/07/18(火) 20:29:06 ID:???
8.1.4 を使っています。30 万件ほどのデータがあったので、

# create index index_student_entry_date_yomi_name on student(entry_date, yomi, name);

してインデックスを作りました。

# explain select * from student order by entry_date asc, yomi, name limit 10;
QUERY PLAN
--------------------------------------------------------------------------------------------------------------------
Limit (cost=0.00..34.79 rows=10 width=334)
-> Index Scan using index_student_entry_date_yomi_name on student (cost=0.00..879441.59 rows=252775 width=334)
(2 rows)

はいい感じです。ところが、order by にある entrydate asc を entry_date desc にすると

# explain select * from student order by entry_date desc,yomi,name limit 10;
QUERY PLAN
------------------------------------------------------------------------------
Limit (cost=201798.14..201798.16 rows=10 width=334)
-> Sort (cost=201798.14..202430.08 rows=252775 width=334)
Sort Key: entry_date, yomi, name
-> Seq Scan on student (cost=0.00..15134.75 rows=252775 width=334)
(4 rows)

になりインデックスを使ってくれません ( 数秒が十数秒です )。
インデックスを使うようにするにはどうすればいいでしょうか?

686 :NAME IS NULL:2006/07/18(火) 21:18:49 ID:???
>>685
ttp://itpro.nikkeibp.co.jp/article/COLUMN/20051117/224817/

687 :NAME IS NULL:2006/07/18(火) 21:22:14 ID:???
↑の5ページ目な

688 :NAME IS NULL:2006/07/18(火) 21:42:17 ID:???
>>686-687
ありがとうございます。

689 :NAME IS NULL:2006/07/22(土) 10:29:47 ID:8HTjVA0W
すんません、質問があります。
ポスグレのDBサーバーにJSPでデータを入れたいのですが
SDKとJDBCドライバはwebサーバー側に入れればいいのでしょうか。
それともpostgresのDBサーバー側に入れて設定するのでしょうか。
ネットでJDBCのインストール手順を見ても、自宅サーバーの構築手順
ばかりで、webサーバーとDBサーバーが一緒に一台のPCに入っている場合
の手順ばかりでどちらのサーバー側でインストール&設定すればよいのか
よく分かりません。どなたか教えていただけませんでしょうか。

690 :NAME IS NULL:2006/07/22(土) 15:12:12 ID:???
自分で実験してみろ。

691 :NAME IS NULL:2006/07/23(日) 09:44:06 ID:???
SDKやJDBCドライバは何が使うんだよ
少し考えれば分かるだろ

692 :NAME IS NULL:2006/07/23(日) 12:19:51 ID:???
DBサーバ側は5432で口あけて待ってるだけでいい

693 :NAME IS NULL:2006/07/27(木) 04:35:38 ID:M7LKVme/
はじめまして。
最近postgresの勉強を始めたんですが、試しに一つテーブルをつくってみようと
したら「ERROR: parser: parse error at or near "{"」というエラーがでてきます。
今つかってるpostgresのバージョンは7.2.3です。
なんで古いバージョンを使っているのかというと、本に書いてあるのがそのバージョンなんです



694 :NAME IS NULL:2006/07/27(木) 04:55:26 ID:???
>>693
その SQL を書かないと誰も分からん。
しかし、なんで { なんて文字が出てくるんだ?

695 :NAME IS NULL:2006/07/27(木) 05:08:03 ID:M7LKVme/
めちゃくちゃ短いんですけど
create table passwd{
id varchar(8) not null,
passwd varchar(8) not null,
primary key(id)
};

な具合ですorz

696 :NAME IS NULL:2006/07/27(木) 05:22:53 ID:???
>>695
少なくとも {} → () だ。

697 :NAME IS NULL:2006/07/27(木) 05:28:29 ID:M7LKVme/
すみません。。。。。
今度からちゃんと眼鏡かけて本よみます

698 :NAME IS NULL:2006/07/27(木) 10:27:35 ID:???
まぁCとかperlとかやってると{}で囲みたくなる気持ちはわからんでもない。

699 :NAME IS NULL:2006/07/30(日) 06:55:05 ID:???
トリガについて質問です

・注文(日付, 注文数合計)
・注文詳細(日付, 商品番号, 注文数)

みたいなテーブルがあって、注文詳細テーブルに変更があったときに
トリガで注文テーブルの注文数合計を更新したいのですが、
注文詳細テーブルは一括して数行更新されることが多いので
まとまった更新の最後に1回だけトリガで計算したいのです。

こういった処理を実現するにはどうすればいいでしょうか?

700 :NAME IS NULL:2006/08/01(火) 13:44:54 ID:8LI5yT2A
order byで並び替えて、順番が10の倍数だけを抽出した結果を求めたいのですが、SQL一文で出来るでしょうか?

701 :NAME IS NULL:2006/08/02(水) 06:41:22 ID:???
>>700
テンポラリシーケンスでも作ったらいいんじゃない。


702 :NAME IS NULL:2006/08/02(水) 08:44:49 ID:???
>>701
そんなものがあるのか。
っていうか、このスレに書いてあったorz

703 :NAME IS NULL:2006/08/02(水) 10:06:15 ID:???
postgres 7.3.4
Red Hat Linux release 7.3 (Valhalla)

特定のレコードにアクセスしようとすると次のエラーがでます。

ERROR: missing chunk number 0 for toast value 8902358

"REINDEX TABLE"で該当のテーブルのインデックスの修復を試みましたが
状況は変わりませんでした。

何か復元する方法は無いでしょうか?

704 :NAME IS NULL:2006/08/10(木) 11:31:54 ID:c9RdWyBD
自慢げに大したサイトでもないのに・・・
http://itpro.nikkeibp.co.jp/article/NEWS/20060208/228805/
と自慢してやってたが

こんなに無用に金のかかるシステムにしちゃって・・・
一緒に講演してたおっさんに騙されたか?

 ・
 ・
 ・

http://dldojin.blog28.fc2.com/blog-date-20060715.html
速攻で破産してるな。



705 :NAME IS NULL:2006/08/10(木) 21:04:32 ID:???
なんでポストグレスキューエルはMySQLより人気無いの?

706 :NAME IS NULL:2006/08/11(金) 10:42:13 ID:???
安定してないから。
実績がないから。
MySQLで充分だから。
グレスケはBSD厨と間違われそうで嫌だから。
グレスケは一時Red Hatが後押ししてたから。

707 :NAME IS NULL:2006/08/11(金) 14:58:46 ID:???
読みにくいから。

708 :NAME IS NULL:2006/08/13(日) 02:15:23 ID:MsUUCrjU
PL/PGSQLの質問です。
仕事でPL/PGSQLで他人が作った関数をスピードアップしなければなりません。

CREATE FUNCTION fun () RETURNS SETOF record ..
DECLARE
ret record;
BEGIN
FOR ret INTO
SELECT * FROM (SELECT * FROM t_a LEFT JOIN t_b ON .....) AS z LEFT JOIN t_c ON ....
LOOP
...
RETURN NEXT ret;
END LOOP;
RETURN;
END;
....

で、検索SQL "SELECT * FROM (SELECT * FROM t_a LEFT JOIN t_b ON .....) AS z LEFT JOIN t_c ON ...."
は3つのテーブルt_a t_b t_cをLEFT JOINしている複雑なんですが、
500行くらいかえすときはなんとか200msecくらいで処理します。

問題は関数を実行したときに6000msecから10000msecかかることです。10秒くらいかかります。
なかのSELECTが複雑だと500行くらいの処理でも
PL/PGSQLのFORループってものすごく遅いのでしょうか。


カーソルに書き直してみましたがものすごく遅いのでやめました。

あと、もう運用しているのでテーブル設計はやりなおせません。

709 :NAME IS NULL:2006/08/13(日) 02:27:32 ID:???
そもそもなんで関数になってんのか意味不明
とりあえずexplainの結果をだせ

710 :NAME IS NULL:2006/08/13(日) 02:45:33 ID:MsUUCrjU
他人が関数にしたんです。私じゃありません。

なかのSELECTだけでEXPLAINすると
Nested Loop Left Join (cost=0.01..4167.91 rows=471 width=41)
-> Nested Loop Left Join (cost=0.00..1393.46 rows=471 width=37)
-> Index Scan using t_a_idx2 on t_a (cost=0.00..52.51 rows=230 width=33)
Index Cond: ((date >= '2006-08-10'::date) AND (date <= '2006-08-12'::date))
-> Index Scan using t_b_idx on t_b (cost=0.00..5.81 rows=1 width=23)
Index Cond: (("outer".cid = t_b.cid) AND (("outer".code)::text = (t_b.code)::text) AND (("outer".cid)::text = (t_b.cid)::text) AND ("outer".date = t_b.date))
-> Index Scan using t_c_idx3 on t_c (cost=0.01..5.87 rows=1 width=23)
Index Cond: (("outer".cid = t_c.cid) AND (("outer".code)::text = (t_c.code)::text) AND (("outer".cid)::text = t_c.id AND (c.pid = 0) AND ("outer".date = t_c.date))

で実行すると190msecくらい。結果は502行。


EXPLAIN SELECT * FROM fun() を実行すると
Function Scan on fun (cost=0.00..12.50 rows=1000 width=96)


9630msecかかる

こんなかんじです。


711 :NAME IS NULL:2006/08/13(日) 02:52:16 ID:???
>>710
他人が関数にしたのは分かった。
で、関数にしないといけない処理をやっている訳ではないから
関数にしなけりゃいいじゃんって話でしょ?

712 :NAME IS NULL:2006/08/13(日) 03:05:18 ID:MsUUCrjU
この関数はいろんなところで呼ばれていて、
その先々でまたまた複雑なSELECT文がかかれている、めんどうなシステムです。
このシステムをスピードアップしろといわれて関数がボトルネックとまではつきとめて
なんとか関数の中身を7000msecくらいから200msecくらいまではやめたまではよかったけれども関数を実行したらぜんぜん早くなってなかったのでこまっているところです。



713 :NAME IS NULL:2006/08/13(日) 03:08:42 ID:OMR6/0y3
>>711

解決策はないですか?
またはPL/PGSQLのことはわかんないんですか?

714 :NAME IS NULL:2006/08/13(日) 03:29:29 ID:???
>>713
712 と ID が違うが、お前は誰だ?
PL/pgSQL のことは分かっているが、風呂くらい入らせろ。
ボランティアで即答を要求するのか?
そもそも、情報少なすぎ。
実際に SELECT * FROM fun() なんて SQL になってるのか?
何にせよ、気分悪いな。

715 :NAME IS NULL:2006/08/13(日) 03:53:49 ID:???
釣りにマジレスするなよ。質問者を装った荒らしだろ。

716 :NAME IS NULL:2006/08/13(日) 10:12:52 ID:Iw16Wg/m
>>714

結局わかんないんですか?
都合悪くなるとボランティアですか?
postgre厨房はレベル低いんですね


それにしても長い風呂ですね

717 :NAME IS NULL:2006/08/15(火) 11:38:37 ID:???
>>716
3日くらい風呂に入らせろよ

718 :NAME IS NULL:2006/08/19(土) 14:18:52 ID:tjESA4/I
>>714

そんなに長くはいっててだいじょうぶか、
はやく風呂からでろよw

719 :NAME IS NULL:2006/08/20(日) 20:44:32 ID:???
減らず口叩くと一週間に延びるぞ

720 :NAME IS NULL:2006/08/20(日) 22:10:19 ID:+/ksKYrM
バックアップについて教えてください。
pg_dumpを実行すると

schema with OID 5118787 does not exist

こんなエラーが出てバックアップできなくなってしまいました。
パラメータ変えても同じエラーがでます。
vacuumdbしてもかわりません。

バックアップできないだけで、その他は正常に動いているようなのですけど。
同じ症状でDB崩壊の予兆なんていう不気味な書き込みもありましたが、
直し方ご存知の方おりましたら教えてください。


721 :NAME IS NULL:2006/08/21(月) 11:16:12 ID:???
>>720
schema だけと、データだけをダンプするとどうなる?
--schema-only と --data-only ね。

722 :720:2006/08/21(月) 12:17:29 ID:iNhabLLZ
>>721
レスありがとうございます。
早速やってみましたところ、

pg_dump --schema-only
schema with OID 5118787 does not exist

pg_dump --data-only
schema with OID 5118787 does not exist

となりました。

自分の操作でエラーの原因に思い当たるのが、
既存のスキーマ名AをBに変えたらアクセスできなくなったので
Aに戻してからおかしくなった気がします。
スキーマ名の名前変更はPgAdminIIIからやりました。


723 :720:2006/08/21(月) 12:30:56 ID:iNhabLLZ
Postgresqlのバージョンは7.4です。

724 :720:2006/08/21(月) 12:49:04 ID:iNhabLLZ
720
連続の書き込みごめんなさい。
レンサバの管理者に連絡したら、3日前のバックアップが
あるということなので、被害が広がらないうちにこれで
復旧することにしました。
本当は今の状態から復旧できるのがありがたいのですが、
>>721番さん、助けてくれてありがとうございました。

725 :NAME IS NULL:2006/08/21(月) 14:09:22 ID:???
あらら、けっこう切羽詰ってたんですね。

726 :NAME IS NULL:2006/09/05(火) 19:04:20 ID:???
>>722
それ、スキーマの大文字、小文字を区別してることに気が付かなかったとかじゃ…。

727 :NAME IS NULL:2006/09/11(月) 04:32:56 ID:???
皆様 おはようございます
最近、会社に行く前にPostgreSQL(8.1.2)の勉強を始めたのですがつまずいてしまったところが出てきましたので
もしよろしければ教えていただけないでしょうか

店を経営しているつもりで
x日間で一番売り上げがいい日を検索したりできるようなSQL文を作成したいと思っております

uriageテーブルの中の要素に
日付を入れる day
売り上げを入れる money
この中に毎日の日付と売り上げを入れて行けば


私が考えたのは
1)26日間のデータを取り出し違うテーブルに格納
 select * into uriage_temp from uriage ORDER BY day LIMIT 26;
2)uriage_tempテーブルから一番売り上げのいい日を検索
select day,MAX(uriage) from uriage_temp;

なのですがテーブルを1個余分に作らなくてはいけないのと今日から何日間としか指定できないため
不恰好な手順になってしまっています

これを1回のselect文で表現できたりしますでしょうか?
また例えば 現在ではなく2005/9/26から26日前の2005/9/1の間の売り上げが一番よかった日を探すことなども可能でしょうか?

使えそうな関数など教えていただけないでしょうか
よろしくお願いいたします

728 :NAME IS NULL:2006/09/11(月) 05:00:20 ID:???
>>727
# SELECT '2006-09-11'::DATE + '-1 days'::INTERVAL AS from_date;
      from_date
---------------------
 2006-09-10 00:00:00
(1 row)

あとは副問い合わせと組み合わせてどうぞ。

729 :NAME IS NULL:2006/09/11(月) 05:05:05 ID:???
>>728
ありがとうございます
とても参考になります

早速いろいろ実験してみます

730 :NAME IS NULL:2006/09/11(月) 16:34:15 ID:???
http://itpro.nikkeibp.co.jp/oss/index.html

731 :NAME IS NULL:2006/09/12(火) 19:43:59 ID:HfcoGY8n
PostgreSQL 7.3.4で、文字列型と日付型の範囲指定を混在してselectをかけると激遅になります。
文字列型、日付型の両方のカラムにもインデックスは作成しています。
原因か対処方法をご存知の方がいらっしゃいましたらご教授願います。

SELECT * FROM table1 WHERE char1 = 'aaa' AND date1 >= '2005-01-01'
=> これは速い(300万件のテーブルから数件を取り出すのに3秒程度)

SELECT * FROM table1 WHERE char1 = 'aaa' AND date1 BETWEEN '2005-01-01' AND '2006-01-01'
=> これは激遅(300万件のテーブルから数件を取り出すのに、数分待っても応答無し)

SELECT * FROM table1 WHERE char1 = 'aaa' AND date1 >= '2005-01-01' AND date1 <= '2006-01-01'
=> これも激遅(300万件のテーブルから数件を取り出すのに、数分待っても応答無し)


732 :NAME IS NULL:2006/09/12(火) 23:39:08 ID:???
>>731 ANALYZE はしたか? EXPLAIN も晒せ。

733 :731:2006/09/13(水) 13:34:07 ID:???
>>732
ANALYZEで高速になりました。という事は、ANALYZE前は
SELECT * FROM table1 WHERE char1 = 'aaa' AND date1 >= '2005-01-01'

SELECT * FROM table1 WHERE char1 = 'aaa' AND date1 BETWEEN '2005-01-01' AND '2006-01-01'
で違うインデックスが使われていたという事なんですね。
今はEXPLAINしても両者とも全く同じです。
スレ汚しすいませんでした。

734 :NAME IS NULL:2006/09/13(水) 13:56:38 ID:???
ANALYZE前にEXPLAINすれば違いがわかったのにw

735 :NAME IS NULL:2006/09/13(水) 13:57:27 ID:???
おそらく
>違うインデックスが使われていた
んじゃなくて、seq scan だったんだろう

736 :NAME IS NULL:2006/11/16(木) 17:28:57 ID:???
DB内の全てのテーブルにまとめて同じ権限を与えたりする方法って無いですか?
GRANT ALL ON * TO user;
の様なことが出来れば良いんですけど・・・

737 :NAME IS NULL:2006/11/24(金) 17:49:29 ID:HZFCZlio
エンコーディング問題で躓いた・・。

EUCで作成したDBに
例えば
↓↓↓↓↓↓↓↓ここから↓↓↓↓↓↓↓↓↓
右のURL参照ね http://ja.wikipedia.org/wiki/2%E3%81%A1%E3%82%83%E3%82%93%E3%81%AD%E3%82%8B
↑↑↑↑↑↑↑↑ここまで↑↑↑↑↑↑↑↑↑

のようなEUC以外のクエリーの乗っかったデータを入れようとすると

invalid byte sequence for encoding "EUC_JP"

と、言われてしまいます。
なんとかしてそのまま格納できませんかね??

ちなみにデータを入れるカラムはVCHAR(600)です。

738 :NAME IS NULL:2006/11/24(金) 18:00:19 ID:???
>>737
日本語でおk

投げているクエリの文字コードが
EUC以外の”ある文字コード”で統一されているのなら、

set client_encoding to 'ある文字コード'

を事前に投げる。これでだめか?
取得時も同じことすれば、元に戻る。

そういうことを言ってるんじゃないなら、スルーよろ。

739 :NAME IS NULL:2006/11/24(金) 23:22:38 ID:???
質問です。PHP5を使ってデータをpostgresql8.1に入力したいと思っています。
データは以下のようなものでこれを(serial,integer)のデータ型を
持ったテーブルに挿入したいと思っています。

value
------ 
123
245
485
(以下続く *データの長さはバラバラ)

この操作は同時に行われることも想定しています。

この時に一つのデータの塊を連番で入力したいのですが、
同時に入力作業が行われても回避できるような方法はありますか?

(例えばAさんが4つのデータ、Bさんが6つのデータを同時に入力しよう
とした時にserialの列がAさんのデータは1,2,3,4 Bさんのデータが5,6,7,8,9,10と
なるようしたいのです。何も考えずにやるとAさんのデータは1,4,5,8 Bさんの
データは2,3,6,7,9,10とかになりますよね?)

740 :NAME IS NULL:2006/11/25(土) 03:12:46 ID:???
>>739
>例えばAさんが4つのデータ、Bさんが6つのデータを同時に入力しよう

PHP5ってことだから、Webサイト(HTTP)で一度のリクエストでそれぞれ4つ/6つってことだろうか?
それなら、テーブルロックなりファイルロックなりで排他的に処理すれば済む。

しかし、serialで連番を維持しようとするのはどうかなと。トランザクションをROLLBACK
させた場合でもシーケンスは元に戻らないし、削除すると当然空き番になる。

741 :NAME IS NULL:2006/11/25(土) 15:29:27 ID:???
>>740
返事が遅くなりましたが、書かれた事を調べました。

なるほど、PHPで適当なファイルを作成して
ファイルロックを使えば良いというわけですね。
ちょっとスレ違いですがこんな感じでよろしいですかね?

$filep = 〜/lock.txt;
$fp = @fopen( $filep, "r+" );
@flock($fp,LOCK_EX);
=======================
sql関連の処理
=======================
flock($fp,LOCK_UN);
fclose( $fp );

・・・で後はlock.txtが存在するかどうかといった条件を
作ればよいというわけですね。

連番の維持に関しては入力後に変更や削除するようなデータではないですし、
番号も処理毎にまとまっていれば問題ないので大丈夫だと思います。
色々とありがとうございます。勉強になりました。

742 :NAME IS NULL:2006/11/25(土) 16:34:17 ID:eQzXrEm9
>>738

EUC以外の”ある文字コード”で統一されて「いない」
カラムなのです・・・
(たとえば掲示板の書き込みのように URLぺたっと
 張られるようなイメージ)

なので、入れるときも、出すときもEUCで放りこみたいんですが・・
無理なんですかねぇ・・・

PostgreSQL側でのチェックとか外せないのかな・・・?

743 :NAME IS NULL:2006/11/25(土) 19:06:20 ID:???
posgresのことまったく知らんが、
Binary型みたいのに放りこめばいいんじゃねぇ?


744 :NAME IS NULL:2006/11/27(月) 23:42:45 ID:s994NHnA
PostgreSQL 8.2 RC

745 :NAME IS NULL:2006/11/28(火) 12:28:38 ID:???
>>742
それはテキスト型とは言えないだろう。
入れたものをそのまま取り出したいなら、BYTEA型にしとけ。

746 :NAME IS NULL:2006/11/28(火) 16:31:26 ID:???
>>742
INSERTするときプログラムで文字コード判定して
EUCにエンコードしてから
いれりゃいいんじゃね?


747 :NAME IS NULL:2006/11/29(水) 18:35:38 ID:???
1000万件のレコードからselectをかけるか検討しているの
ですが、結構運用的に無理があったりしますかね。

748 :NAME IS NULL:2006/11/29(水) 20:55:27 ID:???
>>747
インデックスを適切に(ry

749 :NAME IS NULL:2006/11/29(水) 23:27:04 ID:???
ダメったときのこと考えたらoracleにしておいた方が
サポ逃げできるけどなぁ・・・

運用してるとこもあるだろうが、専門タスクチームとか
あるんじゃねぇかなぁ・・・

ちなみに俺が今やってるのはレン鯖なこともあり高々15万件だが
PHPのレスポンスは2秒強掛かってる

750 :NAME IS NULL:2006/11/29(水) 23:27:48 ID:???
おっとポスグレ74でな。

285 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)