PostgreSQL & pgsql-jp ML 3テーブル目
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001NAME IS NULL
04/03/20 17:24ID:/Cqtf47w関連アプリケーション特有の話題は、以下のスレッドへ。
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/
0002NAME IS NULL
04/03/20 17:30ID:???乙
0003NAME IS NULL
04/03/20 19:19ID:cQph4WXCスレ立て乙。
0004お願いします
04/03/29 15:15ID:bZAOhvfOPostgreSQLって、コラム名にuser使えないの?
967 :NAME IS NULL :04/03/29 14:43 ID:bZAOhvfO
ERROR: parser: parse error at or near....
って何よ。。
968 :NAME IS NULL :04/03/29 15:00 ID:bZAOhvfO
********=# CREATE TABLE accesslog (
********(# time timestamp(0),
********(# path varchar(80),
********(# ssid varchar(80),
********(# user varchar(80),
********(# group varchar(80),
********(# lang varchar(10),
********(# remote varchar(80),
********(# browser varchar(80),
********(# error text);
ERROR: parser: parse error at or near "user" at character 84
0005NAME IS NULL
04/03/30 16:50ID:???http://www.postgresql.jp/document/pg742doc/html/sql-keywords-appendix.html
0006NAME IS NULL
04/03/30 19:11ID:???番号が飽和してしまったときの処理が必要なときは、
max を使わない方がいいのでしょうか。
0007NAME IS NULL
04/03/31 23:46ID:???0008NAME IS NULL
04/04/08 17:18ID:???UPDATE t1 SET a = b, b = c;
とやったときの評価順序って規定されていないんでしたっけ?
それとも左から右が保証されてます?
0009NAME IS NULL
04/04/08 17:33ID:???何が言いたいのか良くわからん。勘違いしているかも知れんが、
UPDATEされる前の値が参照されるので、順序は関係ないと思われ。
0010NAME IS NULL
04/04/08 18:44ID:???> UPDATEされる前の値が参照される
これがわかれば充分です。そういうもんなんですね。
0011NAME IS NULL
04/04/19 02:21ID:???PostgreSQLオフィシャルマニュアル
http://www.amazon.co.jp/exec/obidos/ASIN/4844315897
読みながら色々試してたんですが……。
point型を数値に型変換する方法がわかりません。
atan2にぶちこんで、ラジアンに変換したいんですが、とりあえず生でぶちこんでも駄目だと言われます。
何か、とても簡単な方法があるような気がするんですが、みつけられないでいます。
ヒントをいただけないでしょうか。
0012NAME IS NULL
04/04/19 02:46ID:???pがpoint型として
select atan2(p[0],p[1]) from table...
0014NAME IS NULL
04/04/27 23:45ID:wkoq9ZT+0015NAME IS NULL
04/04/28 02:27ID:KBMCaswfmakeするとこんなエラーがでてしまう…。
/usr/include/c++/3.2.2/exception:57: overriding `virtual const char*
std::exception::what() const throw ()'
make[2]: *** [exception.o] エラー 1
make[2]: 出ます ディレクトリ `/home/nozaki/usogres-0.8.1/src'
make[1]: *** [all-recursive] エラー 1
make[1]: 出ます ディレクトリ `/home/nozaki/usogres-0.8.1'
make: *** [all-recursive-am] エラー 2
gccとglibc関係はインストールパッケージのrpmそのまま。
compat-gcc-7.3-2.96.118
gcc-g77-3.2.2-5
gcc-java-3.2.2-5
libgcc-3.2.2-5
compat-gcc-c++-7.3-2.96.118
gcc-3.2.2-5
gcc-c++-3.2.2-5
gcc-gnat-3.2.2-5
glib-1.2.10-10
glibc-common-2.3.2-11.9
glibc-2.3.2-11.9
glib2-2.2.1-1
glibc-devel-2.3.2-11.9
glibc-kernheaders-2.4-8.10
usogresのサイトみるとgcc-2.95.x と glibc2.1.9xではだめで、最新のgccならOKと
いうようなことを書いてあるけど、新しすぎてもだめなのかな?
だれか上手くいった人います?
0016NAME IS NULL
04/04/28 04:25ID:???どんなコマンドでみれますか?
0017NAME IS NULL
04/04/28 16:45ID:N09xy6IOls(1)
00181
04/04/29 02:52ID:???0019NAME IS NULL
04/04/30 15:17ID:???0020NAME IS NULL
04/04/30 15:26ID:???行き着いたときだったか、使い尽くしたときだったか忘れたけど、
動かなくなってしまうんじゃなかったかな。
今のところそこまで使い切ったDBは存在しないらしい。
って、ソースコードの中かリリースノートかなんかで読んだ。
開発者自身も検証していないようなコメントだった。
0021NAME IS NULL
04/04/30 17:16ID:???usogres使うならいっそpgpoolにしてみたら?
http://www2b.biglobe.ne.jp/~caco/pgpool/
http://itpro.nikkeibp.co.jp/members/ITPro/oss/20040422/2/
0022NAME IS NULL
04/05/01 00:19ID:???なるほど、これもよさげですね。
こちらを試してみます。
どうもありがとう。
0023NAME IS NULL
04/05/01 00:41ID:ZjwnXM2Mおいらも気になってた
確かlog int だったかな
じゃ直ぐ無くなる
0024NAME IS NULL
04/05/01 01:33ID:???一応初期オブジェクトの分を除いてループする。
けどそのときの動作保証はない。
0025NAME IS NULL
04/05/01 09:55ID:???0026NAME IS NULL
04/05/01 12:38ID:???思ったらpostgre95のころからMLにいるのね。
ぐぐったら1996年のアーカイブが出てきたよ。
経験=スキルではないんだね…
0027NAME IS NULL
04/05/01 15:23ID:???「常識的に考えましょう」とか釣られて回答してる奴らの方がキモいのでは。
結局誰も答えられてないし。
ファイルがでかいからって、lo_unlinkって5分もかかるのかなあ。
0028490
04/05/04 12:02ID:jR8ayW8MAdministrator@windows2000 ~
$ pg_ctl start
pg_ctl: Another postmaster may be running. Trying to start postmaster anyway.
FATAL: File /usr/local/pgsql/data/PG_VERSION is missing. This is not a valid da
ta directory.
pg_ctl: cannot start postmaster
Examine the log output.
0029NAME IS NULL
04/05/04 12:03ID:???0030490
04/05/04 12:04ID:jR8ayW8M0031NAME IS NULL
04/05/12 04:59ID:???ですが、テーブルを表示させると全レコード全カラムの値が「#Deleted」
になってしまう場合があります。
ですが、Postgres上で
create view hoge as select * from fuga;
(fugaは#Deletedになるテーブル)
とやって、このビューをAccessで見るときちんと値が取れています。
なんか不思議です…
んで、テーブルを見たときに「#Deleted」になる場合とならない場合があります。
特定のテーブルではなる、別のテーブルではならないんです。
この再現条件がよくわかりません(わかってもどうなるもんでもないかも)。
この変な現象ってぐぐってみても不思議な現象みたいな書かれ方をしてて
原因が特定できてないような感じです。
これ、回避する手段ありますか? view使うのは…それでもいいんですけど、
できれば直接テーブルを参照してってのはできないんでしょうか?
バージョンはPostgreSQL7.4.2、ODBCドライバ7.03.02.00、Access2000(9.0.3821 SR-1)です。
あと、Postgresとの接続にはSSHのトンネルを介しています。
0032NAME IS NULL
04/05/12 10:13ID:???Oracleとかでもそうなるよ。
他のクライアントから削除、更新をすると#Deletedになるんじゃなかったかな。
で、結局回避方法は再表示(だったか再接続だったか・・・)ぐらいしか
なかったような気がする。
原因はプライマリキーをアクセスが拾えないとかじゃなかったかな。
「かなかな」ばかりですまんが。
003331
04/05/13 03:33ID:???遅くなってすんません。
他からはデータベースに接続してない状態で
ただ単にテーブルを表示させるだけでも#Deletedになっちゃうんです。
テーブルの定義をして、念のためAccessを終わらせて、
再度起動してテーブルを開くと#Deletedになっちゃうんです。
なんか、情報があんまりなさそげですね…
そんな状態でもinsertやupdateはできてるみたいだから、参照はviewを使うことにするか…
0034NAME IS NULL
04/05/13 16:00ID:???うろ覚えなんだけど、OIDオプションの「インデックスを装う」をonにすることで回避できたような気が。
0035NAME IS NULL
04/05/13 17:29ID:???serialやdefaultを使ってるとなる?
http://www.interwiz.koganei.tokyo.jp/software/PsqlODBC/faq.html
003631
04/05/15 05:45ID:???>>34
今現在手元に実機(てか、Accessの入ったマシン)がないので、
あとでやってみます。
「oid オプション 装う」でぐぐってみたらこんなのが引掛りました。
http://osb.sra.co.jp/PostgreSQL/odbc/odbc732.html
まだ読んでませんが、参考になりそうです。
>>35
defaultを使ってます。でもその文書の記述だとinsertなどをしたときになるような感じですね…
0037NAME IS NULL
04/05/17 10:13ID:???テーブルに主キーが設定されてないとか?
0038NAME IS NULL
04/05/25 18:57ID:xgZdnpwF解決方法しらないですか?
0039NAME IS NULL
04/05/25 19:11ID:xgZdnpwF0040NAME IS NULL
04/05/25 19:18ID:???postgresql.conf
0041NAME IS NULL
04/05/26 00:42ID:hRTK0advそれをやるとJavaから呼び出したときに文字化けするかもしれないことがわかった。
一括設定はあきらめる。
0042NAME IS NULL
04/05/26 17:57ID:???7.1.2から7.3.3にしました。
データの移行が済んで、データの確認をした所
order by が正常に機能しなくなりました・・・
症状としては、
テーブルを作ってあいうえでデータを入れてorder byをかけた所
え
い
あ
う
(4 rows)
で帰ってくると言う物です。
ほかでも調べて
./configureの設定やnitdb --encoding=EUC_JP --no-locale
もやってみたのですが、全然うまく行きません。
なんとかなる方法は無いでしょうか?
環境は
PostgresSQL7.3.3
apache_1.3.29
PHP4.3.1
です。
どなたかよいアドバイス等あったらお願いします。
0043NAME IS NULL
04/05/26 18:33ID:???のまえに、なぜ7.3.3なんだ。
せめて7.3.6に上げてみれば。
0044NAME IS NULL
04/05/26 23:11ID:???psqlからshow all;かなんかしてlc_*がどうなってるか見てみたら?
004542
04/05/27 01:14ID:???返事ありがとうございます。また返答遅くなって申し訳ございません。
Show all で確認したところ、エンコーディングはEUC_JPなっていました・・・
Psql -l だとEUC_JPと表示されます・・・・
そしてlc_* us_en に・・・・
これが原因なのでしょうか?
/etc/sysconfig/li18nも
LANG=EUC_JP
LC_ALL=EUC_JP
LC_CTYPE=EUC_JP
LINGUAS=EUC_JP
と変えてあります・・・
004644
04/05/27 11:43ID:???ソレダ!!
lc_collateあたりは、initdbした時に決定して以降変更できないはず。
やっぱinitdbの時に--no-localeなってくれなかったように
見えるな。気の毒だけどinitdbしなおすしかないと思いマス。
004742
04/05/28 05:33ID:???返事が遅れて申し訳ないです。
pg_ctl stop
rm -rf /usr/local/pgsql/data
initdb --encoding=EUC_JP --no-locale
pg_ctl start
で、テストデータを流しなおして
createdb test_base
psql test_base
CREATE TABLE T_TEST (T VARCHAR(128));
INSERT INTO T_TEST (T) VALUES ('あ');
INSERT INTO T_TEST (T) VALUES ('い');
INSERT INTO T_TEST (T) VALUES ('う');
INSERT INTO T_TEST (T) VALUES ('え');
SELECT * FROM T_TEST ORDER BY T;
であいうえお順にデータが並びました。
その後
SELECT * FROM pg_settings WHERE name like 'lc%' or name like '%encoding'
でサーバークライアント共にエンコードがEUC_JPになって居るのを確認。
lc_*が全てCになっているのを確認して、データのリストアを無事に終了しました。
初歩ミスでポストマスターが正常に終了せずに変な挙動になっていたみたいです。
無理やりポストマスターをつぶして上記作業で正常動作になりました。
>>43
助言に従って7.3.6にアップしました。
以上ありがとうございました。
0048NAME IS NULL
04/05/29 03:54ID:???0049NAME IS NULL
04/05/29 16:29ID:???0050NAME IS NULL
04/05/29 18:46ID:???だって、もとは7.1だよ。
0051NAME IS NULL
04/05/30 00:23ID:???激しく変化したから?
0052NAME IS NULL
04/06/03 02:09ID:???ここで聞けスレにも書いてるみたいだが、英語だけでなく日本語も苦手っぽいし
0053NAME IS NULL
04/06/04 22:35ID:???0054NAME IS NULL
04/06/06 02:05ID:czq84YCV教えてエロい人。
CREATE FUNCTION hogehoge() returns opaque as '
BEGIN
NEW.last_access := CURRENT_TIMESTAMP;
RETURN NEW;
END;
' language 'plpgsql';
0055NAME IS NULL
04/06/06 09:29ID:???"BEGIN "
"NEW.last_access := CURRENT_TIMESTAMP; "
"RETURN NEW; "
"END; "
"' language 'plpgsql'; "
0056NAME IS NULL
04/06/07 17:02ID:???http://www.postgresql.jp/document/pg742doc/html/triggers.html
http://www.postgresql.jp/document/pg742doc/html/spi.html
この辺の話だと思うが、諦めたほうが得策。
どうしてもやりたかったら、自力でやってみてどこまで出来たか教えれ。
0057NAME IS NULL
04/06/21 17:35ID:HUxGxZ267.2.1 で使っているラージオブジェクトを含むデータを
% pg_dump -b -F c DB_NAME > foo.out
などとしてバックアップを取り、7.3.4 の方で
% pg_restore -d DB_NAME foo.out
として戻そうとすると、
pg_restore: [archiver (db)] could not execute query: ERROR: Column "COLUMN" is of type timestamp without time zone but default expression is of type text
You will need to rewrite or cast the expression
と言われてしまいます。
ラージオブジェクトを含まないデータなら、timestamp 型の記述を書き換えて
restore すれば良いみたいなのですが、ラージオブジェクトを含むデータの場合は
どう対処すれば良いでしょうか。お知恵をお貸し下さい。
0058NAME IS NULL
04/06/21 18:10ID:???0059NAME IS NULL
04/06/21 19:38ID:HUxGxZ267.2.1 から最新バージョン(7.4.x)への移行の問題として捉えて下さって結構です。
どなたかよろしくお願いします。
0060NAME IS NULL
04/07/09 01:31ID:???なんでしょうねあれ。
0061NAME IS NULL
04/07/09 09:18ID:???0062NAME IS NULL
04/07/19 18:43ID:3/3kexye・char
・varchar
・text
の違いがわかりません(><)
誰か教えてください。特に、charとtextの違い。
やっぱり、textの方がメモリを食うんですか?
0063NAME IS NULL
04/07/19 19:15ID:???0064NAME IS NULL
04/07/19 19:46ID:???006562
04/07/19 19:56ID:???だと思ってカキコしたら違ってました・・・(><)
dat落ちしてしまっているみたいだし・・・どうすれば・・・。
0066NAME IS NULL
04/07/19 20:20ID:???http://pc5.2ch.net/test/read.cgi/db/1056960249/
0068NAME IS NULL
04/09/30 11:17:58ID:???俺的ブックマーク
Windows版PostgreSQL配布サイト
ttp://pgfoundry.org/
ttp://pgfoundry.org/projects/pginstaller/
0069NAME IS NULL
04/11/19 10:56:55ID:???0070NAME IS NULL
04/11/19 16:31:44ID:???0071NAME IS NULL
04/11/19 17:38:51ID:???0072NAME IS NULL
04/11/19 18:57:48ID:???0073NAME IS NULL
04/11/19 19:10:52ID:???ISO-2022-JP じゃなきゃだめなのかぁ。
0074NAME IS NULL
04/11/22 20:52:17ID:???いやな予感がするので、レス書けません。
0075NAME IS NULL
04/11/22 21:55:28ID:???0076NAME IS NULL
04/11/23 07:36:43ID:???time関連の値が同じになることが保証されないんだってね。
こまかいtimestampに依存をしないようにはするけど、
日付がちょうどかわるときにきたtime関連値を使用する値をどう扱えばいいんだろう。
できればデータベースで完結する方法として。
例えば、日付と日付支番を主キーにしたいんだけども、
マスターのnowが2004-11-23 23:59:59.9を前提に処理し、
セカンダリが2004-11-24 0:0:0.1を前提に処理したら、
マスターでは日付、日付支番が
2004-11-23 10
なりとなり、
セカンダリでは、日付、日付支番が、
2004-11-24 1
となる。
日付が変わる直前直後5秒づつぐらいアクセスを拒否する設定とかでもいいんだけどな。
同期がとれているんだったら。
0077NAME IS NULL
04/11/23 13:11:58ID:???英和辞書を紹介したら、引き方のレクチャーもしなきゃいけない
なんてことないですか。
あ、堅いレスがついているようですね。
0078NAME IS NULL
04/11/23 22:11:07ID:???使ったことないが Slony-I は time の値は同じになるとのこと。
非同期レプリだけどね。
0079NAME IS NULL
04/11/26 18:25:32ID:TIFoj5JUただ、そちらはラージオブジェクトが使えないそうなんですよね。
pgpool_now()とかって関数を入力したら、そこだけ置換してくれるとかあれば嬉しいのに。
0080NAME IS NULL
04/11/26 19:49:50ID:ybnduqE4pgpoolに関してはSQLレベルで分配してるだけだから。
だからpostgresql側の変更が不要なかわりに、
nowなどサーバ依存な動作は不許可なわけ。
仮にpgpool_now()なんてつくって、それはpgpoolが解釈して
時刻を埋め込むものだとしても、どっかで破綻しない?
クエリーがpgpool依存になるってのは目をつぶるとしても。
って書いてて思ったのだが、
クエリーを投げる側(アプリ側)でnowとか使わないように
アプリ側で時刻を埋め込めばいんじゃん。
#問題はシーケンスとかだろなあ。
0081NAME IS NULL
04/11/27 01:02:45ID:???ラージオブジェクトは使えないね。
セミナーに行ったとき、開発者が NO と断言してた。
0082NAME IS NULL
04/11/28 11:09:47ID:???>って書いてて思ったのだが、
>クエリーを投げる側(アプリ側)でnowとか使わないように
>アプリ側で時刻を埋め込めばいんじゃん。
ってまあ、たしかにそうなんだけどね。
ただ、nowはよく使う関数だからなぁ。
Slony-Iはテーブル単位での管理ができるってことだから、
ラージオブジェクトの管理だけ別にやって残りで使うって手もあるか。
0083NAME IS NULL
04/11/28 22:53:29ID:7LOVBWilSlony-Iは非同期。
最悪10秒くらいデータの不一致が発生するけどOK?
0084NAME IS NULL
04/11/29 21:17:05ID:???うーん、かたっぽのDBがアボーンした時に、
即座にもう片方で動作できるようにするのがレプリケーションする目的なんで、
最悪スレーブの方読みに行かなくてもいいかもなぁとか思ってたり。
日付関連値をできるなら主キーにしたいんで、
そこの不整合が起きるとめんどいしね。
pgpoolで、一つ思ったことに、
アプリ、pgpool側で乱数を発生させ(重複がまず発生しない桁数)
マスタ側で時刻テーブル(乱数、now())なりで一旦適当なテーブルにnowなりの値を保存。
マスターもスレーブもそのマスターにあるテーブルをみて、乱数をキーにして時刻を取得。
マスターアボーンしてるとわかったら、スレーブは自前のnowを使う。
これはシーケンスにも使えるかもね。
縮退運転に備えて、シーケンス番号をこまめにセットしないとならないけど。
シーケンスにトリガ貼るってできるんかな、、、、、?
もちろん、これはDB越しのアクセスってなんかでき無いとダメだけどね。
Slony-Iをみるかぎりできそうだけど(でないとレプリケーションできないはずだよね)
試してない。
とか言うのどうかなぁ?とか思ってみたり。
0085NAME IS NULL
04/11/29 21:20:31ID:???まあ、順序が保証されるんなら、max+1でもいいから特に重要ではないかもしれんが。
0086NAME IS NULL
04/11/29 21:25:57ID:???、、、良く考えたら、「順序が保証される」ようにできるのなら、
どちらかのシーケンスにpgpool経由以外からアクセスさせないようにしておけば、
両方のサーバーともシーケンス番号は同じになるんじゃないかな
それともおいら何か見落としてる?
0087NAME IS NULL
04/11/29 21:58:26ID:???自分で試さないと答えは出てこないような気が。
0088NAME IS NULL
04/11/30 09:34:18ID:8FceD7Au原理的には。
しかし、運用に負担がかかる。
そもそも、シーケンスという概念で隠蔽したもろもろが、
そのような運用にしたとたん、
主にトラブル時だが、一気に表面に出てくる。
nowとかも同じね。
運用が面倒になることのデメリットが理解できないのなら、
レプリケーションを実運用すべきでない。
0089NAME IS NULL
04/11/30 09:51:11ID:???乱数とかいってる時点で厨房だな。
レプリケーション、いやDBに手を出すのはやめといたほうがいい。
0090NAME IS NULL
04/12/01 01:35:49ID:???0091NAME IS NULL
04/12/02 12:59:27ID:pHcXoZZE探したけど見つかっていない状態なのでどなか教えてください
0092NAME IS NULL
04/12/27 00:15:28ID:NPDFfQpiどっちにもpostgreSQLが回してあって、
どっちかがサイトごと死んでもそのまま生かし続けられる、
と云う構成にしたい場合、
siteAとsiteBにそれぞれpgPoolを入れて、
その下のdbをたすき掛的にレプリケーションをしておけばok?
ちなみにpgPoolへの接続は自動的に切り替えられるものとして。
わかりにくいかな?
まあ明日テストしてみるけど。
0093NAME IS NULL
04/12/27 00:18:34ID:???pgpoolはどちらか一方、もしくは別マシンでOK。
009492
04/12/27 00:23:04ID:NPDFfQpisiteAとsiteBには通常運用時(両方生きてるとき)はパラでアクセスが来るんだよね。
だからたすき掛がいいかなと。
009593
04/12/27 00:35:57ID:???0096NAME IS NULL
04/12/27 00:36:39ID:???009792
04/12/27 00:38:54ID:???009892
04/12/28 23:06:02ID:???クラスタDBのネットワークケーブル抜いたりしたけど、
2度ほど障害が出ただけであっさり再開(縮退モード)。
こりゃ便利だわ。
0099NAME IS NULL
04/12/29 11:21:19ID:???psqlのコンソールから日本語を入力する方法
ってどうすれば調べられるでしょうか?
0100NAME IS NULL
04/12/29 11:28:54ID:???言ってる意味が良くわからんのだが。日本語って普通に入力できないか?
ってか、情報少なすぎ。
Postgresが動いているマシンの OS、文字コード設定
psqlを動かしている画面(端末エミュレータ?)が動いている OS、端末ソフト、文字コード設定
最低限このぐらいを晒さないと答え様がない罠。
0101NAME IS NULL
04/12/29 11:57:58ID:???DB名や項目名に日本語を使うのはアマチュアがよく犯す間違い
0102NAME IS NULL
04/12/29 12:13:30ID:???端末エミュレータは起動してません。
Wnnは起動してます。kinput2もインストール済みです。
つか、日本語入力の仕組みがイマイチわからないんですが。
JSERVERはWnnをローカルホストで起動させ、
kinput2をFEPに設定することはできてると思うのですが。
また、項目やDB名に日本語は使いません。
SQLファイルを作成してpsqlに流し込む方法もあるのかもしれませんが、
日本語が使えるエディタが起動できていないので、
どうしようかと思案中です。
あと、DBの基礎知識は少しはあります。運用経験はありません。
どうか、良きアドバイスをお願い致します。
0103NAME IS NULL
04/12/29 12:18:35ID:???アプリケーションの裏において使うものなので、
アプリを作るところからはじめてくれ。
010499、102
04/12/29 12:30:15ID:???Windowsで使うものでは?
今Windowsマシンとネットワーク繋がっていないんです。
0105NAME IS NULL
04/12/29 12:51:04ID:3gim2RWeX使ってないならkonしてるか?
[shift]+[space]で漢字入力にならないか?
0106NAME IS NULL
04/12/29 12:59:30ID:???そもそもpsqlじゃないときは
日本語使えてるの?
使えてないなら板違い
010799、102
04/12/29 13:44:45ID:???konって表示専用じゃないんですか?
前に起動させたことはありましたけど、
シフト、スペースで何も起こりませんでした。
とそれよりpostmasterが起動できなくなってしまいました。
いろいろ環境変数を追加したりしてるのが原因でしょうか?
一度再起動してみます。
psqlの時も日本語つかえてません。
emacsとかどうやって起動させるんでしょう?
UNIX板で聞けばいいですか?
0108NAME IS NULL
04/12/29 13:47:56ID:???その状態でここで質問するってことがすごいね。
悪いことは言わない。
あきらめろ
0109105
04/12/29 13:57:32ID:???少し落ち着け。
>konって表示専用じゃないんですか?
漢字が正しく入力されているか、表示されなくても分かるのか?
ってかさ、Xは起動してるの?
それともフルスクリーンでテキストコンソールになってるの?
そこが分からんと、説明のしようが無い。
#kinput2とか言ってる所をみると、X使ってるっぽいけど、
#「端末エミュレータは起動してません」ってじゃあ、藻前がpsqlを使ってる画面はどこに出てるのかと小一時(ry
#Xでデフォルトのxtermで作業してる気がしてならないのだが・・・。
0110NAME IS NULL
04/12/29 14:02:43ID:???とても面白いことが起きるよ
011199、102
04/12/29 14:08:59ID:???どうもレスありがとうございます。
UNIX使いの人にも親切な方っていらっしゃるんですね。
konを起動させたときは、色々キーを叩いてみましたが、
アルファベットしか入力できなかったです。
Xが起動してるとは・・・psコマンドで見る限り、
cshしかアクティブになってませんが。
ログインスクリプトとか全然書いてないので。
フルスクリーンでテキストコンソールにはなってます。
Xでデフォルトのxtermとは一体?たぶんそうだと思うのですが、
どのようなサイトを見たら意味がよくわかるでしょうか?
>#kinput2とか言ってる所をみると、X使ってるっぽいけど、
>#「端末エミュレータは起動してません」ってじゃあ、
>#藻前がpsqlを使ってる画面はどこに出てるのかと小一時(ry
>#Xでデフォルトのxtermで作業してる気がしてならないのだが・・・。
そう言われてみると端末エミュレータは起動してますね?
しかし、postmasterが起動しなくなったのは一体???
0112NAME IS NULL
04/12/29 14:13:00ID:???強制終了かなにかでdata/postmaster.pid のファイルが残ったまま落ちちゃったんじゃないか?
あったら消せ。
0113105
04/12/29 14:21:51ID:???その様子だとXは起動してないな。
とりあえず、FreeBSDの日本語周りのFAQな。
http://www.jp.freebsd.org/QandA/HTML-QA/japanese-qa.html
ここ見て分からなかったら、
初心者もOK! FreeBSD質問スレッド その56
http://pc5.2ch.net/test/read.cgi/unix/1103066264/l50
この辺にでも行って「コンソールでの日本語入力の起動方法」を聞いてみそ。
psqlも普通のコンソールアプリだから、漢字入力が出来るマシンからTELNET(SSH?)して
漢字入力しても同じはずだけどな。
0114NAME IS NULL
04/12/29 14:24:18ID:???なにも起こらないけど?
どうなるの?
011599、102
04/12/29 14:47:10ID:???/usr/local/pgsql/dataをみましたが、そのようなファイルはありませんでした。
どうなってるんだか。
0116NAME IS NULL
04/12/29 21:13:30ID:???0117NAME IS NULL
04/12/29 23:07:09ID:???起こらないはずないよ
まぁやってみれば分かります
0118NAME IS NULL
05/01/11 16:20:11ID:mtFH19Sy開発が続いてるクライアントアプリってないですかね?
今はCSEをだましだまし使ってる
0119NAME IS NULL
05/01/12 15:03:33ID:/0becKYD僕のような入門者には、Webminはありがたいのです。
SQL select tablename from pg_tables where tablename not like 'pg_%' and tablename not like 'sql_%' \
order by tablename failed : ERROR: relation "pg_tables" does not exist
このようなエラーを返してくれます。
状況としては、最初にソースからインストールしたのですが、うまくいかずapt-get からRPMでの
インストールを行いました。OSはFC3、Pgのバージョンは7.4.6です。
どちらさまかお助けいただけないでしょうか。
0120NAME IS NULL
05/01/12 15:16:28ID:???0121119 initdb
05/01/12 16:43:03ID:/0becKYD神!てゆうか未熟すぎてすみませんでした。
朝起きたら120様のほうに向かいおまいりします。
0122120
05/01/12 16:51:46ID:???0123NAME IS NULL
05/01/12 22:13:52ID:???どうすれば解決するでしょうか?
0124NAME IS NULL
05/01/12 22:43:17ID:???0125NAME IS NULL
05/01/17 11:59:04ID:???例えば PHP などで大量に update した後にプログラム内で pg_query($db, "vacuum") を
している方はいらっしゃいませんか。
0126NAME IS NULL
05/01/17 13:25:12ID:???0127NAME IS NULL
05/01/17 14:58:39ID:???phpでアップデート後というとまあ普通は時間が特定出来ず、高負荷時に
VACUUMをかける可能性もあるのでお勧めできない。
その大量アップデートの後はsystemが比較的idleなことが確実で、どうしても
やりたいんだというなら止めないが。
更新直後のVACUUMの必要性はその大量更新によって参照パフォーマンスに
どれくらい影響があるかによる。たとえば数百万単位のレコードの
index対象項目を殆ど更新してしまうような更新処理でもしない限り、
そこまですることはないと思う。
0128125
05/01/18 10:18:51ID:???ありがとうございました。
一番いいのは DB のパフォーマンスが下がり、
かつ idle なら vacuum 自動実行なのですが。
0129NAME IS NULL
05/01/18 10:59:11ID:???SELECT count (*)を使わないで、
システムカタログ等からテーブルのレコード件数を把握したいのですが、
どこを見れば宜しいでしょうか。
0130NAME IS NULL
05/01/18 11:25:39ID:2UkA0amNパフォーマンスが下がるって意味わかる?
なんか、パフォーマンスっていいたいだけかと。
4時ごろやっときゃ問題なかろ。
0131NAME IS NULL
05/01/18 12:45:46ID:???まずはしょーもないこと考える自分の頭の中を
0132125
05/01/18 12:51:50ID:???現在は 30 分おきに cron しているのですが、
それでは足りないときがあるんです。
かといって 10 分おきだとご指摘の通り
過負荷時に vacuum 走ることになりますよね。
ですから `w` で rup を取得し、idle がある閾値以下なら
pg_query() で vacuum させようかとも思い始めました。
0133NAME IS NULL
05/01/18 13:13:59ID:22aeSu5qおまえのところは10分おきに百万レコード単位でインデックスの変更
が行われるのか?ただVACUUMいいただけちゃうんかと。
0134NAME IS NULL
05/01/18 13:19:00ID:???>それでは足りないときがあるんです。
30分置きにVACUUMしても足りないというのは特殊な状態だから、
多少はどういったシステムなのか、レコード数の規模なんかも
出さないと答えようがないと思うぞ。
>かといって 10 分おきだとご指摘の通り
>過負荷時に vacuum 走ることになりますよね。
10分置きVACUUMを考慮するということは更新が10分以内には終わる、
ということでそれは「大量」とは思えないんだよね。
だもんで、もうちょい詳しく情報出してくれんと。
0135132
05/01/18 15:34:42ID:???100 件しかない商品テーブルだと思ってください。
その 100 件の(例えば)在庫数カラムの在庫数を書き換えるために
毎回 100 回の update が一気に走ります。普通は数秒で終わります。
この作業が昼間であれば 1 分間に 1 〜 10 回くらい発生します。
ピーク時にそんな状態が数分続くと update が異常に遅くなるんです。
数秒のものが十数秒、数十秒になり、load avarage も上がっていきます。
vacuum するとまた数秒程度に戻ります。
この update 作業中にもいろいろな SQL が走りますが、
その商品テーブルを select するだけでその他に update/insert はありません。
PostgreSQL 7.2.6 / P3-930M / 256M / RH7.3 という環境です。
0136NAME IS NULL
05/01/18 16:24:49ID:???実装が既に腐ってるんだが。
ものすごい勢いで不使用領域を作るからVACUUMも大事だけど、
レコードはたかが3桁のオーダーだしなあ。
トランザクションの書き戻し待ちさせられててスピードが
落ちてるだけのような希ガス。
まあ、実装を考え直したほうがいいが、動いているものの改修だと
そうもいかないだろうし、辛いやね。
0137NAME IS NULL
05/01/18 19:08:20ID:22aeSu5q0139NAME IS NULL
05/01/18 21:36:41ID:???a 〜 z にそれぞれ 1 〜 26 の数字を振り、
z の 26 を 1 にした場合、
a は 1 → 2, b は 2 → 3, ... y は 24 → 25 とずらす場合に
26 回 update が走るのですが、これのうまい実装はあるでしょうか?
0140NAME IS NULL
05/01/18 21:42:52ID:???>これのうまい実装はあるでしょうか?
そもそもその「これ」とやらが間違ってると思われ。
0141NAME IS NULL
05/01/18 22:02:24ID:???では、「これ以外」の実装とは?
0142NAME IS NULL
05/01/18 22:07:13ID:???0143NAME IS NULL
05/01/18 22:34:59ID:???意図がつかみかねるけど、a 〜 z (1から26)の値が入っている
項目を X としたときに、(X + 1) % 26 をやりたいと言ってるだけじゃないか?
0144NAME IS NULL
05/01/18 23:41:04ID:???というようなの組み合わせで販売するとする。
セットのねじ−個数はなんらかのマスタに持つとする。
で、Aセットが購入されたら、20種類のねじ在庫からおのおの個別個数の
在庫を引かなければならない。もちろんねじだから、1本からも販売はある。
で、最多注文時間帯は1分間に10受注ぐらいする場合がある。
このWebシステムのうまい実装を考えよ。
‥か。こりゃ結構骨の折れる演習問題だな。
0145NAME IS NULL
05/01/19 00:15:59ID:???つうか、1分に10受注って、ピーク時にもそんなに負荷はかからない、ということがいいたいのかな?
0146NAME IS NULL
05/01/19 00:29:53ID:???バキュームなんて日に1回程度だろ。
なんか違うところがおかしいはず。
0147NAME IS NULL
05/01/19 01:00:26ID:???PostgreSQLスレじゃなく、データモデリングに関するスレで聞いたほうがいいよ
0148NAME IS NULL
05/01/19 04:29:43ID:???どうやってa 〜 z に1 〜 26 を割り当てているのかによる。
alpha text,no int2
というテーブルhogeが合ってalphaにa 〜 z、numberに1 〜 26を入れると仮定した場合
Xだけずらすには
update hoge set no = ((no - 1 + X) % 26) + 1
テーブルの仕様が分からないと、正確な事は言えんから、残念。
0149141
05/01/19 10:17:38ID:???例が悪かったです。すまん。ローテートではなく、
a,b,c,d
の c を 1 個上にソート
a,c,b,d
そして、b を 2 個上にソート
b,a,c,d
のようなことです。
これを実現するためにテーブルはおっしゃる通り
alphabet text, no int
で、 order by no したい、ということです。
c を 1 個ソートは b と c の 2 回の update で済むが、
b を 2 個ソートだと 3 回 update、
これが z を a だと 26 回 update ですよね。
これを 148 のようにクールに書く方法はないかな、と。
0150NAME IS NULL
05/01/19 10:41:50ID:???スレ違いすみませんが
これの実装方法気になる。
この話題、別のとこで再開してるのなら誘導お願いしますー
0151132
05/01/19 11:42:51ID:???0152NAME IS NULL
05/01/19 11:52:08ID:???移動位置にあるアルファベットの数字を移動するアルファベットに割り当て
それ以降(ソートによっては以前)〜移動するアルファベットの間にある数値を
+1すればよいんじゃないか?一回じゃ無理だけど。2,3回か。
でも何を使ってPostgreSQLを操作しているか知らないけどスクリプト等で
文字列で、検索、切り取り、挿入をしたほうが簡単じゃないか?
0153NAME IS NULL
05/01/19 11:57:03ID:???ECサイトなら分100アクセスはあっても
同一商店(この場合テーブルを指す)から1分当たり
100商品1000在庫が変動するなんてことはないでしょ。
0154NAME IS NULL
05/01/19 12:00:27ID:???つうか
alphabet text, no int, prev int, next int
として前後のnoを格納しておけばあらゆる異動は2UPDATEで済む。
0155NAME IS NULL
05/01/19 12:04:36ID:???いつどれが何個売れたとか何個入庫したとかという情報も必要かな。
だから、入出庫履歴テーブルを用意してそこに記録する。
現在の在庫量を算出するには、
SELECT * FROM ネジマスター LEFT JOIN (SELECT ねじコード,sum(入出庫量) FROM 入出庫履歴 GROUP BY ねじコード)AS foo USING(ねじコード);
見たいな?
このままほっとくと、入出庫履歴テーブルが結構な行数になっちゃうので、
INSERTはいいけど、在庫量を調べる上のクエリに時間が掛かる。
そこで、定期的に(1日おきか1時間おきかは置いといて)現在庫量をそっくりそのまま在庫テーブルに
移して、出庫履歴テーブル(記録用テーブルに移すしてから?)を空にする。
後は、在庫テーブル UNION 入出庫履歴テーブルで現在庫量を求める。
MVCCのおかげでテーブルロックすることもないから、業務中でも在庫テーブル更新は行える。
で、どんなもんだろうか?
入出庫履歴にどのぐらい溜まれば、在庫量を算出するクエリが実用上問題になる時間が掛かるのかは
試してみないとわからないけど、100x60分x業務時間で5万-10万行/日ぐらいなら、何とかなりそう。
出庫(販売)前に現在庫量を調べてからって形になってたら厳しいか。
0156NAME IS NULL
05/01/19 12:22:33ID:???abc(中略)xyz の y を a の次、つまり
aybc(中略)xz の場合など、移動量によって
update が比例して増えますよね。
この問は、例えば Web 画面で
<select name="item_code" size="10">
<option>item1
(略)
<option>item100
</select>
とした場合に、itemN を↑↓ボタンで並べ替えるプログラムなどの問題です。
>>154
リスト構造をすれば確かに update は 2 回ですが、
SQL で並べ替える場合 ( order by ) が難しくありませんか。
0157NAME IS NULL
05/01/19 13:10:08ID:???正直、RDBでそのアクセス量は捌けないと思う。
RDBはバッチ処理系だもんで、そもそもそう使い方するもんじゃないし。
(全テーブルをオン・メモリにするとかの反則はなしでね。)
1つのASCIIフラットファイルにフォーマットを決めて全在庫を書き、
phpなりのロジックで在庫確認/増減させて書き戻す。
まあ、1行1商品の在庫数としておけばいいだろう。何行目がどの商品か
だけ厳密に決定しておけば良い。
商品が4桁程度のオーダー(1万商品程度、課題のねじなら1万種類)なら
1秒もかかるまい。
>>155氏の意見ももっともなので、受注の週間に先ず入庫/出庫データを
一定のフォーマットで残すようにしよう。1注文で1ファイル。
これも1行1商品の増減数としておけば良いだろう。これは作っていくだけだから
壊れない。万一在庫ファイルが壊れた場合は、RDBから在庫ファイルを再生成し
入出庫ファイルを順次適用すれば、現在在庫は復元出来る。
で、夜間バッチでRDBへ適用。入庫/出庫ファイルを消去し在庫ファイルと
RDBの在庫一致を確認。
在庫管理それ自身はRDBが向いていると思うので、適材適所ということで。
0158NAME IS NULL
05/01/19 13:41:16ID:???全然捌けるわけだが…
0159NAME IS NULL
05/01/19 13:44:03ID:???当然中の人はRDBだろう。
Postgresと関係なくなってきてるのでこの話はここでやめで。
0160NAME IS NULL
05/01/19 13:44:50ID:4WtFCBLGどんな貧弱なRDB使ってるんだ?
0161NAME IS NULL
05/01/19 13:47:54ID:???PCサーバにOracle入れたって、普通に同時1000とかで動かせるしな
0162155
05/01/19 14:23:02ID:???【より良い】データモデリング【モデルを】
http://pc5.2ch.net/test/read.cgi/db/1057509675/
普段ヲチすらしてないけど、最後の方は在庫推移のモデルって話になっているようだ。
ただ、更新の激しいテーブルは処理時間が増えてしまうというのは、
PostgreSQL特有(MVCCの実装方法による)の問題なんですよね。
UPDATEは旧データの無効化と新データの挿入になっていて、
命題の件だと1分で10倍、1時間で600倍に膨れてしまうから、
インデックスなんて全然効かない。てか、インデックス張らない方が
速いだろう。(更新も抽出も共に)
0163NAME IS NULL
05/01/19 14:25:28ID:???PostgreSQLじゃないの?
0164NAME IS NULL
05/01/19 14:48:34ID:v3nirws7>abc(中略)xyz の y を a の次、つまり
>aybc(中略)xz の場合など、移動量によって
>update が比例して増えますよね。
移動量がいくつだろうが条件文を書けば2回のupdate分で済むと思うのだが。
もちっと頭使え。
0165NAME IS NULL
05/01/19 15:01:57ID:Ua1Qg+Kchttp://www.postgresql.org/
> PostgreSQL 8.0 Out Now
こちらは日本語記事.まだトップには出てませんけど,
センター試験にならって,2ch にリークしてみました.
http://www.postgresql.jp/ug/press-release/2005-01.html
0166NAME IS NULL
05/01/19 15:06:14ID:g1/lbauT0167NAME IS NULL
05/01/19 15:08:23ID:???ごめん。何度読んでも素で分からないです。教えてくれますか。
0168NAME IS NULL
05/01/19 15:36:58ID:???移動するアルファベットをX,数字をM
移動先のアルファベットの数字をNとおく
update hoge set no = N where alpha='X';
update hoge set no = no + 1 where N <= no and no < M and alpha != 'X';
0169NAME IS NULL
05/01/19 15:41:25ID:???ああ、UPDATE"文"が2つってことか。
0170NAME IS NULL
05/01/19 16:31:23ID:???スマン変換ミスだ。
0171NAME IS NULL
05/01/19 17:23:53ID:???vacuumする頻度が少なくて済むようにupdate対象を少なくしたいってことか。
こっちが良く理解してなかった。148のように、ってあるからsql文を少なく
したいと勘違いしてた。スマン。
そういう条件だと、データを文字データとして一箇所に入れて、スクリプト側で
文字列操作する方法ぐらいしか思いつかない。selectの手間を考えなければ154の
リスト構造化か・・・。
0173NAME IS NULL
05/01/19 19:54:45ID:???update hoge set no = 2 where no = 1;
update hoge set no = 3 where no = 2;
(中略)
update hoge set no = 100 where no = 99;
update hoge set no = 101 where no = 100;
より
update hoge set no = no + 1;
の方が速いですか?それとも同じ?
0174NAME IS NULL
05/01/19 21:15:39ID:???試せぼけ! って言われるよ
後者の方が早い。
関係ないけど、その例でnoがunique keyだった場合に、
結果的にはOKなはずだけど、update(後者でも)ではエラーになっちゃうんだよなあ。
これって仕方ないことなのかね。
(今手元に他DBがないからこれが当然の動作かどうかはよくわからん。)
だから今は100足してから99引くとかいんちきくさい処理をしている。
誰か俺が間違っていると指摘してくれ。
0175NAME IS NULL
05/01/19 22:57:52ID:???制約の遅延が出来るのは、今のところ外部キーのみだから、仕方ないことなのかも。
8.0の正式版では試してないけど、beta2の時点ではダメだった。
0176NAME IS NULL
05/01/20 01:07:39ID:???指摘したいのは山々だが・・・
俺も同じようなことでしのいだ覚えがある。
0177NAME IS NULL
05/01/20 09:23:39ID:???普通に考えたら実装に問題ありって思ってしまうけど
具体的にはどんな項目なの?
0178NAME IS NULL
05/01/20 10:11:31ID:???表示順序(ORDER BY)を決めるカラムとか。
新規挿入するデータを中間にもってきたい場合、
その番号以降を+1したいなど。
0179NAME IS NULL
05/01/20 16:04:30ID:???リストにしとけば、一斉書き換えはしなくて済むね。もちろんリストだと
表示時の負荷が高まるから、ケースバイケースだけど。
0180NAME IS NULL
05/01/20 21:07:26ID:???ごめん。まじでわからん。
リストって何?
0181NAME IS NULL
05/01/20 22:03:14ID:???リスト構造。>>154みたいな奴。
つうかここまでの議論を全然読んでないのかよ・・・
0182NAME IS NULL
05/01/20 23:03:31ID:???ああ、そういうことか。ども。
0183NAME IS NULL
05/01/21 02:01:31ID:???0184NAME IS NULL
05/02/02 12:28:51ID:???PostgreSQL で,「新規行挿入時の日時」「行更新時の日時」を
自動的にカラムに記録するにはどうしたら良いのでしょうか?
今の自分の考えですが,
・新規行挿入時...カラムのデフォルト値を,現在時刻の関数に
する(どの関数にしたらよいかは分からない)
・行更新時...UPDATEに関連付けたトリガを作成する.
あたりでよいのかな?と思うのですが,どうでしょうか?
MySQL だと,timestamp 型のカラムは自動的に更新されて
くれるのですが.
以上です.どなたかよろしくお願いいたします.
0185NAME IS NULL
05/02/02 13:52:49ID:???トリガで挿入・更新とも対応できるはず
0186184
05/02/02 14:51:36ID:xRHYLdFZありがとうございます.更新系は,こんなページを見つけました.
http://ash.or.jp/db/pg_use.htm
挿入系は,テーブル定義のデフォルト値に,何か関数か予約語を
指定することで可能にはならないでしょうか?
『プログラマのためのSQL』で,そのやり方が紹介されていたので,
PostgreSQL でそのようにやってみたいのです.
0187NAME IS NULL
05/02/02 14:59:50ID:???0189NAME IS NULL
05/02/02 22:11:15ID:???(制約に平仮名のみを許す属性を作ろうと思ってましてその前準備)
激しく文字化けします。
postgresの方から
$select version();
PostgreSQL 7.4.3 on i686-pc-linux-gnu, compiled by GCC gcc (GCC) 3.3.4 20040623 (Gentoo Linux 3.3.4-r1, ssp-3.3.2-2, pie-8.7.6)
$ show client_encoding;
UNICODE
$ show server_encoding;
UNICODE
端末(bash)のほうから
$ perl -v
This is perl, v5.8.5 built for i686-linux
$ env |grep LANG
LANG=ja_JP.UTF-8
の状態で
create or replace function testfunc4(text) returns text as '
my ($text) = @_;
$text =~tr/s/b/;
return $text;
end;' language 'plperlu';
でつくったtestfunc4という関数に対して、
select testfunc4('あ')
とやってやると
testfunc4
-----------
(激しく文字化け)
というリターンになります。
正規表現の内容($text =~tr/s/b/のぶぶん)は何をいれても変わりません。
入力がアルファベットのみの時は問題ありません。
また、正規表現の行だけを外したら問題なく動作するのですが、
何を疑ったらいいでしょうか?
0190NAME IS NULL
05/02/02 22:20:17ID:???>何を疑ったらいいでしょうか?
terminalの文字コードだな。
UNICODEで吐き出されて北データをUTF-8で処理しようとして
バケてるんじゃないのかな。
0191NAME IS NULL
05/02/02 22:35:06ID:???正規表現の行を削除した場合正常な値が返って来るのです。
あと、基本的にUNICODE=utf8だったような気がするのですが、、、、、
また、ほかに
create or replace function testfunc5(text) returns text as '
$test = $_[0];
if($test =~/サ/){
return ''success'';
}
else{
return ''not match'';
}
end' language 'plperl';
のばあい、select testfunc5('サイタマサイタマ');
とうてば、successと返って来るはずなのですが、
not matchしか返って来ません。
ほとんど同じ構文の
#!/usr/bin/perl --
$test = $ARGV[0];
if($test =~/サ/){
print 'success';
}
else{
print 'not match';
}
だとうまく行くのですが。
0192NAME IS NULL
05/02/02 22:43:25ID:G6QtGaOI#!/usr/bin/perl
foreach my $code ( 1..65535 ) {
my $char = pack "U", $code;
my $ucs2 = sprintf "%04x", $code;
if ( $char =~ /\p{InHiragana}/ ){
print "$ucs2\t$char\n";
}
}
のばあい、正常に平仮名のリストと文字コードが返って来るのですが、
create or replace function testfunc6() returns text as'
my $result;
foreach my $code ( 1..65535 ) {
my $char = pack "U", $code;
my $ucs2 = sprintf "%04x", $code;
if ( $char =~ /\p{InHiragana}/ ){
$result.= "$ucs2\t$char\n";
}
}
return $result;
end;' language 'plperlu';
の場合、何も返って来ません。
ただし、 if ( $char =~ /\p{InHiragana}/ ){と、それに対応する}
をコメントアウトしたら、文字化けコードも大量に含みますが、
値が返って来ます。
0193NAME IS NULL
05/02/02 23:02:53ID:???UNICODE≠UTF8
0194NAME IS NULL
05/02/03 00:59:55ID:???0195NAME IS NULL
05/02/03 02:00:24ID:us67hi8V0196189
05/02/03 04:50:07ID:???どうもperl5.8のユニコードの扱いの問題のようだった。
http://www.pure.ne.jp/~learner/program/Perl_unicode.html
みたいに、UTFフラグを立てた文字列に対して日本語正規表現を書けてやればうまくいくようだ。
DBのエンコーディングは、、、とりあえず、UTF8文字列とマッチさせなきゃならないので、
もうしわけないがUTFのままです。
EUC-JPでも試してみたんだけども、perlの内部処理はUTF8でやってるようで、
で、関数の作成時にどうしようかなって問題があるんで、、、、。
create or replace function testfunc5(text,text) returns text as '
use encoding ''utf8'';
my $test = $_[0];
my $wide_char = Encode::decode("utf8", $test);
if($wide_char =~/\\p{InHiragana}/){
return ''success''';
}
else{
return ''not match'';
}
end' language 'plperlu';
test2=# select testfunc5('阿あ','');
testfunc5
-----------
not match
(1 row)
test2=# select testfunc5('あ','');
testfunc5
-----------
success
(1 row)
ちなみに置換もだいたいこの応用(正規表現部分の書き換えだけ)で行けました。
0197189
05/02/03 05:10:27ID:???my $test = $_[0];
my $wide_char = Encode::decode("utf8", $test);
if($wide_char =~/^\\p{InHiragana}$/){
return ''success'';
}
else{
return ''not match'';
}
end' language 'plperlu';
間違えた。こちらのすくりぷと。
いろいろ試すためにごちゃごちゃしたのつけてて、整理して貼ってたんで
余計な物まで消してしまっていた、、、、。
0198189
05/02/03 05:25:47ID:???\\p{InHiragana}見たいなメタタイプだと問題が起きなかったのですが、
create or replace function testfunc5(text) returns text as '
use utf8;
use encoding ''utf8'';
my $test = $_[0];
my $wide_char = Encode::decode("utf8", $test);
if($wide_char =~tr/ぁ-ん/ァ-ン){
return $wide_char.''success'';
}
else{
return $wide_char.''not match'';
}
end' language 'plperlu';
のようにじっさいにもじをうちこんでみると、ぁ-んを
クライアント側がEUC-JPでおくってみても、UTF8で送ってみても
ERROR: invalid byte sequence for encoding "EUC_JP": 0x812d
となりました。
use euc-jp
use encoding ''euc-jp'';
をつけたり外したりしてもエラー変わらず。
まあ、とりあえずUNICODEサーバーで日本語正規表現使える事確認できたので。
おいらはこれでおわりにします。。。
0199189
05/02/03 05:36:00ID:???0200NAME IS NULL
05/02/04 18:57:52ID:VjNijk/8round
-------------
0.000000000
(1 row)
bis_test=# select round((5/1),9);
round
-------------
5.000000000
(1 row)
小数点以下になる計算をすると0になってしまいます、、、、
0201NAME IS NULL
05/02/04 19:22:40ID:???どういう結果を求めているのかよくわからんのだけど
test=> SELECT ROUND(1343::FLOAT/5501::FLOAT);
round
-------
0
(1 row)
test=> SELECT ROUND(6343::FLOAT/5501::FLOAT);
round
-------
1
(1 row)
test=> SELECT ROUND((1343::NUMERIC/5501::NUMERIC), 9);
round
-------------
0.244137430
(1 row)
test=> SELECT ROUND((6343::NUMERIC/5501::NUMERIC), 9);
round
-------------
1.153063079
(1 row)
0202NAME IS NULL
05/02/05 23:39:11ID:???round
-------------
0.244137430
0203NAME IS NULL
05/02/07 16:00:37ID:???INDEXとして貼りまくってるのですが、皆さんはどのような基準で貼られているか
教えていただけますでしょうか。あまり値の変化がないものに貼っても意味がないとか
いろいろ聞くのですが、いまいちピンとこないのです。
0204NAME IS NULL
05/02/07 21:01:30ID:???速くならないものに張ってもDML文が遅くなるだけなので張らない。
0205NAME IS NULL
05/02/07 22:18:57ID:???その基準だと、ある程度の規模になると破綻しそうだな
0206NAME IS NULL
05/02/07 22:29:59ID:???詳しく
0207NAME IS NULL
05/02/07 22:39:49ID:???テーブルもしくはシステム全体の設計時点で決まるってことじゃないの。
そのまま貼っても速くならないなら貼らなくていい、で済むのならいいけど、
普通速くなるような設計にするわな。
0209NAME IS NULL
05/02/07 23:34:26ID:???お前みたいな先輩(上司)がだめな奴(とその結果のだめなコード)を
大量生産してるんだろうなあ。
0210NAME IS NULL
05/02/07 23:45:53ID:O1kAgblRxreaにおこられちゃった▼・ェ・▼ワン♪
0211NAME IS NULL
05/02/08 01:02:11ID:/tyDpKiSそのoidを知っていればデータを見ることは出来ますか?
0212203
05/02/08 16:18:07ID:???商品マスタなら商品コードにPrimaryKeyを持たせたり、そういう主な部分は分かるのですが
その他の例えば、検索フォームからキーになるようなものも全部つけたほうがいいのか等、
基準がまだよく見えてないのです。explainを使ってINDEXが使われたかどうかのチェック等をして
INDEXの設計をやっていくのでしょうか?
0213NAME IS NULL
05/02/10 11:26:53ID:???データテーブルTable1とマスタテーブルTable2があったとして
Table1に商品Aと商品Bの商品コードが格納されていて、
マスタテーブルTable2から商品名を取得しようと思うのですが、
どのようなjoin文にすればよいのでしょうか?
select * from table1
inner join table2 on (table1.商品A = table2.商品コード)
inner join table2 on (table1.商品B = table2.商品コード)
だとエラーが出てしまいます・・・・。
0214NAME IS NULL
05/02/10 11:52:54ID:???0215NAME IS NULL
05/02/10 13:59:02ID:Qz7FoCOWCSE で PostgreSQL に接続すると,システムテーブルらしきものまで
全部表示されてしまいます.
どうしたらユーザの作成したテーブルだけを表示するようにできるでしょうか?
0216NAME IS NULL
05/02/10 14:48:45ID:???0217NAME IS NULL
05/02/10 15:30:07ID:???ありがとうございます.
CSE の設定の「PostgreSQL」に,「システムオブジェクトを表示する」という
項目がありました.
そのチェックをはずすことで,うまく行きました.ありがとうございました.
0218NAME IS NULL
05/02/10 16:26:32ID:???そんなごくあたりまえの結果報告が出来る質問者も最近見掛けなくなったな。
0219NAME IS NULL
05/02/10 20:15:43ID:???ゆとり教育
0220NAME IS NULL
05/02/10 21:39:35ID:???select table1.必要なカラム,table2.必要なカラム from table1,table2
where table1.商品A = table2.商品コード or table1.商品B = table2.商品コード
0221NAME IS NULL
05/02/11 16:25:48ID:+y2Elq3k0222NAME IS NULL
05/02/11 17:20:27ID:???0223NAME IS NULL
05/02/12 12:42:36ID:???検討しているのですが、DWH的な使い方は問題ありませんでしょうか。
OPEN OLAPとかすでに出ていますが、PostgreSQLにオラクルの
ビットマップインデックス等DWH向きの機能が無いように見えるので
気になります。
DWH的な使い方で使用感、アドバイス等お願いします。
0224NAME IS NULL
05/02/12 13:15:50ID:???ビットマップインデックスやOracleTextとか
使いこなしてる人だと正直移行しないほうがいいと思う
規模を考えて何度もレスポンスやスループットを計算、テストしてみて
実用になるかどうか判断して投入するのがオープンソースのDBだと思ってくれ
ただだからと飛びつくのは止めれ
でもマシンパワーの向上とPostgresの高機能高速化で新規案件は
Postgresを採用しているケースは多い
0225NAME IS NULL
05/02/12 15:02:50ID:???アドバイスありがとうございます。
>規模を考えて何度もレスポンスやスループットを計算、テストしてみて
>実用になるかどうか判断して投入するのがオープンソースのDBだと思ってくれ
それはそうですね。
OLTP系であればテストして判断します。
実際小規模ではMySQLもPostgreSQLも利用しています。
今回お聞きしたのは調べた限りではDWH系の機能がなさそうに見えたんですが、
BI系ツールも出てきたので、実際DWH系で利用されている方の意見を聞きたかった
ためです。
DWH系の機能がないのであれば、調査するまでもなくDWH系での利用は
時期早々ということになるかと思います。
0226NAME IS NULL
05/02/12 16:01:03ID:???そういえば、実務で使ってる人っている?
0227NAME IS NULL
05/02/12 17:19:03ID:???0228NAME IS NULL
05/02/12 17:26:03ID:???0229NAME IS NULL
05/02/12 18:03:08ID:???0230NAME IS NULL
05/02/12 21:24:31ID:???0231NAME IS NULL
05/02/13 00:36:58ID:???0232NAME IS NULL
05/02/13 01:52:07ID:???0233NAME IS NULL
05/02/13 02:30:09ID:AE3EcMav--
DROP INDEX hoge_pkey;
ALTER TABLE hoge ADD PRIMARY KEY (id);
--
とやっているのですがALTER TABLEの際のインデックス作成中にpsでプロセスを確認すると関係ないテーブルのUPDATEがすべてWAITING状態なんです。
ALTER TABLEって全テーブルをロックする仕様なのでしょうか?
ちなみにアプリケーション内では明示的にLOCK TABLEはやってないです。
0234NAME IS NULL
05/02/19 09:36:32ID:???SSH経由でpgAdminIIIからリモートのDBサーバ(PostgreSQL 8.x)に
接続することは可能でしょうか?
pgAdminIIIの検証を行っているのですが、
pgAdminIIIがインストールされている端末上にある
ローカルのpostgreSQL8については接続できることを確認しています。
ご存知のかたがいれば、情報よろしくお願いします
0235NAME IS NULL
05/02/19 18:24:16ID:???7だけど。
0236NAME IS NULL
05/03/02 22:55:53ID:IksncMCEPL/pgSQL で,group by で使われる集約関数を書くことはできるのでしょうか?
具体的には,複数レコードの文字列カラムを,カンマ区切りで結合した値に
まとめることのできる関数を作りたいと思っています.
0237236
05/03/02 22:59:08ID:IksncMCE1 'aaa'
1 'bbb'
1 'ccc'
2 'ddd'
2 'eee'
これを
1 'aaa, bbb, ccc'
2 'ddd, eee'
という集約ができるような関数を作りたいのです.
どうかよろしくお願いします.
0238NAME IS NULL
05/03/03 00:08:08ID:???でぐぐると幸せになれるよ。
0239237
05/03/03 10:56:30ID:???素晴らしい!幸せになれました.ありがとうございます!!
http://216.239.63.104/search?q=cache:Ia4HDMAtjCUJ:cgi.www5b.biglobe.ne.jp/
http://www.postgresql.jp/document/pg732doc/reference/sql-createaggregate.html
AGGREGATE というのがあったのですね.
不慣れなもので,見つけられませんでした.すみません.
0240237
05/03/03 10:58:16ID:???まあ,先のリンク先とほとんど同じなのですが.
-- カンマ区切りで CHAR 同士を連結するストアドファンクション
CREATE OR REPLACE FUNCTION concat_comma(CHAR, CHAR) RETURNS CHAR AS '
BEGIN
IF $1 IS NULL THEN
RETURN $2;
ELSIF $2 IS NULL THEN
RETURN $1;
ELSE
RETURN $1 || '', '' || $2;
END IF;
END;
' LANGUAGE 'plpgsql';
-- カンマ区切りで CHAR の値を連結する集約関数
-- 従来の SUM などと同様に使う.
CREATE AGGREGATE CHAR_COMMA_SUM (basetype = CHAR, sfunc = CONCAT_COMMA, stype = CHAR);
0241NAME IS NULL
05/03/03 21:13:06ID:???おめ。ちなみに漏れはこうやってる。
CREATE AGGREGATE array_accum (
sfunc = array_append,
basetype = anyelement,
stype = anyarray,
initcond = '{}'
);
これは http://www.postgresql.jp/document/pg801doc/html/xaggr.html に乗ってるのと全く同じで、
array_to_string()を使ってデリミタを自由に変えられるようにしてる。
SELECT a, array_to_string(array_accum(b), ', ') FROM test GROUP BY a;
0242237
05/03/04 12:30:30ID:???なるほど,配列を要素に持つ PostgreSQL ならではですね.手続き型言語によくある
配列の join 関数と同じですね.ありがとうございます.
私は PostgreSQL の配列は,第一正規化に反するので好きではなかったのですが,
この使い方は面白いですね.まあ,カンマ区切りで結合するのも正規化に反するの
ですが.
0243NAME IS NULL
05/03/06 22:53:34ID:???0244NAME IS NULL
05/03/07 00:20:46ID:???0245NAME IS NULL
05/03/07 00:24:51ID:???0246NAME IS NULL
05/03/07 16:42:57ID:???テーブルの継承と外部キー制約についての質問です。内容はこれと同一なのですが、返信がもらえていないようです。
http://ml.postgresql.jp/pipermail/pgsql-jp/2004-February/015849.html
要約すると、ある基底テーブルがあって、別テーブルでそのキーを外部キーとして参照しています。
基底テーブルを継承して作った派生テーブルがあって、それに行を挿入します。
外部キー参照しているテーブルに、派生テーブルに挿入した値を挿入すると、外部キー制約違反になってしまいます。
派生テーブルには制約が継承されないのか?
自分も同じことで悩んでいて困っているので、この回答が大変気になります。
0247NAME IS NULL
05/03/07 18:09:30ID:???サービスプログラム作る必要があるかと思ったけど、そっちの方が楽だね。
後は環境変数PGUSER,PGPASSWORDに・・・(以下略)。
0248NAME IS NULL
05/03/07 21:55:02ID:???継承されません。
ユニーク制約も継承されないので、
基底テーブルのカラムにユニーク制約をつけても
派生テーブルから同値を挿入することが可能だったりする。
0249246
05/03/07 22:03:01ID:???やはりそうなんですか・・・
そうなると、基底テーブルを使うことによるメリットって薄そうですね。
こういった制約などが継承されるのであれば、いろんなメリットを見出せるんですけどね。
0250NAME IS NULL
05/03/07 22:34:56ID:???マニュアルには将来改善される感じに書いてあるが、
継承が有用か十分注意せよとも書いてあるなw
0251NAME IS NULL
05/03/12 14:56:30ID:EU6oYWx7開発環境としては PHP を使っています。
実はとある情報の検索画面を作っているのですが、検索結果は1画面に20件程度表示して、ページ送りが
できるようにしようと思っています。
このために LIMIT と OFFSET を使おうと思っています。
そして、検索結果として、ヒット総数も表示したいのです。
COUNT を求める SELECT とレコードを得る SELECT を別々に発行する方法以外に、なにか便利な方法は
ありませんか?
実はまだ試してはいませんが、自分で考えた方法もありまして、LIMIT を使わずに SELECT を発行して、
Pg_Num_Rows でレコード総数を取得して、Pg_Fetch_Array で取得行番号を指定して表示対象レコードを
切り出す、なんてやり方なのですが、パフォーマンス的にはどうでしょう?
0252NAME IS NULL
05/03/12 22:02:36ID:???まず、ページ送りをするまでの間に新たなレコードが
挿入された場合どうするのか、というところが重要かな。
前者の方法だと、count()を毎回やるのか、とか。
0253NAME IS NULL
05/03/13 00:03:15ID:???>ページ送りをするまでの間に新たなレコードが
>挿入された場合どうするのか
トランザクション内で処理すれば問題ないでしょ。
0254251
05/03/13 01:47:52ID:???ページ送りしてる間にヒット数が変わったら、表示もそれに追従する必要があります。
ですので、毎回 COUNT() を求めます。
>>253
ウェブアプリなので、一ページ切り出すごとにトランザクションは終了します。
google でページを送るような感じです。
ようするに、SQL だけで解決しようとすると、次のように
SELECT COUNT(*) FROM xxx WHERE xxxx・・・;
SELECT * FROM xxx WHERE xxxx・・・ ORDER BY xxx OFFSET xx LIMIT xx;
みたいに、COUNT取得用とレコード取得用のSQLを別々に発行することになるのかと思います。
ただ今回は、この方法にはちょっと抵抗があります。
というのは、複雑なクエリなので、1ページ切り出すごとに重い検索を 2回もやりたくないからです。
かといって
SELECT * FROM xxx WHERE xxxx・・・ ORDER BY xxx
みたいに、LIMIT しない全件取得の SQL を発行して、アプリ側で pg_fetch_array により対象範囲を
切り出す方法だと、カウントとレコードを同時に取得できるものの、無駄なレコードの転送が発生しないか
どうかが気になるのです。
ということで悩み中なのですが、アドバイスよろしくお願いします。
0255NAME IS NULL
05/03/13 12:26:59ID:???>みたいに、LIMIT しない全件取得の SQL を発行して、アプリ側で pg_fetch_array により対象範囲を
>切り出す方法だと、カウントとレコードを同時に取得できるものの、無駄なレコードの転送が発生しないか
>どうかが気になるのです。
無駄なfetchは発生するだろう。で、通常ヒット数は何件くらいなの?
元のqueryの「重さ」にもよるが、それなりの時間がかかるなら全件fetchした方が
速いような気はするが。つうか試せ。
0256251=254
05/03/14 12:20:16ID:A/eX/gkS総レコード数は 1万件前後だと思いますが、ヒット件数は最大全部、通常は数百件前後になるのではないかと思います。
子テーブルに階層構造があってテストデータを作るのが一苦労でして、あまり規模の大きなテストデータを用意しづらい
ことから、実際に両方式を試して比較しても、いまいちハッキリしないという状況です。
でも、SQL は 1回だけ発行する方式を採用してみました。
ありがとうございます。
0257GrassWonder
05/03/14 13:09:49ID:PmfSDFy+付けることってできるんですかねぇ??
知ってる人居たら、教えてください!
0258NAME IS NULL
05/03/14 13:18:09ID:???(重い)queryの2回(以上)発行を回避する方法を
皆さんどうやっているのか俺も知りたいところ。
ちなみに俺は、CREATE TABLE TEMPORARY TABLE AS SELECT...
でテンポラリテーブルを作ってから合計値と必要部分の1ページ分を
抜き出すようにしている。
0259NAME IS NULL
05/03/14 13:25:19ID:???テンポラリシーケンスを作って、
SELECT nextval('temp_seq'),* FROM Table;
0260NAME IS NULL
05/03/14 16:35:20ID:???テンポラリテーブルはオンメモリで処理されたりするんでしょうか?
0261NAME IS NULL
05/03/14 18:02:12ID:???試してみれ
0262258
05/03/14 18:54:52ID:???だよ。何書いてたんだ俺...
>>260
メモリは有限なんで必ずオンメモリで処理されるとは限らんわな。
俺の場合50万件ぐらいから数100件を抜き出した感じだったんだけど
どのくらい速度差がでたかは忘れたが、遅くなるってことはなかった。
てか、総件数や合計値を知りたいだけじゃなくて、並べ替えとか
グループ分けをするなど、いろいろと表示方法を変えるとき
いったんテンポラリに落とした方がプログラミングしやすかったんだよぉ。
先のレスに書いたけど、効率のいい方法があるなら俺も知りたい。
0263NAME IS NULL
05/03/15 04:57:14ID:LMNlBsryID1 ID2
1 1
1 2
1 3
1 4
2 1
2 3
2 5
2 7
このとき、ID2 にたとえば 1,2,3 の全てがある ID1 を取得する SQL はどのようになるでしょうか?
SELECT ID1 FROM TBL WHERE ID2 IN (1,2,3) GROUP BY ID1 HAVING COUNT(ID1)=3;
みたいにやると取得できるのですが、もっと単純な方法はありますか?
また逆に、1,2,3 の全てを含まない ID1 を取得する SQL はどのようになるでしょうか?
0264NAME IS NULL
05/03/15 09:30:22ID:???ID2がユニークならそのSQLでOKだがそうでないと1が3回とかでも引っかかっちゃうぞ。
ケータイなんでSQLは書かないけど普通セルフジョインだ罠。
0265NAME IS NULL
05/03/15 14:43:18ID:???WHERE EXISTS (SELECT * FROM TBL t1 WHERE t0.ID1 = t1.ID1 AND t1.ID2 = 1)
AND EXISTS (SELECT * FROM TBL t2 WHERE t0.ID1 = t2.ID1 AND t2.ID2 = 2)
AND EXISTS (SELECT * FROM TBL t3 WHERE t0.ID1 = t3.ID1 AND t3.ID2 = 3)
って単純じゃあねーな。
0266263
05/03/15 23:29:14ID:???ID1 と ID2 の組み合わせでユニークです。
>>265
正攻法って感じですね。とりあえずはそういうアプローチが自然だと思います。
ただ、やりたいことの割にSQLが複雑になるのが難点なんですよね。
なにかSQLの便利文法や関数みたいのって無いものですかね。
0267NAME IS NULL
05/03/16 00:17:32ID:???引数に平仮名カタカナ日本語が使えなくなった。
create or replace function testfunc1(text) returns text as'
declare
begin
if length($1) = 0 then raise notice ''no'';
end if;
raise notice ''%'', $1;
return $1;
end;' language 'plpgsql';
この関数で、select testfunc1('あ');
とやってやった時に文字化けやら、値がこなかったりとか。
クライアントエンコーディングは基本的に
UNICODEで、端末側はutf-8
set client_encoding to 'EUC-JP'やらで変更してやってもいじょうなし。
# show client_encoding;
client_encoding
-----------------
UNICODE
(1 row)
version
---------------------------------------------------------------------------------------------------------------------------------------------
PostgreSQL 8.0.1 on i686-pc-linux-gnu, compiled by GCC i686-pc-linux-gnu-gcc (GCC) 3.3.5 (Gentoo Linux 3.3.5-r1, ssp-3.3.2-3, pie-8.7.7.1)
(1 row)
文字化けと言うことでエンコーディング周りかなと思ったのですが、
何を疑ったらいいでしょう?
0268NAME IS NULL
05/03/16 00:18:55ID:???0269267
05/03/16 00:23:57ID:???(KDEのターミナル)から操作してみましたら、正常稼働。
で、ひょっとしてemacsのSQLモードが原因かなと思って、
emacs自体を落して、再起動させてみたら、正常稼働。
emacs側の問題でした。何が原因かはちょっとわかりませんが、、、。
すみません。
0270NAME IS NULL
05/03/16 01:46:46ID:???正直にレスするのは大事なことだよね。乙。
0271NAME IS NULL
05/03/17 12:47:08ID:???PostgreSQL 7.3.4 で,Timestamp 型のカラムから java.sql.Date 型の
値を得たいのですが,ResultSet#getDate() だと時:分:秒が全てゼロに
切り捨てられてしまいます.
時:分:秒まで取得するためには,以下のようにするしかないのでしょうか?
new Date(ResultSet#getTimestamp("カラム名").getTime());
それとも,JDBC ドライバを変えるなどして,そのまま getDate()で
取れたりするのでしょうか?
現在使っているドライバは org.postgresql.Driver というものですが,
詳しいバージョンなどはわかりません.
0272NAME IS NULL
05/03/17 13:41:40ID:???Dateは日付だけだしTimeは時刻だけ
何もおかしい動きではないと思うが
0273271
05/03/17 21:00:01ID:???ありがとうございます.これが PostgreSQL の仕様なのですね.
PostgreSQL の TIMESTAMP 型は,MySQL だとDATETIME 型になりますが,
それの ResultSet#getDate() は時:分:秒を切り捨てませんので,
PostgreSQL も同様だと思っていました.
new Date(ResultSet#getTimestamp("カラム名").getTime());
この書き方は,耐えられないというほどでもありませんが,やや冗長です.
もう少しきれいな書き方はないものか,とは思います.
0274NAME IS NULL
05/03/17 21:14:24ID:???3種類ともDateを継承してるからな
実装によっては余計なのもはいるのかもしれないが、入ってる部分を期待するのはどうかと思うぞ
あとそんな冗長な書きかたしなくてええ
0275271
05/03/18 11:22:26ID:???ああそうか,受け手の setter の引数を,java.util.Date 型にすれば,
Timestamp 型をそのまま渡せるのですね.
困ったな,今まで気づかずに,どのメソッドも java.sql.Date 型にして
しまってます.
まあ,何とかします.ありがとうございました.
0276NAME IS NULL
05/03/19 13:43:54ID:???declare
res_r_return record;
begin
raise notice ''%,%'',arg_rec.i1,arg_rec.t1;
select into res_r_return arg_rec.i1,arg_text;
return res_r_return;
end;' language 'plpgsql';
こういう関数と、
create table test1 (i1 int,t1 text);
と言うテーブルを用意しまして、
select b.* from (select testfunc1 ('saitama',a) from (select * from test1) as a) as b;
みたいなことやってみたいんですが、テーブルでキャストするみたいなことできないんでしょうか?
できれば、(select * from test1) as a の部分はまた別のSQLを書くことになるのですが、
このままだと、ERROR: plpgsql functions cannot take type record
と言うエラーになってしまいます。
ですので、test1のテーブルでキャストしたいのです
なお(select * from test1) as a を test1 as a にすればうまく行きますが、
これだと、「こちらで用意した複合型を引数にさせる」と言う目的が果たせないので、、、。
0277NAME IS NULL
2005/03/23(水) 11:21:48ID:1/N/aqtfPHPからPostgreSQLに接続したいんですが
ホストをlocalhostにして接続するとつながりません。 ホスト名を指定しなければ(空白で)繋がります。
繋がるときのリソースからホスト名を返しても空白なんですが
PostgreSQLのホスト名ってどこで指定するのでしょうか? postgresql.confの中?
0278NAME IS NULL
2005/03/23(水) 12:03:55ID:???tcpip_socket = true
0279277
2005/03/25(金) 09:44:18ID:iOUir/Emサンクス
0280NAME IS NULL
2005/03/30(水) 10:18:15ID:uLYJQsQ+レンタルサーバでおすすめってないですかね?
とりあえず今はWebARENA Suiteを使って
そこそこ満足してるのですが
古いサービスのためWeb側の機能がしょぼくて、、、
他にお勧めがありましたら教えてください
0281NAME IS NULL
2005/03/31(木) 11:37:15ID:???postgresql-8.0-ja.msi
を実行すると「インストールの準備中...」で終了してしまいます。
英語版では言語選択が出てインストールログが取れたので見てみたら
「Custom Action GetAvailableLocales did not close 1 MSIHANDLEs.」
というエラーを吐いています。。。
同様の症状の方っています?
0282NAME IS NULL
2005/03/31(木) 11:43:31ID:???pathにcygwin/binが入ってるとなる
0283NAME IS NULL
2005/04/06(水) 22:55:14ID:aqdN+9wz使うことになったのですが、ODBCドライバは、インターウィズで配布されている
日本語版を使えばいいのか、それとも公式サイトの最新版を使えばいいのか、どっちなんでしょうか?
日本語版の更新履歴はずいぶん古いようだけど・・・?
公式サイトのは、char型(1)にデータを「あ」と入れたらDBへのアクセスがおかしくなってしまった。
そんなこんなでちょっと迷っています。ググっても、古そうな情報しか出てこないみたいだし。
ちなみに、Linux(CentOS3.4)、PostgreSQL7.4.7です。
0284NAME IS NULL
2005/04/07(木) 18:00:10ID:ZEIZCCOjどのサイトに置いてありますか?
0285NAME IS NULL
2005/04/07(木) 18:15:53ID:???0286NAME IS NULL
2005/04/07(木) 20:18:11ID:cykybgShPHP環境でテーブルの中のデータを抜くときに
for ($s == 0; $s <= 100; $s++) {
if (!pg_fetch_result($result, $s, 0)) break;
$key = pg_fetch_result($result, $s, 0);
echo $key;
}
と、ループさせて、データが見つからなかったらbreakするように
しているのですが、これだと
Warning: pg_fetch_result(): Unable to jump to row 2 on PostgreSQL
result index 3 in "if (!pg_fetch_result($result, $s, 0)) break;の行"
というエラーが出てしまいます。
pg_fetch_result()では、存在しないフィールドを指定すると
エラーが出てしまうのでしょうか?
何か解決策があればご教授願えれば幸いです。
どうやら
http://ns1.php.gr.jp/pipermail/php-users/2003-August/017901.html
これと似ている状況らしいのですが、レスがついていないため
いまいち何が原因でエラーが出ているのかわかりません。
0287NAME IS NULL
2005/04/08(金) 10:54:22ID:???0288NAME IS NULL
2005/04/08(金) 12:02:18ID:???pg_fetch_result()なんて使った覚えないけど、エラーが出てんなら、そうなんだろうな。
どうしてもpg_fetch_result()を使うのなら、@をつけるとか。ついでに無駄も省いて。
for ($s == 0; $s <= 100; $s++) {
if ( ! $key=@pg_fetch_result($result, $s, 0)) break;
echo $key;
}
0289286
2005/04/08(金) 16:20:35ID:???そですね、行数を調べるのが一般的なやり方ですね。
ありがとうございます。
>>288
ありがとうございます。
@をつけたらエラーが出なくなりました。
0290質問
2005/04/11(月) 18:58:50ID:???ACCESS の データを Postgre にエクスポートする
方法をどなたか教えて下さいm(_ _)m
0291NAME IS NULL
2005/04/12(火) 02:20:27ID:???Red Hat Linux release 7.3 (Valhalla)
PostgreSQL 7.3.4
PgAdminIII 1.2.1
文字コードまわりのセットアップは
server_encding = SQL_ASCII
client_encding = SQL_ASCII
となっていました。
アプリも複数の担当で制作しており、テーブルによってEUC_JPとSJISが混在しています。
ただし、文字コード変換は、アプリ側できちんと実装しているので、運用に関して問題は出ていません。
(pg_dumpの結果が文字化けしておりこれが非常に怖いですが、今回の質問とは別問題ということで)
以上の環境で、これまではCSEでデータベース内容を閲覧していましたが、PgAdminIIIに切り替えました。すると、
1.PgAdminIIIよりEUC_JPでインサートされた行が文字化けして見れなくなってしまいました。
2.PgAdminIIIをインストールした直後よりCSEが使えなくなりました。
これら問題について、
1.そもそもcreatedbする際のエンコード設定が間違えているのは承知の上なのですが、運用中なのでおいそれと変更できません。この環境下で、EUC_JPでinsertされたテーブルをPgAdminIIIから見られるのでしょうか?
2.PgAdminIIIとCSEは共存出来ないものなのでしょうか?(CSEをインストールした時に自前で入れたlibpq.dllがPgAdminIIIインストール時に上書きされた気がします。)
ご存知の方、宜しくお願いします。
0292291
2005/04/12(火) 14:12:00ID:???その後、2は解決しました。
やはり、PgAdminIIIがlibpq.dllを上書きしたのが原因だったようなので、CSE用のlibpg.dll(6.5付属日本語版)は\windows\system32\ではなくCSEのインストールディレクトリに入れて、アプリによって使うlibpq.dllが変わるようにしたところ問題なく動作しました。
しかし1は未だに未解決です。2が解決したので問題ないと言えば問題ないのですが、pg_dumpの結果が文字化けしまくりなのが、やはり怖い…
0293NAME IS NULL
2005/04/13(水) 10:26:24ID:r7emTefnOracle8iからPostgreSQL8.0に移行しているのですが、外部結合がよくわかりません。
(A)
SELECT * FROM
A,B,C
WHERE
A.xxx = B.xxx (+) AND
A.xxx = C.xxx
(B)
SELECT * FROM
A LEFT OUTER JOIN B
ON A.xxx = B.xxx,
C
WHERE
A.xxx = C.xxx
(A)と等価なSQLは(B)でよいのでしょうか。
(B)では、
A LEFT OUTER JOIN B ON A.xxx = B.xxx
をひとつのテーブルとして見ているような気がして、
where以下に条件が必要なのか自信がありません。
あと、FROM句で下のようにCを前に出すと、外部結合が
AだけでなくCにもかかるのでしょうか。
C,
A LEFT OUTER JOIN B
ON A.xxx = B.xxx
0294NAME IS NULL
2005/04/13(水) 11:08:42ID:???別スレでも見かけたけど、Oracleの記述が理解できないとワカランて。
(B)はAとBを外部結合してCと内部結合している感じか。
順番が逆(AとCを内部結合してBと外部結合)になっても結果は同じだろう。
つーか、どちらを先に結合するかはプランナかオプチマイザが選ぶだろうし。
ちゃんと書くなら
SELECT * FROM A
LEFT OUTER JOIN B ON A.xxx=B.xxx
INNER JOIN C ON A.xxx=C.xxx;
最後のCを前に出すって書き方やったこと無いけど、
WHERE句なりON句なりにA.xxx=C.xxxがないと
(A LEFT JOIN B)行 * C行分の結果が返ってしまうよ。
0295NAME IS NULL
2005/04/13(水) 12:02:42ID:r7emTefn抽象的なサンプルでもうしわけないです。
>>294さんの、ちゃんとした書き方の方向で考えてみます。
ありがとうございます。
0296294
2005/04/13(水) 14:54:56ID:???「ちゃんとした」ってのは語弊があるかな。
SQL92の書式とそれ以前の書式の混在が気になっただけ。
OUTERとかINNERとかは、大概(少なくとも俺は)省略するから、
SELECT * FROM A
LEFT JOIN B ON A.xxx=B.xxx
JOIN C ON A.xxx=C.xxx;
で済ましている。
まぁ、書き方と言うか、SQL9xの表記を理解した方がいいんじゃね。
0297NAME IS NULL
2005/04/13(水) 23:27:06ID:O1kEf2ygエラーメッセージ⇒Could Connect to remote socket(#101)[Microsoft][ODBC...
�@ pg_hba.conf の設定
----------------------------------------------------------------
# TYPE DATABASE USER CIDR-ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
#-------------------------------------------------------------------------------
# TYPE DATABASE USER CIDR-ADDRESS METHOD
host testdb01 all 192.168.1.2/20 trust
----------------------------------------------------------------
�A ODBCドライバは、http://www.interwiz.koganei.tokyo.jp/
から入手したもので、データソースのユーザには
postgres と、そのパスワードを指定しました。
※postgresql-7.3.4 の場合は
http://park15.wakwak.com/~unixlife/java/tomcat40-linux.html
で、
postgres.confの以下を変更します。
#tcpip_socket = false
tcpip_socket = true
とあったのですが、
postgres.conf のなかで、tcpip_socket を検索しても見つからない
※また、postmaster の起動は、
$ pg_ctl start -o "-i" で起動してもだめでした
どなたか、ご教授お願い致します
FC3 をはじめたばかりのものです。
0298NAME IS NULL
2005/04/14(木) 00:02:09ID:???> host testdb01 all 192.168.1.2/20 trust
localhost(127.0.0.1)で接続しているとか?
0299NAME IS NULL
2005/04/14(木) 00:26:09ID:fuAF7aqOlocalhost(127.0.0.1)で接続しているとか?
さっそくのれす、ありがとうございます。
データソースのサーバ名には、DDNSで指定したドメイン名と
IPアドレス(192.168.1.XX)を指定してやってみましたが
どれもだめでした。
0300NAME IS NULL
2005/04/14(木) 00:50:37ID:???あー8.0.1なのね。使ったことないけど多分この辺だと思われ
<<postgresql.conf>>
listen_addresses (string)
サーバがクライアントアプリケーションからの接続を監視するTCP/IPアドレスを指定します。
この値は、カンマ区切りのホスト名かIPアドレスもしくはその両方のリストという形を取ります。
*という特別な項目は利用可能な全てのIPインタフェースに対応します。このリストが空の場合、
サーバはIPインタフェースの監視を全く行いません。この場合は接続にUnixドメインソケットのみが使用されます。
デフォルト値はlocalhostであり、ローカルな"ループバック"接続のみが可能です。
このパラメータはサーバ起動時のみ設定可能です。
0301NAME IS NULL
2005/04/14(木) 01:34:14ID:fuAF7aqOあー8.0.1なのね。使ったことないけど多分この辺だと思われ
さっそくのれす、ありがとうございます。
postgres.conf の listen_addresses を以下のように変更してつながりました!
#listen_addresses = 'localhost'
↓
listen_addresses = 'localhost,192.168.1.xx'
ありがとうございました。
0302NAME IS NULL
2005/04/14(木) 14:49:20ID:???0303NAME IS NULL
2005/04/14(木) 23:57:46ID:???現在データサイズが600MBくらいなんですが、
毎朝
REINDEX table_a
REINDEX table_b
REINDEX table_c
REINDEX table_d
REINDEX table_e
VACUUM ANALYZE
という処理を行っています。
するとREINDEXのあたりで200MBとかサイズが増えたりします。
すぐに600MBにもどったり
翌日にさらに200M足されて1GBとかになったりします。
つねに600MBに戻るように制御できないでしょうか?
VACUUM FULL でも同じでした。
0304NAME IS NULL
2005/04/19(火) 19:24:43ID:???7.2.2 (on Linux) で EUC-JP な DB から pg_dump したファイルを、
8.0.2 (on Win2000) で同じく EUC-JP な DB に psql -f したいのですが、うまくいきません。
漢字で '青葉' (C0 C4 CD D5) なる文字のところに差し掛かると 、
「0xfd6a は invalid な文字だ」と怒られます。以下続々。
何がどうなったら 0xfd6a になるのか見当がつかないので途方に暮れてます。
第3水準の字 (0x8f※※) が混入しちゃってて、事態をより錯綜させているのですが、
もうとりあえず UTF-8 にでも変換するかな、と考えてます。
ただ、それでうまくいったとしても上記の問題の原因・解決法は知りたいので、
お暇な方いらっしゃったら是非ご教示お願いします。
0305NAME IS NULL
2005/04/20(水) 14:36:09ID:???・変更が頻繁に起こるフィールドのインデックスを、最小値に保つことは出来ない
と思う。(でテーブルの件数を少なくするか、逆に上限を1Gにする)
・対象フィールドを更新しないようにする(少なくする)。table構造を見直す
REINDEXで結果的にDiscは減るが、作業時Discが若干増える。
ので念のためVACUUM FULLを先の方がベターかな
0306NAME IS NULL
2005/05/03(火) 02:56:08ID:smoskI+Q遅レスなうえ、的外れかもしれないけど。
クライアント側のコードが問題なのでは?
戻そうとしているデータはEUCだろうけど、クライアントがWindowsならば違うから。
リストアするときはSET CLIENT_ENCODINGでEUCに変更してはどうでしょう。
もしくはLinuxのpsqlで接続してリストア。
見当違いだったらすみません。
0307NAME IS NULL
2005/05/06(金) 01:01:25ID:???0308NAME IS NULL
2005/05/12(木) 11:51:08ID:5/YL5pSd0309NAME IS NULL
2005/05/12(木) 12:03:42ID:???0310309
2005/05/12(木) 12:06:27ID:???http://gborg.postgresql.org/project/psqlodbc/genpage.php?downloads
ここにあったよ、最新は 8.00.0101 みたいだな
0311NAME IS NULL
2005/05/12(木) 16:58:23ID:???いや、ちょっとODBC経由で問題があってV8用ならどうだろうと・・・
どっちでも変わらないという結果でした。
>>310
ありが�d。助かったっす。
0312NAME IS NULL
2005/05/12(木) 19:14:54ID:???0313NAME IS NULL
2005/05/14(土) 15:12:17ID:???Accessで入れた日本語がLinux側でpsqlを使って中身見ると化けてしまいます。
逆にLinux側でpsqlを使ってインサートした日本語はAccessで見ると化けます。
configureで --encoding=EUC_JP を指定してインストール後、
initdb --encoding=EUC_JP --no-locale で初期化しました。
ODBCは
ttp://www.geocities.jp/inocchichichi/psqlodbc/indexj.html
のODBC3.0を使ってます。
どなたか、解決方法をご教授していただけませんでしょうか。
0314NAME IS NULL
2005/05/14(土) 19:27:25ID:I+81aSyr0315NAME IS NULL
2005/05/14(土) 22:39:03ID:34naW8OrWinでPathに設定するのはどれ?それともフォルダのパスをPathに設定すれば使える?
初心者すぎる質問でごめんなさい。
0316NAME IS NULL
2005/05/14(土) 23:30:14ID:???3.
0317NAME IS NULL
2005/05/15(日) 12:15:03ID:???psql -l でDBはちゃんとEUC_JPになってるか?
なってるなら・・・
ODBC変えろ
それでだめならODBCの設定のデータソース-設定2-接続時設定に
set client_encoding to sjis
とかいれてみ
0319NAME IS NULL
2005/05/26(木) 12:14:30ID:???RULE を使って,NOT NULL 制約と同じ機能のものを実装することはできるでしょ
うか?
1つのテーブルに2つの VIEW を作って,一方の VIEW に挿入するときと,もう
一方の VIEW に挿入するときとで,NOT NULL となるカラムを変えたいのです.
0320319
2005/05/27(金) 17:01:42ID:???約のようにエラーを発生させることはできないのでしょうか?
http://www.postgresql.jp/document/pg734doc/programmer/rules-triggers.html
別の質問です.PostgreSQL で挿入,更新したいテーブルが2つある場合,セッ
トされる値の範囲によって,更新の対象となるテーブルを切り替える,といっ
たことはできるのでしょうか?
例えば,特定のカラムにセットされる値が 0 ならば Table0を,1 ならば
Table1 を対象に更新する,といったことです.
最初は pl/pgsql の関数を書けば何でもできると思っていたのですが,INSERT
文は与える引数が一通りに定まらないので,これを関数で代用するのは無理で
した.(考えられる引数の組み合わせ全てについて関数をオーバーロードした
りすれば可能でしょうが,場合の数が多すぎて,現実的ではありません)
次に,INSERT INTO (テーブル名)のテーブル名を,CASE 文で切り替えられ
ないかと試してみましたが,この個所にはテーブル名そのものを書かないと
Syntax Error になりました.
以上です.どなたかよろしくお願いいたします.
0321NAME IS NULL
2005/05/27(金) 17:23:35ID:???ML関係だけってわけでもなさそうだし
PostgresSQLについて語ろう
http://pc8.2ch.net/test/read.cgi/db/1056992724/
0322319
2005/05/27(金) 20:23:34ID:???かりました.>>319 も同じような方法で実現できそうです.こちらはまだ試し
ていませんが.RULE はものすごく強力ですね.PostgreSQL を使うなら必須と
言えそうです.
(>>320 のサンプルコードを書いてみましたが,長くなるのでここには貼りま
せん.もしどなたかからリクエストがあれば,貼らせていただきます)
---------
>>321 私もよく知りませんが,過去ログを見ると,こちらのスレはもともと
PHP 板の発祥で,向こうは DB 板で始まって,両者が統合されていないという
ことのようです.まあ向こうはスレッドタイトルが間違っているのですが.
× PostgresSQL ○ PostgreSQL
0323319
2005/05/27(金) 20:56:33ID:???か?
PostgreSQL の RULE は,Lisp のマクロにあたるものだと,いまさらながら気
づきました.もともと Postgres は Lisp で書かれていたそうですから,作成
者は当然,Lispマクロの凄まじいまでの強力さを十二分に理解しており,
Postgres にもその力を少しでも持たせたかったのでしょう.
ということで,PostgreSQL のプログラミングでは,他のDBと違い,マクロが
書けるわけです.考えただけでもワクワクする話ではありませんか.
以上,蛇足でした.おかしなことを書いてすみません.失礼します.
0324NAME IS NULL
2005/05/27(金) 23:03:21ID:???0325304
2005/06/06(月) 10:44:55ID:???レスありがとうございます。
さらに遅々としたレスで申し訳ありません。
何もしなければ、psql コマンドは SJISファイルが渡されてきてるもんだと期待しているわけですね。
環境変数なおして上手く通りました。単純かつ当たり前のことでしたね。
迂闊でした。。
0326age
2005/07/01(金) 19:37:29ID:???カラム b に hell と入っているとします。
select * from t1 where a like '%hell%';
と同じ意味で
select * from t1 where a like '%'.b.'%';
みたいなことがしたのですが、
select * from t1 where a like '%b%';
と解釈されます。うまい方法はないでしょうか?
0327NAME IS NULL
2005/07/01(金) 19:39:58ID:pFeBRZhx0328NAME IS NULL
2005/07/01(金) 20:04:49ID:???select * from t1where a like '%' || b || '%';
0329NAME IS NULL
2005/07/01(金) 20:40:41ID:???0330NAME IS NULL
2005/07/04(月) 11:10:03ID:???t1.a に a が入ってます。
t1.a を下記のように case で hell にして
like 検索したいのですが、
ERROR: column "t1a" does not exist
と言われます。order by t1a は正しくできます。
select
case when
t1.a = 'a' then 'hell'
end as t1a,
*
from
t1,t2
where
t2.b like '%'||t1a||'%';
週末悩んだのですが、
t2.b like '%'||t1a||'%';
が
t2.b like '%hell%';
みたいにする方法ありますか?
0331NAME IS NULL
2005/07/04(月) 11:50:21ID:???t2.b LIKE '%' || CASE WHEN t1.a='a' THEN 'hell' END ||'%';
かな? 試してないけど。
0332NAME IS NULL
2005/07/04(月) 11:57:03ID:???WHERE句内では、ターゲットリストに渡る前に判断される為、
ターゲットリストに書かれた別名(出力名)は使えない。
#と、俺は解釈している。
0333NAME IS NULL
2005/07/04(月) 17:15:39ID:???なるほど!
|| の間に case を書くのか。全く思いつかなかったよ。
ありがと!
0334NAME IS NULL
2005/07/05(火) 00:15:15ID:???no1 serial,
no2 int,
date text
);
とある場合、
insert into hoge(date) values('aaa');
とすると「no1」カラムに自動的に数値が入るけど、
一つのinsert文で、「no2」カラムにシリアルで指定した「no」と
同じ値を入れることは可能でしょうか?
普通に考えると、
insert into hoge(date) values('aaa');
select max(no1) from hoge;
update hoge set no2=[max] where no=[max]
となるかと思いますが、一つのinsert文で記述することは可能でしょうか?
0335NAME IS NULL
2005/07/05(火) 00:56:18ID:???> 一つのinsert文で、「no2」カラムにシリアルで指定した「no」と
> 同じ値を入れることは可能でしょうか?
「no」はno1の間違いか? 結局 no1=no2にしたいのか?
> 普通に考えると、
> insert into hoge(date) values('aaa');
> select max(no1) from hoge;
> update hoge set no2=[max] where no=[max]
別セッションで同じSQLが同時に実行されるとずれる可能性があるな。
質問がハッキリ理解できないが、たぶん、
INSERT INTO hoge(no2,date) VALUES (currval('hoge_no1_seq'),'aaa');
こんなところか。
TABLEにデフォルト設定してもいいけどな。
0337NAME IS NULL
2005/07/08(金) 18:07:10ID:???「今週が誕生日」の人を取得する方法はどうしたら良いでしょうか?
PostgreSQLのバージョンは7.34 です。
最初は extract(week from...)で良いかと思ったのですが、PostgreSQL の
week は1月4日から始まるので、1月1日の週は1になったり53になったりで定ま
りません。
ということで、月と日を愚直に比較するしかないと思うのですが、そもそも
PostgreSQL で、今週の最初の日と最後の日を取得する方法がわかりません。
今日の曜日は EXTRACT(dow from...)で数字で返るのですが、この数値から今
週の開始日、終了日を取得する方法がわからないのです。
さらに、それが取得できても、まだ問題は残ります。週の開始日、終了日の
doy を比較しようと思うのですが、うるう年だとこれが1日狂います。それを
どう修正したらよいのかも分からないのです。
以上です。どなたかアドバイスをお願いします。
0338NAME IS NULL
2005/07/08(金) 18:15:38ID:???SELECT * FROM Table WHERE date_trunc('week',date_column) = date_trunc('week',now());
0339337
2005/07/08(金) 18:44:18ID:???SELECT date_trunc('week', NOW());
上のコードは、8.0.1では動きますが、7.3.4では以下のエラーが出ます。
ERROR: TIMESTAMP units 'week' not supported
0340337
2005/07/08(金) 18:55:58ID:???ても、いただいた書き方では目的を達成できないようです。
SELECT date_trunc('week', timestamp'1970-07-08') = date_trunc('week', NOW());
=> false
あと、以下のコードを実行していただければ、week の切捨ての問題点がご理
解いただけると思います。
SELECT date_trunc('week', timestamp'2005-01-01');
SELECT date_trunc('week', timestamp'2004-01-01');
SELECT date_trunc('week', timestamp'2003-01-01');
SELECT date_trunc('week', timestamp'2002-01-01');
SELECT date_trunc('week', timestamp'2001-01-01');
SELECT date_trunc('week', timestamp'2000-01-01');
0341NAME IS NULL
2005/07/08(金) 19:15:07ID:???0342337
2005/07/08(金) 19:39:38ID:???結局、条件文は以下のようにしました。
WHERE
date_trunc('day', birth_day) + date_trunc('year', age(birth_day))
BETWEEN ? AND ?
1行目で、生年月日から今年の誕生日の日付を取得し、2行目で今週の開始日と
終了日とで比較をしています。
2行目をPostgreSQLの関数だけで取りたかったのですが、無理のようなので
Javaで求めてセットすることにしました。
どなたか、2行目をPostgreSQL 7.3.4 で取得する方法をご存知の方、どうかお
教えください。
0343NAME IS NULL
2005/07/08(金) 20:03:16ID:???単純に日付の範囲でいいと思われ
0344337
2005/07/09(土) 00:00:46ID:???>>343
その日付を取る方法がわからないのです。
曜日は取れます。
EXTRACT(dow FROM now()) => 5
日付をさかのぼることもできます。
DATE_TRUNC('day', now()) + INTERVAL '5 DAYS')
=> 2005-07-03 00:00:00+09
この二つを組み合わせるにはどうしたら良いでしょう?
SELECT DATE_TRUNC('day', now()) - INTERVAL EXTRACT(dow FROM now()) || ' DAYS'
=> ERROR: parser: parse error at or near "EXTRACT" at character 44
0345NAME IS NULL
2005/07/09(土) 00:44:46ID:???でもそこまでして見にくいSQL使うくらいなら
プログラムからやったほうがいいだろうね
0346337
2005/07/09(土) 01:56:31ID:???とうございます。
ちなみに、>>342の1行目の後半には、バグがあるようです。このままでは、
date_trunc()は切捨てですから、今日より後の日付に誕生日が来る人は、今年
ではなく一年前の誕生日になってしまう。+ の右側の式に、切捨てではなく四
捨五入の関数が使えたらいいのに。
とりあえず、誕生日の範囲は1週間以内ですから、date_trunc()に与える式に、
+ INTERVAL '7 DAYS' をくっつけて解決することにします。ああ、アドホック
なコードだ…。
では、いろいろありがとうございました。
0347NAME IS NULL
2005/07/09(土) 02:17:11ID:???0348NAME IS NULL
2005/07/11(月) 02:28:10ID:???本質を理解すれば、解決手段はすぐ出てくるのに
0349NAME IS NULL
2005/07/23(土) 11:15:26ID:jrGs4b1Pコマンド教えて下さい
0350NAME IS NULL
2005/07/23(土) 11:20:20ID:???0351NAME IS NULL
2005/07/23(土) 11:21:24ID:jrGs4b1P具具ったらちょうど見付かりました
ありがとうございました
0352NAME IS NULL
2005/07/23(土) 11:24:00ID:???0353NAME IS NULL
2005/07/23(土) 18:32:59ID:???0354NAME IS NULL
2005/07/24(日) 14:11:00ID:???何か事前にやっておく設定とかありますか?
もしかしなくても、すごいアホな質問かもしれませんが・・・
0355NAME IS NULL
2005/07/24(日) 15:20:42ID:???(インストール後にchownでもいいが)
0356NAME IS NULL
2005/07/24(日) 15:22:00ID:???で。
0357NAME IS NULL
2005/07/24(日) 15:40:42ID:???漏れはeuc-jpなdebianだがpgsqlのデフォは
8.0系に入れ替えたときにutf-8にした。
psql起動オプションでclient_encodingをeuc-jpに出来ないのが辛い。
>>354
後からなんとでもなるけど、環境変数とかも先に
セットしておいた方が、後々楽ってのもある。
0358NAME IS NULL
2005/07/24(日) 17:28:26ID:???環境変数PGCLIENTENCODINGは?
0360NAME IS NULL
2005/07/25(月) 07:22:05ID:V5RJpM2v主キーをつけることってできますか?できたらSQL文教えて下さい。
0361NAME IS NULL
2005/07/25(月) 07:28:55ID:???ALTER TABLE テーブル名 ADD CONSTRAINT インデックス名 PRIMARY KEY(カラム名);
0362NAME IS NULL
2005/07/25(月) 08:12:56ID:???速レスありがとうございます!
かなり助かりました。
0363NAME IS NULL
2005/07/25(月) 15:51:24ID:???VIEWを作るときのSELECT文をEXPLAIN ANALYZEすると適用されてるんですが。
0364NAME IS NULL
2005/07/25(月) 16:32:45ID:???適用されるYO。
0365NAME IS NULL
2005/07/27(水) 20:57:41ID:???VIEWの中で使われているのも含めて、クエリ内で使われるテーブルの数が
6テーブル以上になってないか?で、VIEWの中では5テーブル以下しか
使われてないとか?
0366NAME IS NULL
2005/08/04(木) 14:54:02ID:/5+WAyrvfedoraの文字コード設定はロケールをEUC-JPに変更しています。
そこで、postgreSQLにログインして、SQL文をうち、日本語のquery文を
書くと文字化けしたり、コマンドがおかしなことになる(ずれたりしておかしくなり、
CTRL-Cを押して、解除するしかなくなります。)
どうすればいいか教えて下さい。
よろしくお願いします。
0367NAME IS NULL
2005/08/05(金) 14:17:38ID:???0368NAME IS NULL
2005/08/07(日) 22:39:20ID:???やっぱその時はpg_dump すべき?
0369NAME IS NULL
2005/08/08(月) 17:33:55ID:???もしかしたら、 soファイルの差し替えだけですむかもしれないし
psql -n でreadline切って試してみるのもいいかもしれません。
私は、Solarisが多いのですが、よくreadline入れ忘れて
後からインストールして作り直したりしてました。
今はオプション入れないとreadline無しだとconfigureが止まりますね。
0370NAME IS NULL
2005/08/10(水) 13:59:34ID:???configure にて --with-ssl ってオプション追加して リコンパイル
したんですが、 pg_config --configure でみると、以前の configure の
内容のまま変わっていません。
失敗してるという事でしょうか?
0371NAME IS NULL
2005/08/10(水) 14:44:34ID:???以前makeした場所でそのままやり直したん?
make distclean
していないのジャマイカ。
0372NAME IS NULL
2005/08/11(木) 11:15:51ID:???0373NAME IS NULL
2005/08/12(金) 00:20:52ID:8KrZv0NMfoo=#create table table_a ( id int, val int );
foo=#insert into table_a values ( 1, 1 );
foo=#insert into table_a values ( 1, 2 );
foo=#insert into table_a values ( 2, 1 );
foo=#insert into table_a values ( 3, 1 );
bar=#select * from dblink('dbname=foo','select id,sum(val) from table_a group by id') as t1( id int, val int );
ERROR: query-specified return row and actual function return row do not match
ってことで、sumを使うとdblinkの結果を正しく取得できないのだけど、
これってsumの結果をちゃんとキャストできてないバグですか?
0374370
2005/08/12(金) 09:44:21ID:???make distclean を実行して再度 configure したら出来ました。
ありがとうございました!
0375NAME IS NULL
2005/08/15(月) 17:08:39ID:???0376NAME IS NULL
2005/08/16(火) 09:01:14ID:X4s8bmdRoffset&limitを使ったSQLと、カーソルを使った場合では殆ど結果に差がないんですが、
プログラムの置いてあるサーバとDBサーバが別になると
カーソルの方が極端に遅くなります。これって理由は何なんでしょうか?
0377NAME IS NULL
2005/08/16(火) 18:45:09ID:OqDkzqJ9強制的にインデックスを使用させたいんです。
0378NAME IS NULL
2005/08/16(火) 19:24:21ID:???SET enable_seqscan TO false;とかやればよし。
http://www.postgresql.jp/document/pg803doc/html/runtime-config.html
0379NAME IS NULL
2005/08/16(火) 21:45:59ID:???サーバーカーソルかクライアントカーソルか・・・いずれにしろトラフィック
じゃないの。クエリも送らず全部サーバーDBにやらせ、結果だけ受け取れば。
0380NAME IS NULL
2005/08/16(火) 23:44:29ID:v3DRyeQAwindowsにcygwin + postgreSQLで運用をされている方、おられますでしょうか?
0381NAME IS NULL
2005/08/17(水) 00:09:02ID:???開発システムもほとんどWin32ネイティブに移行していると思われ。
0383NAME IS NULL
2005/08/18(木) 15:45:15ID:???まだまだいそうだけどね。
すでにデメリットしか見えないけどな
0384NAME IS NULL
2005/08/22(月) 13:21:29ID:???0385NAME IS NULL
2005/08/22(月) 22:35:34ID:???create temp table WORK as (select 〜 from 〜 );
copy WORK to WORK_FILE;
rollback;
じゃダメかい
0386NAME IS NULL
2005/08/23(火) 17:27:48ID:???0387NAME IS NULL
2005/08/23(火) 18:22:15ID:???0388NAME IS NULL
2005/08/23(火) 21:37:38ID:???0389NAME IS NULL
2005/08/29(月) 14:51:08ID:???postgresql.conf の log_statement を true に。
syslog回りは自分の環境に合わせて
0390NAME IS NULL
2005/08/29(月) 19:02:25ID:???/usr/local/pgsql/dataを、空きがいっぱいある/home以下に移動して
シンボリックリンクを張っての運用って問題ないでしょうか?
0391NAME IS NULL
2005/09/01(木) 08:21:46ID:???0392NAME IS NULL
2005/09/01(木) 14:46:11ID:???0393NAME IS NULL
2005/09/02(金) 05:26:33ID:tvZu4i8zしているバージョンは何でしょうか?
それと手始めに何をしたらよいですか?(Linux・unix初心者なのです…)
0394NAME IS NULL
2005/09/03(土) 03:03:31ID:???安定してるバージョンって言うか
8系と7系のどちらで行くかによるんですけど
将来的な事を考えると PostgreSQL8.0.3
互換や、他のソフト等で相性とかえて考えたくないなら PostgreSQL7.4.8でいいと思う
0395NAME IS NULL
2005/09/03(土) 06:58:58ID:???FinkとかDarwinportsを使うのが楽だにょ
0396NAME IS NULL
2005/09/03(土) 12:26:53ID:???本番環境で
# du -b -s -k /usr/local/pgsql/data/
すると約5Gあるのですが、
このデータをdumpして、テスト環境にリストアすると、1Gくらいしかありません。
$ vacuumdb -f -a
もやってみたのですが、容量は減りません。
このままではディスクが溢れてしまいます。
どなたか原因に心あたりのあるかたはいませんでしょうか。
バージョンは7.2.7です。
0397NAME IS NULL
2005/09/03(土) 13:58:51ID:???reindex してみたら?
0398393
2005/09/07(水) 03:41:53ID:Ew4HgFdNPostgreSQL7.4.8でやってみようと思います。ちなみにPostgreSQL専用のアカウント
の作成方法がわかりません(><) いちおー、CUIでやりたいと思うのですが…
0399NAME IS NULL
2005/09/07(水) 14:13:22ID:???> 8系と7系のどちらで行くかによるんですけど
PostgreSQLの開発体制から言えば、8系と7系って分け方は不適切だろ。
あえて言うなら、…7.3系,7.4系,8.0系,8.1系…て感じになる。
PostgreSQLでの7.4系→8.0系の違いはLinuxの2.4系→2.6系のような差ではなく、
単にWindows対応などの目玉機能が追加されたんで7.5系でなく8.0系と呼ぼう、
ってだけの話だ。
0400NAME IS NULL
2005/09/07(水) 22:02:54ID:h4DOps4+ここ、
http://www.entropy.ch/software/macosx/postgresql/
参考にしてみれば。
0401NAME IS NULL
2005/09/17(土) 11:56:34ID:???varchar(20)のカラムにインデックスをcreateしようとすると6時間とか掛かるんですが、
これって正常な動作なんでしょうか?
Win2000 豚2500+ 512MEMORY 、work_memはやけくそで524228にしてまつ@postgres.conf
(ただ、create実行中のタスクマネジャでは使用メモリが2400KBで仮想メモリが17000KBくらいでつ)
0402NAME IS NULL
2005/09/17(土) 11:57:28ID:???×使用メモリが2400KBで仮想メモリが17000KB
○使用メモリが24000KBで仮想メモリが17000KB
0403401
2005/09/17(土) 11:59:27ID:???行は38万行くらいです
0404NAME IS NULL
2005/09/17(土) 21:45:45ID:???0405NAME IS NULL
2005/09/18(日) 09:52:13ID:???それも524228にしてみたんですが、変わらないみたいです。
あとcheckpoint_segmentsを増やすとパフォーマンスがあがるとマニュアルにあったので、
それを3から9に増やしてみたりもしてみました。。。
http://www.postgresql.jp/document/pg800doc/html/performance-tips.html
integerのカラムだと10秒-20秒くらいでインデックスが終わるのですが、
テキストカラムだと数時間単位で掛かってしまいます。。。
0406NAME IS NULL
2005/09/18(日) 10:05:03ID:???dataディレクトリにあるpostgresql.confを編集しているんですが。。。(pgAdminIIIで編集)
0407NAME IS NULL
2005/09/18(日) 10:10:50ID:???あと、WARNING系のログが出ていないかとか、スワップが起きてないかとか、
確認すべきことは山ほどある。
バカの一つ覚えのように許可メモリ量だけ増やしても逆効果。
0408NAME IS NULL
2005/09/18(日) 20:57:15ID:???異常な動作ということで、いろいろ調べてみます。どうも。
0409NAME IS NULL
2005/09/19(月) 14:02:53ID:???解決しました。
REINDEXしてもダメで悩んでいましたが、
max_fsm_pagesを大きく設定し直してvacuum fullすることで領域が開放されました。
ありがとうございました。
0410NAME IS NULL
2005/09/20(火) 12:42:10ID:???PostgreSQL 7.3.4 を RedHat上で利用しているのですが、VACUUM FULL を実行
するのに気をつけなければならないことは何でしょうか?
VACUUM FULL の実行中に他のユーザからのDBアクセスがあると、最悪DBがクラッ
シュするという話を聞いたような記憶があるのですが、事実でしょうか?
0411NAME IS NULL
2005/09/20(火) 22:44:02ID:???create table example (
a int,
c int
);
というテーブルがあって、これの a と c の間に b という列を追加したい場合、
mysql だったら
alter table example add b int after a;
でいけますが、Postgers では after という構文は使えないようです。
どうすればええんでしょうか?
0412NAME IS NULL
2005/09/21(水) 12:23:16ID:???クラッシュするなんてことは無い。当方は、十数人のユーザが接続していると
きに何度もVACUUM FULLを実行しているが、障害が起こったことは無い。
VACUUM FULL を行うと、場合によっては長時間、テーブルロックがかかるから、
アクセスが集中しているときには問題になる。気をつけなければならない点は
それだけ。
VACUUM についてはいろいろ間違った情報が流布しているようなので、公式の
マニュアルとメーリングリスト以外は、あんまり信じない方が良い。
>>411
方法は無い。テーブルのデータを保存して(一時テーブルに収めるのが楽)、
テーブル定義を DROP → CREATE し直し、データを書き戻すしかない。これは
最新の 8.03でも同じ。
※そもそもDB理論では、こういうカラム定義の順番を気にするような使い方は
いけない、ということになっているが、現実的にはそうも行かないね。
0413NAME IS NULL
2005/09/21(水) 12:49:11ID:???どうもあんがとう。
感謝、感謝。
0414NAME IS NULL
2005/09/21(水) 15:00:02ID:VfNnd0+f0415NAME IS NULL
2005/10/08(土) 07:24:08ID:???理事の審査がいるって書いてあるので少し身構えてる俺ガイル
0416NAME IS NULL
2005/10/09(日) 04:07:53ID:???jpugのMLはjpug会員の交流用MLだよ。
postgresqlの質問などはpgsql-jpへ。
わかってたらスマソ。jpugのMLではフリーメールは
見かけないなぁ。
0417NAME IS NULL
2005/10/12(水) 19:17:54ID:???x|y
-+-
1|a
1|b
1|c
2|a
3|a
3|b
という時、y に c を含まない x を抽出したいんです。
つまり
x
-
2
3
としたいんです。y != 'c' では複数行なのでダメで…。
0418NAME IS NULL
2005/10/12(水) 19:29:16ID:???あまり自身はないが。。。これでいいのかな?
select distinct x from test
where x not in (select x from test where y = 'c');
0419418
2005/10/12(水) 19:36:11ID:???過疎スレで何やってんだか。。。orz
0420NAME IS NULL
2005/10/12(水) 19:43:45ID:???0421NAME IS NULL
2005/10/14(金) 11:44:58ID:???SELECT DISTINCT x
FROM Table_Name T
WHERE NOT EXISTS
( SELECT *
FROM Table_Name
WHERE x = T.x
AND y = 'c' )
参考:1.サブクエリーを引数に取る場合、IN述語よりもEXISTS述語を使う
http://www.geocities.jp/mickindex/database/db_optimize.html#LocalLink1
まあ、ぜんぜんPostgreSQL固有の話ではないわけだが。
0423NAME IS NULL
2005/10/15(土) 01:21:41ID:???417じゃないけどそのURLは勉強になった。サンクス。
0424NAME IS NULL
2005/10/15(土) 01:24:00ID:???勉強がてらに検証するのもいいがな。
0425NAME IS NULL
2005/10/15(土) 01:29:13ID:???6 の count(pkey) は MySQL だと遅いらしいし。
0426NAME IS NULL
2005/10/15(土) 01:50:52ID:???> 参考:1.サブクエリーを引数に取る場合、IN述語よりもEXISTS述語を使う
> http://www.geocities.jp/mickindex/database/db_optimize.html#LocalLink1
PostgreSQL7.4のリリースノートより引用。
---
IN/NOT IN 副問い合わせが非常に効率的になりました。
以前のリリースでは、IN/NOT IN 副問い合わせは、シーケンシャルスキャンに
よって副問い合わせと一致する上位の問い合わせと結合されていました。 7.4
のコードでは、通常の結合で使用される洗練された技術と同じものを使用し、
そのため、非常に高速になりました。これで INは通常、等価なEXISTS と同程
度の速度、場合によってはより高速になりました。これにより、これまでのリ
リースにおいて行なっていた慣習的常識はくつがえりました。
---
パフォーマンスチューニングにおける一番の鉄則はコレ。
「教科書に書いてあることを鵜呑みするな。
必ず自分で手を動かして性能を検証せよ。」
ソフトウェアは常に進化しているから、以前はcommon senseだったことが
今じゃnonsenseになってる、なんてのはよくあることだ。
0427421
2005/10/15(土) 02:19:28ID:???素晴らしい!大変参考になった。ありがとう。
しかし、私が今のプロジェクトで使っている PostgreSQL は 7.3 なのだ。
喜んだらいいのか悲しんだらいいのか。
0428NAME IS NULL
2005/10/15(土) 15:40:59ID:???>>320のサンプルコードをぜひ!!
お願いします。
0429322
2005/10/15(土) 18:46:05ID:???-- -------------------------
CREATE TABLE Table1
(column1 int2, column2 varchar(20));
CREATE TABLE Table2
(column1 int2, column2 varchar(20));
/* Table1 と Table2 をまとめて表示するView を作成 */
CREATE VIEW View1 AS
SELECT *
FROM Table1
UNION ALL
SELECT *
FROM Table2;
/* column1 の新規入力値が負なら、Table1に挿入 */
CREATE RULE RULE1 AS
ON INSERT TO View1
WHERE NEW.column1 < 0
DO INSTEAD
INSERT INTO Table1
(column1, column2) VALUES (NEW.column1, NEW.column2);
0430322
2005/10/15(土) 18:46:53ID:???CREATE RULE RULE2 AS
ON INSERT TO View1
WHERE NEW.column1 >= 0
DO INSTEAD
INSERT INTO Table2
(column1, column2) VALUES (NEW.column1, NEW.column2);
/* それ以外は無視 */
CREATE RULE RULE3 AS
ON INSERT TO View1
DO INSTEAD NOTHING;
/* Table1 に挿入されたら成功 */
INSERT INTO View1
VALUES(-1, 'ふがふが');
/* Table2 に挿入されたら成功 */
INSERT INTO View1
VALUES(1, 'ほげほげ');
0433NAME IS NULL
2005/10/18(火) 21:49:26ID:???宮内の物言いムカつくんだけど。
0434NAME IS NULL
2005/10/18(火) 22:13:12ID:???みんなで相手にするからつけ上がるのに。
「お前にはどうやっても無理だ」とちゃんと言ってあげようよ。
0435NAME IS NULL
2005/10/19(水) 01:05:06ID:???0436NAME IS NULL
2005/10/19(水) 16:59:52ID:???Fってホントどうしようもないな。
0437NAME IS NULL
2005/10/20(木) 02:01:45ID:???PowerGress Plus使えばいいのにね
0438NAME IS NULL
2005/10/20(木) 08:47:30ID:???--no-localeしていない時の典型的な症状なんだが…
最近、MLのレベル落ちてる?
0439NAME IS NULL
2005/10/20(木) 12:07:25ID:???0440NAME IS NULL
2005/10/20(木) 18:23:42ID:???0441NAME IS NULL
2005/10/20(木) 18:33:19ID:???これだけ時間使ってたら他のことできるだろうに、馬鹿な奴。
0442NAME IS NULL
2005/10/20(木) 18:39:26ID:???0443NAME IS NULL
2005/10/20(木) 23:54:47ID:???select distinct on (id) 〜 order by xx とすると
SELECT DISTINCT ON expressions must match initial ORDER BY expressions
というエラーになります。
select * from (select distinct on (id) 〜) as v order by xx
で欲しい結果が出るのですが、もっといい正攻法のようなやり方はありますか?
0444NAME IS NULL
2005/10/21(金) 02:44:18ID:???それでいいんじゃね。
DISTINCT ON は重複削除の時にソートを必要とするので、
そのソートされたときの頭だしをおまけ的にやっているわけで、
別の列でソートするなら結局再ソートが必要なんで、結局
貴方が書いたSQL(サブクエリ内で重複削除後に外のクエリでソート)になる。
0445NAME IS NULL
2005/10/26(水) 21:04:44ID:???psql dbnameを実行すると下記のエラー出てこまっています。
psql: connectDBStart() -- connect() failed: No such file or directory
Is the postmaster running locally
and accepting connections on Unix socket '/tmp/.s.PGSQL.5432'?
7.1.3です
0446NAME IS NULL
2005/10/26(水) 21:10:03ID:???Is the postmaster running ?
Is the postmaster running ?
0447445
2005/10/26(水) 21:15:07ID:???を実行してみたところ
/usr/bin/postmaster does not know where to find the database system data. You must specify the directory that contains
the database system either by specifying the -D invocation option or by setting the PGDATA environment variable.
でした、、確認方法まちがってますか???
0448445
2005/10/26(水) 21:32:23ID:???0449445
2005/10/26(水) 21:39:27ID:???0450NAME IS NULL
2005/10/26(水) 21:44:30ID:???PostgreSQLのエラーメッセージはとても親切だなぁ。
0451445
2005/10/26(水) 21:47:08ID:???0452445
2005/10/26(水) 22:38:51ID:???0453NAME IS NULL
2005/10/26(水) 22:49:28ID:???簡単なエラーメッセージも読めないようではあんたには無理だ。サポートを買え。
0454NAME IS NULL
2005/11/01(火) 12:31:05ID:Ni/Y0pQt0455NAME IS NULL
2005/11/01(火) 14:01:01ID:???0456NAME IS NULL
2005/11/01(火) 14:57:22ID:???ひたすら手入力しとけや
0457NAME IS NULL
2005/11/03(木) 12:22:55ID:???つ PL/Perl
0458NAME IS NULL
2005/11/09(水) 18:15:33ID:???社内でpostgresql、Slonyの知識がある部署に協力していただき
まだ解析中です。
本当、実績のないツールはイレギュラーが出ると辛いです。
----
だそうで。。
0459NAME IS NULL
2005/11/09(水) 18:38:18ID:???試行錯誤でだいぶわかってきたが、解説サイト作って
協力すべきかなぁ
0460NAME IS NULL
2005/11/09(水) 23:06:21ID:???社内に”いただき”というのは間違ってるな。
0461NAME IS NULL
2005/11/09(水) 23:21:43ID:???おお、素晴らしいですね。
0462NAME IS NULL
2005/11/09(水) 23:51:50ID:???じぶんのところで実績がない、って言いたいんだろうけどな
0463NAME IS NULL
2005/11/12(土) 14:11:05ID:???[pgsql-jp: 36372] PostgreSQLのスタート
とことん、エラーメッセージを読まない奴だな…
0464NAME IS NULL
2005/11/12(土) 22:22:26ID:???「あーあーみえないきこえなーい」
なやつなんだろうw
0465NAME IS NULL
2005/11/14(月) 15:58:27ID:???もはや存在が迷惑
0466NAME IS NULL
2005/11/14(月) 17:10:36ID:???0467NAME IS NULL
2005/11/14(月) 18:16:08ID:???なので、すっきり。
0468NAME IS NULL
2005/11/15(火) 22:09:11ID:???まだまだ続くよnakayosi.jp
マシン名himawariはチト受けた
0469NAME IS NULL
2005/11/16(水) 12:13:30ID:???ドメイン名(nakayosi.jp)がカッコよくて覚えやすい。
という無料のメールサービスみたいですよ。
0470NAME IS NULL
2005/11/16(水) 12:22:03ID:???俺にとっては括弧良くない
0471NAME IS NULL
2005/11/16(水) 13:01:30ID:???0472NAME IS NULL
2005/11/16(水) 13:45:57ID:???0473NAME IS NULL
2005/11/16(水) 14:45:53ID:???0474NAME IS NULL
2005/11/17(木) 06:28:51ID:029n4mvn0475NAME IS NULL
2005/11/17(木) 09:55:52ID:???0476NAME IS NULL
2005/11/17(木) 20:31:21ID:WPWQyDghテーブルにARRAY型のフィールドがあって、そこにinsertを行うJavaのプログラムを書いたのですが,
org.postgresql.util.PSQLException: Unsupported Types value: 2,003
at org.postgresql.jdbc2.AbstractJdbc2Statement.setObject(AbstractJdbc2Statement.java:1630)
at org.postgresql.jdbc3.AbstractJdbc3Statement.setObject(AbstractJdbc3Statement.java:1436)
at org.postgresql.jdbc2.AbstractJdbc2Statement.setObject(AbstractJdbc2Statement.java:1636)
にて落ちてしまいます.
PreparedStatement.setArray(int,Array)を利用しようと思いましたが,Arrayがインタフェースで
直接利用できないため
PreparedStatement.setObject(int,Object,int);
を利用しました.3番目の引数に(Types.ARRAY)を渡し,2番目の引数にはint[]を
渡しています.
解決策として何かわかる方いらっしゃれば教えてください.
Postgresql8.10 JDBC
WindowsXP
です
0477NAME IS NULL
2005/11/18(金) 19:20:31ID:???http://itpro.nikkeibp.co.jp/article/COLUMN/20051117/224817/?P=2
早速やってみたんだけど、インデックスはそれぞれの子テーブルであらためて張らないと、
子テーブル内でINDEXが無い状態になるってことで合ってる?
とすると、結構運用めんどくさいなぁ。
0478NAME IS NULL
2005/11/27(日) 18:17:39ID:???テーブルパーティショニングは結構CPU使うね。
やっぱAthlon 1.3GHzはきついか。
0479NAME IS NULL
2005/11/29(火) 22:31:10ID:???合ってるよ。確かに面倒だね。
これから改善されていくんじゃないかな。
0480NAME IS NULL
2005/11/30(水) 13:49:57ID:jT0vELWMインストールエラー
インストールされたファイルの権限設定に失敗しました
'cacls' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
権限設定とはどういう意味なのでしょうか?環境はXPなのですがうまくインストールできないのですが
Linuxに比べてWin上での留意点などありますでしょうか?
0481NAME IS NULL
2005/11/30(水) 14:06:05ID:jT0vELWM0482NAME IS NULL
2005/11/30(水) 14:09:03ID:???0483NAME IS NULL
2005/11/30(水) 15:46:59ID:???postgres ユーザーを administrators に入れないで作成すること
インストールの前にこれやっとけばいい。
インストール中にユーザー作ったりもするが前もって
やっといたほうがめんどくさくなくていい
0484NAME IS NULL
2005/11/30(水) 16:50:11ID:???ただユーザー管理が頭にないhomeエディションでこれはきついんだよね
0485NAME IS NULL
2005/12/01(木) 15:15:35ID:???レス有難うございます。cygwin上でcygIPCを入れてやってみたいと思います
0486NAME IS NULL
2005/12/01(木) 15:52:32ID:???0487NAME IS NULL
2005/12/01(木) 15:56:15ID:???0488NAME IS NULL
2005/12/01(木) 16:12:38ID:???0489NAME IS NULL
2005/12/01(木) 18:45:17ID:???0490NAME IS NULL
2005/12/01(木) 18:53:40ID:???おいらはcygwinのままでいいや。
0491NAME IS NULL
2005/12/02(金) 02:35:27ID:???postgresってユーザー作ります、よろしいですか?ときかれるだけだし
0492NAME IS NULL
2005/12/02(金) 11:34:36ID:???何の問題もなかった、、、引っかかる人はどこでひっかかるのか。
postgresユーザーに権限与えすぎるとまずかったり、サービスを
実行するユーザーになれないとかみたいだが、、、
ファイヤウォールとかがわるさしてんのかねえ
0493NAME IS NULL
2005/12/02(金) 12:11:16ID:???VineLinux3上の PostgreSQL7.4.8で、
・Perl-CGIプログラムからDBIでレコード登録・更新をしている
・登録されたデータをODBC経由でWindowsXP上のMS-ACCESSで編集している
・Perl側で登録(INSERT)だけで処理したレコードはACCESSで編集できる
・Perl側で更新(UPDATE)までしたレコードはACCESS側で編集しようとすると「データの競合」エラーが出る。
Perl側の更新部分は下記。
my $dbh = DBI->connect(dbname, dbuser,dbpasswd, { PrintError => 0, RaiseError => 1, AutoCommit => 0, } );
$dbh->do( "UPDATE foo SET flagr=1 WHERE code='123456';") );
$dbh->commit;
$dbh->disconnect;
どうなおせば良いかヒントください。エロイ人。
0494NAME IS NULL
2005/12/02(金) 14:37:54ID:???同じwindows上のFTP鯖が悪さしてたみたいでした(><)
今の所PostgresSQLだけ入れてちゃんと動いてます
95でFTPD!?
ttp://hp.vector.co.jp/authors/VA002682/tftpd_frame.htm
WindowsNT
WindowsNTは、Windows95にはついていないファイル保護機能が付いています。
NTは、近代的なオペレーティングシステムが持っているべき機能はほとんど持っている高性能オペレーティングシステムです。
このプログラムは、NTでも動くようですが、そんなときでも、このプログラムはNTの持っているファイル保護機能を全く使いません。
ファイル保護は、堤防と同じで、一個所でも穴があれば、そこから崩れていってしまいます。
つまり、このプログラムが動いているだけで、せっかくのNTサーバーが、95並みのファイル保護機能に成り下がってしまうわけです。
NTでこのプログラムを使う人も、この事をよーーく考えてからご使用下さい。
また、私はNTを持っていないので、NTでの動作確認は、全く行なっていません。また、行なうことも出来ません。
0495NAME IS NULL
2005/12/02(金) 14:42:16ID:???0496493
2005/12/02(金) 19:34:00ID:???0497NAME IS NULL
2005/12/02(金) 22:41:17ID:???cygipcって何年前の話だか……
0498NAME IS NULL
2005/12/02(金) 23:24:14ID:???0499NAME IS NULL
2005/12/02(金) 23:30:45ID:???0500493
2005/12/02(金) 23:48:12ID:???Accessから更新できるレコードと更新できないレコードのダンプを比較して解決しました。
Perlからの更新内容はフラグ立てとタイムスタンプの記録だったんだけど、
UPDATEクエリだとわかりゃ良いと思って質問にはフラグ立ての部分しか書いてなかったのです。(;´Д`)
実際のクエリは
UPDATE foo SET flag = 1, update_timestamp = current_timestamp WHERE code='foo';
みたいになってて、これを
UPDATE foo SET flag = 1, update_timestamp = date_trunc('second',current_timestamp) WHERE code='foo';
に修正したらなおりました。
「PostgreSQLのタイムスタンプ型」と「Accessの日付/時刻型」の精度の差が原因だったみたいです。
0501NAME IS NULL
2005/12/03(土) 00:17:13ID:???エンドユーザーなりに
せめてその場の空気くらいは読めるようになろうぜ
0502NAME IS NULL
2005/12/05(月) 00:53:53ID:???0503NAME IS NULL
2005/12/05(月) 14:42:24ID:???0504NAME IS NULL
2005/12/27(火) 22:56:11ID:???以下のようなテーブルがあり、t1_sizeの合計を表示するユーザ関数を
作成したいと思います。その時、LANGUAGE 'SQL' を指定すると期待した
数値を返してくれるのですが、'PLPGSQL' を指定すると、
ERROR: column "res" does not exist
CONTEXT: PL/pgSQL function "t1sum2" line 6 at return
と返ってきます。これは RECORD の使い方を間違っているのでしょうか。
(PostgreSQL 8.1.1の場合は数値は返してくれますが、型が違うとwarnを吐きました)
-- t1
--
Column | Type
---------+---------+
t1_num | integer
t1_name | text
t1_date | date
t1_size | bigint
-- t1sum(INT)
--
CREATE FUNCTION t1sum(INT) RETURNS NUMERIC AS
'SELECT sum(t1_size) FROM t1 WHERE t1_num = $1'
LANGUAGE 'SQL';
-- t1sum2(INT)
--
CREATE FUNCTION t1sum2(INT) RETURNS NUMERIC AS '
DECLARE
num ALIAS FOR $1;
res RECORD;
BEGIN
SELECT INTO res sum(t1_size) FROM t1 WHERE t1_num = num;
RETURN res;
END;
' LANGUAGE 'PLPGSQL';
長文になり申し訳ないのですが、よろしくお願いします。
0505NAME IS NULL
2005/12/28(水) 01:37:22ID:???| DECLARE
| res numeric;
| BEGIN
| SELECT INTO res sum(t1_size) FROM t1 WHERE t1_num = $1;
| RETURN res;
| END;
| ' LANGUAGE 'PLPGSQL';
じゃダメかい
つーか、sumしたいだけなら関数書く必要性を感じない
それに where で条件つけてsumしてるのは理解できが
その条件がキーっぽいと言うかコードでは意味がない気がするが
0506NAME IS NULL
2005/12/28(水) 02:57:54ID:???有り難うございます。これで動きました。
> つーか、sumしたいだけなら関数書く必要性を感じない
これは sum に対して、もう少し計算を加えたいとのと、私は
あまりタイピングが早くないので。かっこわるいのですが。
0507NAME IS NULL
2006/02/16(木) 15:56:39ID:???カラムを消して、カラムを追加しなおしてもいいのかと思いますが削除の方法が分かりません。
0508NAME IS NULL
2006/02/16(木) 16:36:08ID:???DROP INDEX でどうか
0509508
2006/02/16(木) 16:44:01ID:???ALTER TABLE table DROP CONSTRAINT key名
でいけないかな
0510NAME IS NULL
2006/02/16(木) 17:13:22ID:???ありがとうございます
adminuser というテーブルのhyoujiカラムの制約を解除したいのですが。
下記のようにしても駄目でした・・
ALTER TABLE adminuser DROP CONSTRAINT hyouji;
ちなみに
hyouji varchar(2) not null
で作ったカラムなので not nullも付いております。
ちなみにバージョンは 7.4.7-6sarge1 であります。
0511507,510
2006/02/16(木) 17:24:47ID:???\d adminuser
してkey名を表示して
ALTER TABLE adminuser DROP CONSTRAINT adminuser_hyouji_key;
で出来ました!
ありがとうございます
>509さんは神です、いわゆるゴッドです
0512NAME IS NULL
2006/03/01(水) 23:12:42ID:???psql を起動させたときに表示されるバージョン名が、
インストールされている postgres のバージョン名にあたるの?
もしそうじゃない場合、
インストールされている postgresのバージョン名を調べるには、どうしたらいいの?
0513NAME IS NULL
2006/03/02(木) 00:06:32ID:???0514NAME IS NULL
2006/03/02(木) 00:08:50ID:???SELECT version();
とか
dataの下のPG_VERSION
とか
postmaster --version
0515514
2006/03/02(木) 00:12:20ID:???ローカルのpsqlで別ホストのDBにつないだ場合は、SELECT version()しかないかな
0516NAME IS NULL
2006/03/02(木) 09:24:04ID:???なんてのがありましたか。どうもありがとうございます。とっても助かりました。
0517NAME IS NULL
2006/03/03(金) 13:37:05ID:???これはタイムスタンプの構文がおかしい
ERROR: invalid input syntax for type timestamp: "Sun, 5 Feb 2006 17: 8:21 -0060"
これはタイムゾーンが正しいレンジに収まっていない
ERROR: time zone displacement out of range: "Wed, 4 Jan 2006 3:53:25 +0480"
でいいんでしょうか
postgreのクエリーエラーの一覧があるサイトや書籍がありましたらご紹介ください。
0518NAME IS NULL
2006/03/14(火) 18:18:23ID:???ソース探したら、英語以外は po ファイルにまとまってんだね。
中国語や韓国語もあるけど日本語無いんだね。
まあエラーメッセージが文字コード違いの日本語で出ると
面倒だからなあ。Oracleで????ばっかりのメッセージをよく見るしな
0519NAME IS NULL
2006/03/19(日) 18:55:12ID:gv0TLlVc普通は '' でくくると思うんだけど、初めて見たよ。
0520NAME IS NULL
2006/03/21(火) 01:04:57ID:kfspap6qPostgreSQL 8.0.1 を Windows で動かしています。データベースは UTF-8 で作りました。
foo=# CREATE TABLE A(T VARCHAR(256));
CREATE TABLE
foo=# INSERT INTO A VALUES('ABCDEFG');
INSERT 56373 1
foo=# INSERT INTO A VALUES('あいうえお');
INSERT 56374 1
foo=# SELECT * FROM A;
t
------------
ABCDEFG
あいうえお
(2 行)
foo=# SELECT * FROM A WHERE T='ABCDEFG';
t
---------
ABCDEFG
(1 行)
foo=# SELECT * FROM A WHERE T='あいうえお';
t
---
(0 行)
foo=# select version();
version
------------------------------------------------------------------------------------------
PostgreSQL 8.0.1 on i686-pc-mingw32, compiled by GCC gcc.exe (GCC) 3.4.2 (mingw-special)
0521NAME IS NULL
2006/03/21(火) 10:59:24ID:kfspap6q8.0 (Win) の設定が何かおかしいのでしょうか??? 両方ともデータベースは
UNICODE で作ってあります。また両方とも psql と JDBC 経由とでこういう
動きです。
foo=# select version();
version
--------------------------------------------------------------------------------------------------------------------------
PostgreSQL 7.4.11 on i386-redhat-linux-gnu, compiled by GCC i386-redhat-linux-gcc (GCC) 3.4.4 20050721 (Red Hat 3.4.4-2) (1 row)
0522NAME IS NULL
2006/03/21(火) 17:24:44ID:???0523NAME IS NULL
2006/03/21(火) 17:52:38ID:???する時は特に何も出ませんでした。インストール時のメッセージってどこかに残ってます?
foo=# CREATE DATABASE X ENCODING='UNICODE';
CREATE DATABASE
foo=# SELECT VERSION();
version
------------------------------------------------------------------------------------------
PostgreSQL 8.0.1 on i686-pc-mingw32, compiled by GCC gcc.exe (GCC) 3.4.2 (mingw-special)
(1 行)
デフォルトの EUC_JP でデータベース作るとちゃんと日本語も引っかかるのになぁ。
0524NAME IS NULL
2006/03/21(火) 17:57:07ID:???0525NAME IS NULL
2006/03/21(火) 17:58:46ID:???0526NAME IS NULL
2006/03/21(火) 18:01:33ID:???0527NAME IS NULL
2006/03/21(火) 18:03:40ID:???セットアップの話ならそっちはunicodeは使っちゃ駄目だったけど
そっちの話のことか
0528NAME IS NULL
2006/03/22(水) 09:46:41ID:???unicodeにしたら失敗、インストール先変えたら失敗、○○したら失敗、だらけだったよ。
結局allデフォルトで入れるしかなかった。
0529NAME IS NULL
2006/03/22(水) 10:47:37ID:???0530NAME IS NULL
2006/03/22(水) 14:55:38ID:???いつの間にかまた日本語で検索できなくなってた。インストールした時って
文字セット選べたんだっけか? 一年位前に入れてほったらかしだったから
すっかり忘れてる。ちょっと入れなおしてみるか…
0531NAME IS NULL
2006/03/22(水) 15:01:14ID:???0532NAME IS NULL
2006/03/22(水) 15:55:28ID:???デフォルトで選択されてる EUC_JP で。CREATE DATABASE も無指定で。
今のところ順調に動いています。そういえば initdb する時に文字セット選べましたね。
Linux に入れるときもやってたわ。
0533NAME IS NULL
2006/03/23(木) 01:57:55ID:???ご存知の方いましたら教えてください。
リストアすると、特定のテーブルでエラーが起こってしまいますので、そこの部分を調べたいと思います。
よろしくお願いいたします
0534NAME IS NULL
2006/03/23(木) 10:01:41ID:???むちゃくちゃでかいと面倒だよね。
元のDBがあるなら、schemaだけダンプさせて、
どこからどこまでって文字列設定する参考になるけどね。
まあ勘でやってもうまくいく
0535NAME IS NULL
2006/03/23(木) 15:15:22ID:MoU5m8xfLOB を突っ込んでるんですが、ストリームのデータ量が多い (数十MBくらい) と
OutOfMemoryError が発生します。ひょっとして PostgreSQL の JDBC ドライバって
バイナリデータを全部メモリに展開してから SQL 発行してんの?
0536NAME IS NULL
2006/03/24(金) 00:07:57ID:???0537NAME IS NULL
2006/03/24(金) 07:16:18ID:???createdbの省略時のエンコードでもあるが
0538NAME IS NULL
2006/03/24(金) 23:28:36ID:???0539NAME IS NULL
2006/03/25(土) 04:51:56ID:???8.0 以降で PL/pgSQL 書くなら使うよ
'' の中で ' 書くときエスケープしなくて済むからね
まあ、$body$ じゃなくて $$ でも $foo$ でもいいんだけど
0540NAME IS NULL
2006/03/26(日) 05:22:38ID:pka3dqSRpg_dump でカスタム形式 ( -Fc ) を指定してれば
できるんだけどね
0541NAME IS NULL
2006/04/04(火) 10:40:35ID:???alter user で何回やってもできないんだけど。。
0542NAME IS NULL
2006/04/04(火) 11:13:27ID:???ALTER USER が失敗するの?だったら権限。
ALTER USER で設定してるのにパスワード聞いてこない?だったらpg_hba.conf
0543NAME IS NULL
2006/04/04(火) 12:13:21ID:???サンクス、pg_hba.confでtrustになってました。
0544NAME IS NULL
2006/04/15(土) 17:47:29ID:???FreeBSD 5.4, PostgreSQL 7.4
データベースの設置場所を個別に変更(リンクで)しようと、
/usr/local/pgsql/data/base を確認してみたのですが、
17451といった数字のディレクトリしか存在せず、
template1や、テストで作成したデータベース名が見あたりません
データベース名で保存されるには、設定等が必要なのでしょうか
0545NAME IS NULL
2006/04/15(土) 18:07:00ID:???0546NAME IS NULL
2006/04/17(月) 20:35:26ID:???pg_database の内容を見てみよう。
>>545
そういえば何でだっけ。
ここは元はMLヲチがメインだったかも。
0547544
2006/04/20(木) 01:21:34ID:???どうもありがとう
datlastsysoidをみればいいんですよね?
ttp://osb.sra.co.jp/PostgreSQL/Manual/PostgreSQL-7.4-ja/catalog-pg-database.html
確認してみたんだけど、どのデータベースの同じ番号です
とりあえず、次からは質問用のスレで聞きます
0548NAME IS NULL
2006/04/20(木) 18:32:27ID:gTr1CKh8プライマリIDをふる時に、numeric(n)とvarchar(n)のどちらのほうがいいでしょうか。
感覚的には文字列比較のvarchar(n)より、数値比較のnumeric(n)のほうが
速くていいのではないかと思うのですが。
うちの昔のシステムはなぜかvarchar(n)で0詰めなんですが、何か意味があるんでしょうか。
0549NAME IS NULL
2006/04/21(金) 14:45:30ID:???0550NAME IS NULL
2006/04/21(金) 14:52:06ID:???0551NAME IS NULL
2006/04/21(金) 16:09:34ID:???0552NAME IS NULL
2006/04/21(金) 16:23:22ID:???0553NAME IS NULL
2006/04/21(金) 16:42:01ID:???0554NAME IS NULL
2006/04/21(金) 16:44:41ID:???0555NAME IS NULL
2006/04/21(金) 16:46:58ID:???0556NAME IS NULL
2006/04/21(金) 16:51:35ID:???0557NAME IS NULL
2006/04/21(金) 16:53:46ID:???0558NAME IS NULL
2006/04/21(金) 17:00:36ID:???レスを一度にまとめられず必ず二回続けてレスする癖から見ても同一人物に間違いありませんw
0559NAME IS NULL
2006/04/21(金) 18:05:11ID:???ここは基地外隔離スレw
0560550
2006/04/21(金) 20:22:33ID:???事実、無視されてたわけでwww
>>548の質問内容があまりに・・・(ry
まぁ雰囲気悪く感じたなら、正直スマンかったよ。
0561NAME IS NULL
2006/04/21(金) 20:52:03ID:???何が「まじで」だwww
はっきりいって、どれが同一人物かなんてどうでもいいんだよ。
>>550は空気の読めない基地外だから氏ね。
0562NAME IS NULL
2006/04/21(金) 20:55:56ID:???>>>548の質問内容があまりに・・・(ry
こんなことを書くくらいだから、
>>560はよっぽどすばらしい質問ができるんだろうなwww
期待は出来ないけどw
0563NAME IS NULL
2006/04/21(金) 20:57:00ID:???0564NAME IS NULL
2006/04/21(金) 21:00:41ID:HfZIsICFこういうことにはちゃんとレスがつくんだな。基地外スレにはお似合いだ。
0565NAME IS NULL
2006/04/21(金) 21:09:39ID:???0566NAME IS NULL
2006/04/21(金) 21:18:49ID:???プライマリIDをふる時に、numeric(n)とvarchar(n)のどちらのほうがいいでしょうか。
プライマリIDをふる時に、numeric(n)とvarchar(n)のどちらのほうがいいでしょうか。
プライマリIDをふる時に、numeric(n)とvarchar(n)のどちらのほうがいいでしょうか。
プライマリIDをふる時に、numeric(n)とvarchar(n)のどちらのほうがいいでしょうか。
プライマリIDをふる時に、numeric(n)とvarchar(n)のどちらのほうがいいでしょうか。
0567NAME IS NULL
2006/04/21(金) 21:21:19ID:???0568NAME IS NULL
2006/04/21(金) 21:33:09ID:???0570NAME IS NULL
2006/04/21(金) 21:50:33ID:???よくある事ですよ。馬鹿なうえに師匠も友達も居ないから2chで質問するわけで。
0571NAME IS NULL
2006/04/21(金) 22:00:21ID:???そのレス、面白いからもう一方のスレに貼っといたw
0572NAME IS NULL
2006/04/21(金) 22:06:30ID:???0573NAME IS NULL
2006/04/21(金) 22:07:38ID:???面白いかも知れんけど、それいったら、
>>572に言い返せないから、やめとけ。
0574NAME IS NULL
2006/04/21(金) 22:08:29ID:???0575NAME IS NULL
2006/04/21(金) 22:42:40ID:???君が荒らしてるんだよ。。。
0576NAME IS NULL
2006/04/21(金) 22:49:20ID:???君も荒らしているんだよ。。。
・・・以下繰り返しw
0577NAME IS NULL
2006/04/21(金) 22:50:48ID:???荒らしが双方ともぴたっと止んだ。
やっぱり心当たりがあるのかねw
0578NAME IS NULL
2006/04/25(火) 21:52:27ID:???0579NAME IS NULL
2006/04/25(火) 22:33:21ID:???0580NAME IS NULL
2006/04/25(火) 22:48:57ID:???. |(・∀・)|
. | ̄ ̄ ̄
△
△l |
__△|_.田 |△_____
|__|__門_|__|_____|_____
0581NAME IS NULL
2006/04/27(木) 12:08:22ID:???7.x で同じことをする場合、何か方法はありませんか?
0582NAME IS NULL
2006/04/28(金) 15:50:04ID:???現在「特定テーブルのCSV出力」に何を使うかで悩んでいます。
ストアドプロシージャか、PHPを使うかの二択から選んでくれと言われたのですが、
クライアントアプリがこれらをキックすることを考えるとどちらが簡単でしょうか。
----------
クライアント:Windows(.NETで開発)
サーバ:RedHat Linux + PostgreSQL
やりたいこと。
1.通信はhttpのみ。
2.クライアントはサーバにアクセスして、
「特定テーブルのCSV出力」を命令する。<--------------(・ω・)
3.クライアントは処理の終了を待つ。
4.クライアントは出力されたCSVファイルをダウンロードする。
0583NAME IS NULL
2006/04/28(金) 16:13:08ID:???クライアントがストアドプロシージャを直接キックするん?
0584NAME IS NULL
2006/04/28(金) 17:22:25ID:???「そのようにせよ」と指示を受けました。
自分としてはADO.NETを介しても問題ないとは思うのですが...。
0585NAME IS NULL
2006/05/05(金) 16:48:00ID:???もしストアードプロシージャを使うとして、クライアントから来たHTTP通信を受けるのは
誰なんだ? postmasterにそんな機能はないぞ。
0586NAME IS NULL
2006/05/08(月) 13:27:34ID:???CSV出力するphpを作り、クライアントからそいつにアクセスする。
phpじゃなくてもいいけど。
0587NAME IS NULL
2006/05/11(木) 22:31:00ID:???ちなみに今の設定はこんな感じ
vacuum_cost_delay = 10 # 0-1000 milliseconds
vacuum_cost_page_hit = 1 # 0-10000 credits
vacuum_cost_page_miss = 10 # 0-10000 credits
vacuum_cost_page_dirty = 20 # 0-10000 credits
vacuum_cost_limit = 200 # 0-10000 credits
0588NAME IS NULL
2006/05/12(金) 09:32:55ID:???0589NAME IS NULL
2006/05/12(金) 21:15:45ID:???0590NAME IS NULL
2006/05/25(木) 21:19:56ID:rseeNcuL0591NAME IS NULL
2006/05/25(木) 23:26:32ID:???かなり込み入ったシステムでばーうpしたけど、無問題。
どんなエラーか知らんけど、おまいの作ったモノの方がおかしいんでないか?
0592590
2006/05/26(金) 00:06:36ID:???一応原因がわかった
エラーは文字変換ができないことが原因で
ERROR: character 0xacf1 of encoding "EUC_JP" has no equivalent in "UTF8"
ってのが頻発してたんだけど8.1.3まではwarningですんでたのが8.1.4では問答無用でERRORになってるためでした。
つまり俺のコードとDBが腐ってたと。orz
今からデータの掃除に逝ってきます
0593NAME IS NULL
2006/05/26(金) 18:50:57ID:4SSfJU7wポスグレのデータを取り出す方法とかありますか?
データのみ復旧されて帰ってきたのですが、どうにかならないですか?
試した事
8.14をインストールしてデータをコピーしてみた。
↓バージョンが違います。
cygwinで7.4.1を入れてデータをコピーして起動してみた。
↓
立ち上がりすらしません。
このデータというのは postgres/date の中のものです。
どうかよろしくお願いします。
0594NAME IS NULL
2006/05/26(金) 19:05:37ID:4SSfJU7w0595NAME IS NULL
2006/05/27(土) 00:18:13ID:???窓から身を投げて一から人生をやり直すというのはどうでしょうか?
0596593
2006/05/27(土) 16:20:47ID:/QEoXRkUそれ、採用です
0597NAME IS NULL
2006/05/31(水) 13:00:22ID:???移転先とかその辺の事情がわかる方はいますか?
↓ここなんですが。
ttp://cre-ent.skcapi.co.jp/%7Enobu/ODBC/
0598NAME IS NULL
2006/05/31(水) 23:17:50ID:???> 少し前から、ODBCドライバ(psqlodbc)のページが閉鎖されているのかつながりませんが、
> 移転先とかその辺の事情がわかる方はいますか?
書いた人が転職したから。ページの移転先は聞いてない。
0599NAME IS NULL
2006/06/01(木) 01:58:57ID:???本家のODBCドライバを使わないのは何故?
http://www.postgresql.org/ftp/odbc/versions/
0600NAME IS NULL
2006/06/01(木) 20:23:56ID:???0601NAME IS NULL
2006/06/03(土) 00:30:59ID:???余り話題に上ってないって事は、DBエンコーディングにShiftJIS使うとか、クライアントとバックエンドのエンコーディングが違っているとかってあんまいなかったって事なのかね。
0602NAME IS NULL
2006/06/03(土) 00:35:40ID:???対応しましたが?
報告必要ですか?
0603NAME IS NULL
2006/06/03(土) 09:45:58ID:???0604NAME IS NULL
2006/06/06(火) 14:44:18ID:h5kZihCT再度投稿します.
以下の点について悩んでいますので,ご教示お願いします.
ダンプファイルよりリストアを行おうと思いまして、
以下のコマンドを実行したところ、
psql testdb < dump.testdb
何度やってみても cannot allocate memory for output buffer
のメッセージが出て途中で止まってしまいます。
原因がお分かりの方がいらっしゃればご教授願いたく思います。
OS:CentOS
バージョン:PostgreSQL 8.1.3
以上です。よろしくお願いいたします。
0605NAME IS NULL
2006/06/06(火) 15:22:11ID:???0606NAME IS NULL
2006/06/06(火) 15:34:49ID:???0607NAME IS NULL
2006/06/06(火) 16:07:29ID:???0609NAME IS NULL
2006/06/06(火) 16:42:10ID:???0610NAME IS NULL
2006/06/06(火) 16:43:36ID:???オレまだ7.2系使ってるんだけど、どうしたらいいの・・・?
今年中くらいにリプレイスの予定だったんだけどなぁ。
はぁ。。。
0611NAME IS NULL
2006/06/06(火) 16:46:51ID:???プレースホルダー使えばいいだけ。
0612NAME IS NULL
2006/06/06(火) 16:53:56ID:???0613NAME IS NULL
2006/06/06(火) 17:03:16ID:???Mon, 29 May 2006 19:48:34 JST
Subject: [pgsql-jp: 37114]リストアが上手く出来ません
129.60.58.34= copper.rdh.ecl.ntt.co.jp
http://www.google.com/search?num=50&hl=ja&lr=lang_ja&sa=G&q=%22rdh.ecl.ntt.co.jp%22
ニヤニヤ
0614NAME IS NULL
2006/06/06(火) 17:13:05ID:???その根拠は?
0615NAME IS NULL
2006/06/06(火) 17:25:23ID:???「わからないから」とか「出来ないから」とか「知らないから」
なんて理由で使いつづけている池沼がほとんど。
そのあげくに指摘されると>>614みたいに逆切れ。
糞尿みたいな連中だよ。
0616610
2006/06/06(火) 17:29:53ID:???プレースホルダーって言ってもプログラムレベルの話なので
運用側にはどうすることもできませんし、修正の予算もありません。
困った。。。
0617NAME IS NULL
2006/06/06(火) 17:33:14ID:???SJISでも問題なく運用できることを「知らない」、する方法が「わからない」のは
>>615だと思うのだけど。
逆切れしてる池沼は、どちら?w
0618NAME IS NULL
2006/06/06(火) 17:35:06ID:???気にすることない。放っとけ。
どうせその腐れPGどもは自分達のアプリに穴があっても絶対に修正しないだろう。
おまえが気に病んでもしょうがない。
いたずらされたらカカクコムメソッドがあるさ。
0619NAME IS NULL
2006/06/06(火) 17:44:00ID:???穴は必ず見付かる。どいつもこいつも馬鹿ばかりだからな。
問題が起きたら「調べたら穴が空いてました」という事にして知らん顔すればいい。
穴を見つけても黙ってろよ。間違っても穴を修正させようとするな。
奴らはあーだこーだと理由をつけて修正を渋るうえ、
運営側になんとかしてくれと泣き付いてきて面倒が増えるだけ。
それどころか問題があった事を以前から知っていたという事がわかったら
こちらのほうが責任とらされかねない。
0620NAME IS NULL
2006/06/06(火) 17:45:28ID:???うちの場合は、客からの支持
合理的な理由が存在するとは思えんが仕方ない
0621忠犬 KEN
2006/06/22(木) 16:30:18ID:???欲しいのですが?
0622ココ電球(∩T∀T) ◆tIS/.aX84.
2006/07/01(土) 01:32:44ID:8EUWdSXuーーーーーーーーーーーーーーーーーーーーーーーーー
コネクションAオープン
トランザクション開始
表Aの書き換え
トランザクション終了
コネクションAクローズ
コネクションBオープン
SELECT XX FROM 表A (ロックなし FOR UPDATEなし)
コネクションBクローズ
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
これでさっき書き換えたものを正しく取得できるでしょうか?
おいらはできないと思うのですが
0623NAME IS NULL
2006/07/01(土) 02:02:03ID:???0624NAME IS NULL
2006/07/01(土) 02:03:07ID:cSX6hSFp0625NAME IS NULL
2006/07/01(土) 02:03:21ID:???0626NAME IS NULL
2006/07/01(土) 02:03:39ID:GrSHDerV市況版より
0627NAME IS NULL
2006/07/01(土) 02:03:46ID:???0628NAME IS NULL
2006/07/01(土) 02:04:00ID:???>>623-627
さぁ森へ還ろう
0629NAME IS NULL
2006/07/01(土) 02:04:03ID:Qe/njGR00630NAME IS NULL
2006/07/01(土) 02:04:11ID:RlbL4Q/Q↓
0631NAME IS NULL
2006/07/01(土) 02:04:38ID:Q9DHHByPココ電逝ったぁぁぁぁぁぁぁぁぁぁ!ぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁっ
0632NAME IS NULL
2006/07/01(土) 02:04:39ID:+PB+de8gマジレスすると
0633なつ☆ていおう ◆RWBX3nIyKs
2006/07/01(土) 02:04:42ID:9HiShuQP0634NAME IS NULL
2006/07/01(土) 02:04:59ID:???0635NAME IS NULL
2006/07/01(土) 02:05:08ID:???0636NAME IS NULL
2006/07/01(土) 02:05:29ID:GrSHDerV起こっているぞ
278 ココ電球(∩T∀T) ◆tIS/.aX84. New! 2006/07/01(土) 02:04:51 ID:7nlUZFjU
てめえら 書き込むなつうのに
0637NAME IS NULL
2006/07/01(土) 02:05:57ID:???0638NAME IS NULL
2006/07/01(土) 02:06:03ID:???0639NAME IS NULL
2006/07/01(土) 02:08:08ID:???ココ電は株で大損した不幸な女子高生です
0640NAME IS NULL
2006/07/01(土) 02:09:08ID:Q9DHHByP0641NAME IS NULL
2006/07/01(土) 02:12:42ID:RLoIh/h1ココちゃんをよろすく。。。
0642NAME IS NULL
2006/07/01(土) 02:15:16ID:???0643NAME IS NULL
2006/07/01(土) 02:16:16ID:???http://quote.yahoo.co.jp/q?s=%A5%D5%A5%A9%A1%BC%A5%B5%A5%A4%A5%C9&d=t&k=c3&h=on&z=m
こんなことになっちゃいました
0644ココ電球(∩T∀T) ◆tIS/.aX84.
2006/07/01(土) 02:16:29ID:8EUWdSXuMVCCを考慮してみてください。
0645NAME IS NULL
2006/07/01(土) 02:17:22ID:Q9DHHByP再就職を考慮してみてください。
0646NAME IS NULL
2006/07/01(土) 02:20:08ID:???0647NAME IS NULL
2006/07/01(土) 02:20:09ID:cSX6hSFp救ってやれよ
0648NAME IS NULL
2006/07/01(土) 02:24:57ID:Q9DHHByPどなたかココちゃんに教えてやってください。おながいします。
0649NAME IS NULL
2006/07/01(土) 02:26:33ID:1BXR4DuaDBだけで普通に考えると更新後の結果が取得できて当然
0650ココ電球(∩T∀T) ◆tIS/.aX84.
2006/07/01(土) 02:37:20ID:8EUWdSXuじゃあこれは?
ーーーーーーーーーーーーーーーーーーーーーーーーー
クライアント1
コネクションAオープン
トランザクション開始
表Aの書き換え
トランザクション終了
コネクションAクローズ
クライアントB コネクションAでcommitしたのを電話連絡を受けて以下を開始
コネクションBオープン
SELECT XX FROM 表A (ロックなし FOR UPDATEなし)
コネクションBクローズ
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
0651NAME IS NULL
2006/07/01(土) 02:58:54ID:???同じサーバなら取れるけど
違うサーバならメタデータなんなりでサーバ更新かけないと反映されない
0652NAME IS NULL
2006/07/01(土) 03:06:39ID:9lelxAwe素人ですが、
2つ目のクライアントは「クライアントB」じゃなくて、「クライアント2」なんじゃないの?
流れからすれば。
そんな感じで、クライアント名とかコネクション名とか記号を間違うような、
タイポの問題で止まってたりしてない?
0653ココ電球(∩T∀T) ◆tIS/.aX84.
2006/07/01(土) 03:12:20ID:8EUWdSXuーーーーーーーーーーーーーーーーーーーーーーーーー
クライアント1
コネクションAオープン
トランザクション開始
表Aの書き換え
トランザクション終了
コネクションAクローズ
クライアント2 コネクションAでcommitしたのを電話連絡を受けて以下を開始
コネクションBオープン
SELECT XX FROM 表A (ロックなし FOR UPDATEなし)
コネクションBクローズ
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
修正しました
0654NAME IS NULL
2006/07/01(土) 03:18:33ID:???commit したら更新したものが取得できるのは当たり前の話じゃないか。
コネクションがどうとか、全然関係ないんですけど。
0655NAME IS NULL
2006/07/01(土) 06:49:10ID:l/0TGnCJ0656NAME IS NULL
2006/07/01(土) 10:48:47ID:Q9DHHByPハイラベルwww
0657NAME IS NULL
2006/07/01(土) 14:29:37ID:???OracleであればDBMS_FLASHBACクエリーでできる。権限が必要だが。
0658NAME IS NULL
2006/07/01(土) 14:39:37ID:???×DBMS_FLASHBAC
○フラッシュバック
他にもsysdba権限や、import database権限があり、直前のバックアップをもっていれば可能であろう。
そもそもsysdbaを監視設定していないシステムであれば、根本的な問題はシステムではない。
0659ココ電球(∩T∀T) ◆tIS/.aX84.
2006/07/02(日) 00:48:55ID:xNO4Anq7PGClusterを使ってる場合
コネクションAのcommitを見てほかのコネクションでSELECTしても
コネクションAでの更新が反映されているとは限らないつうことだ
0660NAME IS NULL
2006/07/02(日) 01:14:49ID:???おいおい… もう絶句や…
0661ココ電球(∩T∀T) ◆tIS/.aX84.
2006/07/02(日) 01:39:13ID:xNO4Anq7それとも論理的に説明すんの苦手なん?
0662NAME IS NULL
2006/07/02(日) 01:40:49ID:???自分で何言ってるか分かってるの? 失笑ものだよ。
0663657,658
2006/07/02(日) 02:06:33ID:???存在するのではないか。ファントム読み取りが発生しうる状況はクラスターじゃなくても
ありうるからそこから調べたらどうだろうか?
0664ココ電球(∩T∀T) ◆tIS/.aX84.
2006/07/02(日) 02:34:00ID:xNO4Anq7このテーブルを書き換えるのはコネクションAだけなので
ファントムリードはないと理解していましたが合ってますでしょうか?
よろしくお願いします
0665ココ電球(∩T∀T) ◆tIS/.aX84.
2006/07/02(日) 02:40:45ID:xNO4Anq70666NAME IS NULL
2006/07/02(日) 15:56:24ID:???保証されているならそうでしょう。今回の件は単純にPGClusterの
レプリケーションが上手く機能していないのではないかと思われますが
いかがでしょうか?
0667ココ電球(∩T∀T) ◆tIS/.aX84.
2006/07/02(日) 18:01:59ID:IkqVEBqEPGクラスターのデフォルト設定では他のクラスタへのレプリケーションを確認しないで
直接受けたクラスタDBが成功したタイミングでクライアントに返事を返すらしいのです。
もう少し調査してみます。
0668ココ電球(∩T∀T) ◆tIS/.aX84.
2006/07/03(月) 21:50:55ID:q+kqhE6y覚悟を決めます
0669ココ電球(∩T∀T) ◆Olz.C.gJ3k
2006/07/04(火) 21:13:47ID:nOXv9efA0670& ◆u7PlsZ7.G6
2006/07/05(水) 16:42:04ID:e24Z99Oj0671NAME IS NULL
2006/07/06(木) 03:06:17ID:TPN99xccusogresですか・・・クラスターやレプリケーションの目的というより、
大幅に速度を犠牲にして(1/2以下)バックアップをリアルタイムで
とる機能といっていますが、正常なDBの区別さえあいまいになる
ソフトウェアですね・・・2002.8.28以降、更新もされていないようで。
usogres.ccそのものはsocketの複製をしてwriteしているだけです
から、サーバを2つ立てて運用する意味が、まったくわかりません。
もちろんご存知だと思いますが、現在のPostgreSQLではWALも改良
されてリカバリーにほとんど問題はありませんし、ロック中のホットバックアップ
も以前よりかなり良くなっているはずなのですが・・・費用面等での7.4以前
の古いバージョンをPostgreSQL8.0以降にバージョンアップできない理由でも
あるのでしょうか?このような問題は、運用に踏み切れない部長なり次長なり
の責任者が不安定な既存システムを抱えるすべての人間を不安にしている
だけでなく、問題が何度も起こってからやっと重い腰をあげるケースが多いよう
に思われます。もちろん責任は一人のSEやPGレベルにはありませんから、そう
悲観なさることもないでしょう。ただ本当にそういった責任者は事実を知らない
のでしょうか・・・知っていて何ら手を打てないのであれば復旧にかかる工数と
導入にかかる工数の天秤にかけるより、より堅牢なシステム構成にしたほうが
望ましいと私は思います。PostgreSQLとは関係ありませんが同じ業界に携わる
ものとして御健闘お祈り致しております。
0672ココ電球(∩T∀T) ◆tIS/.aX84.
2006/07/06(木) 22:27:18ID:f5exc1gIぜってー二重化して双方使ってると思う。
乱数叩き込んでチェックしたいけど、叩き込んだ途端にハングしそうでこわい・・・
0673NAME IS NULL
2006/07/08(土) 23:28:51ID:???0674NAME IS NULL
2006/07/09(日) 01:14:45ID:jxHzBWxU1個のテーブルにデータ量で100万件あるとして
その中から5件を選び出したりするぐらいだったら
oracleもpostgresqlも速度的にはかわらないものなのでしょうか?
0675NAME IS NULL
2006/07/09(日) 01:35:44ID:???PostgreSQLを勉強というよりも、もう少し根本的なところから勉強したほうがよろしい。
0676NAME IS NULL
2006/07/09(日) 01:41:08ID:jxHzBWxU始めたばかりでとんちんかんな質問してしまいもうしわけないです
最近oracleも個人の使用だと安いと聞きましたので
全く同じデータを
同じセレクト文で検索したときはどちらの方が何%速いかっていう
ということなどは出ているのでしょうか?
もしそんなに変化ないようでしたらoracleって個人では意味のない商品ですね
0677NAME IS NULL
2006/07/09(日) 02:01:21ID:???同じ(ような)条件でのベンチマーク結果は、探せば見つかるはず。
ただし、繰り返し言われているとおり、それが「意味」を持つかどうかは・・・(ry
RDBMSは、速度だけで語られるべきでもない。
Oracle利用〜個人でも意味がある場合もあれば、無い場合もある。
とりあえず、PostgreSQLなりで色々やってみては?
もう少し、自分なりに調べて勉強してみたほうがよろしい。
0678NAME IS NULL
2006/07/09(日) 06:52:51ID:???Oracle はそういったベンチの公開を禁止しているんじゃなかったっけ?
0679NAME IS NULL
2006/07/15(土) 02:41:52ID:???0680NAME IS NULL
2006/07/18(火) 15:56:58ID: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
0681NAME IS NULL
2006/07/18(火) 16:02:14ID:???「SQL BETWEEN」なりで検索するといいよ。
0682NAME IS NULL
2006/07/18(火) 16:46:27ID:7etx55f4お答えありがとうございます。
分からないのはBETWEENでは無く、日付なんです。
SELECT pubtime FROM article WHERE ?? BETWEEN 2005-08-27 AND 2005-08-28 ;
??の部分と日付の指定の仕方がよく分かりません。
もしお分かりでしたら、教えてください。
ヒントや解説のぺージでもけっこうです。
0683NAME IS NULL
2006/07/18(火) 16:54:57ID:???ん? 何が分からないのか分からない…
> 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 のものしか含まれないけど。
0684NAME IS NULL
2006/07/18(火) 17:04:48ID:7etx55f4ありがとうございます。
「'」単純にが抜けてましたorz...
お手数おかけしました。
0685NAME IS NULL
2006/07/18(火) 20:29:06ID:???# 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)
になりインデックスを使ってくれません ( 数秒が十数秒です )。
インデックスを使うようにするにはどうすればいいでしょうか?
0686NAME IS NULL
2006/07/18(火) 21:18:49ID:???ttp://itpro.nikkeibp.co.jp/article/COLUMN/20051117/224817/
0687NAME IS NULL
2006/07/18(火) 21:22:14ID:???0688NAME IS NULL
2006/07/18(火) 21:42:17ID:???ありがとうございます。
0689NAME IS NULL
2006/07/22(土) 10:29:47ID:8HTjVA0WポスグレのDBサーバーにJSPでデータを入れたいのですが
SDKとJDBCドライバはwebサーバー側に入れればいいのでしょうか。
それともpostgresのDBサーバー側に入れて設定するのでしょうか。
ネットでJDBCのインストール手順を見ても、自宅サーバーの構築手順
ばかりで、webサーバーとDBサーバーが一緒に一台のPCに入っている場合
の手順ばかりでどちらのサーバー側でインストール&設定すればよいのか
よく分かりません。どなたか教えていただけませんでしょうか。
0690NAME IS NULL
2006/07/22(土) 15:12:12ID:???0691NAME IS NULL
2006/07/23(日) 09:44:06ID:???少し考えれば分かるだろ
0692NAME IS NULL
2006/07/23(日) 12:19:51ID:???0693NAME IS NULL
2006/07/27(木) 04:35:38ID:M7LKVme/最近postgresの勉強を始めたんですが、試しに一つテーブルをつくってみようと
したら「ERROR: parser: parse error at or near "{"」というエラーがでてきます。
今つかってるpostgresのバージョンは7.2.3です。
なんで古いバージョンを使っているのかというと、本に書いてあるのがそのバージョンなんです
0694NAME IS NULL
2006/07/27(木) 04:55:26ID:???その SQL を書かないと誰も分からん。
しかし、なんで { なんて文字が出てくるんだ?
0695NAME IS NULL
2006/07/27(木) 05:08:03ID:M7LKVme/create table passwd{
id varchar(8) not null,
passwd varchar(8) not null,
primary key(id)
};
な具合ですorz
0696NAME IS NULL
2006/07/27(木) 05:22:53ID:???少なくとも {} → () だ。
0697NAME IS NULL
2006/07/27(木) 05:28:29ID:M7LKVme/今度からちゃんと眼鏡かけて本よみます
0698NAME IS NULL
2006/07/27(木) 10:27:35ID:???0699NAME IS NULL
2006/07/30(日) 06:55:05ID:???・注文(日付, 注文数合計)
・注文詳細(日付, 商品番号, 注文数)
みたいなテーブルがあって、注文詳細テーブルに変更があったときに
トリガで注文テーブルの注文数合計を更新したいのですが、
注文詳細テーブルは一括して数行更新されることが多いので
まとまった更新の最後に1回だけトリガで計算したいのです。
こういった処理を実現するにはどうすればいいでしょうか?
0700NAME IS NULL
2006/08/01(火) 13:44:54ID:8LI5yT2A0701NAME IS NULL
2006/08/02(水) 06:41:22ID:???テンポラリシーケンスでも作ったらいいんじゃない。
0702NAME IS NULL
2006/08/02(水) 08:44:49ID:???そんなものがあるのか。
っていうか、このスレに書いてあったorz
0703NAME IS NULL
2006/08/02(水) 10:06:15ID:???Red Hat Linux release 7.3 (Valhalla)
特定のレコードにアクセスしようとすると次のエラーがでます。
ERROR: missing chunk number 0 for toast value 8902358
"REINDEX TABLE"で該当のテーブルのインデックスの修復を試みましたが
状況は変わりませんでした。
何か復元する方法は無いでしょうか?
0704NAME IS NULL
2006/08/10(木) 11:31:54ID:c9RdWyBDhttp://itpro.nikkeibp.co.jp/article/NEWS/20060208/228805/
と自慢してやってたが
こんなに無用に金のかかるシステムにしちゃって・・・
一緒に講演してたおっさんに騙されたか?
・
・
・
http://dldojin.blog28.fc2.com/blog-date-20060715.html
速攻で破産してるな。
0705NAME IS NULL
2006/08/10(木) 21:04:32ID:???0706NAME IS NULL
2006/08/11(金) 10:42:13ID:???実績がないから。
MySQLで充分だから。
グレスケはBSD厨と間違われそうで嫌だから。
グレスケは一時Red Hatが後押ししてたから。
0707NAME IS NULL
2006/08/11(金) 14:58:46ID:???0708NAME IS NULL
2006/08/13(日) 02:15:23ID:MsUUCrjU仕事で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ループってものすごく遅いのでしょうか。
カーソルに書き直してみましたがものすごく遅いのでやめました。
あと、もう運用しているのでテーブル設計はやりなおせません。
0709NAME IS NULL
2006/08/13(日) 02:27:32ID:???とりあえずexplainの結果をだせ
0710NAME IS NULL
2006/08/13(日) 02:45:33ID: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かかる
こんなかんじです。
0711NAME IS NULL
2006/08/13(日) 02:52:16ID:???他人が関数にしたのは分かった。
で、関数にしないといけない処理をやっている訳ではないから
関数にしなけりゃいいじゃんって話でしょ?
0712NAME IS NULL
2006/08/13(日) 03:05:18ID:MsUUCrjUその先々でまたまた複雑なSELECT文がかかれている、めんどうなシステムです。
このシステムをスピードアップしろといわれて関数がボトルネックとまではつきとめて
なんとか関数の中身を7000msecくらいから200msecくらいまではやめたまではよかったけれども関数を実行したらぜんぜん早くなってなかったのでこまっているところです。
0713NAME IS NULL
2006/08/13(日) 03:08:42ID:OMR6/0y3解決策はないですか?
またはPL/PGSQLのことはわかんないんですか?
0714NAME IS NULL
2006/08/13(日) 03:29:29ID:???712 と ID が違うが、お前は誰だ?
PL/pgSQL のことは分かっているが、風呂くらい入らせろ。
ボランティアで即答を要求するのか?
そもそも、情報少なすぎ。
実際に SELECT * FROM fun() なんて SQL になってるのか?
何にせよ、気分悪いな。
0715NAME IS NULL
2006/08/13(日) 03:53:49ID:???0716NAME IS NULL
2006/08/13(日) 10:12:52ID:Iw16Wg/m結局わかんないんですか?
都合悪くなるとボランティアですか?
postgre厨房はレベル低いんですね
それにしても長い風呂ですね
0717NAME IS NULL
2006/08/15(火) 11:38:37ID:???3日くらい風呂に入らせろよ
0718NAME IS NULL
2006/08/19(土) 14:18:52ID:tjESA4/Iそんなに長くはいっててだいじょうぶか、
はやく風呂からでろよw
0719NAME IS NULL
2006/08/20(日) 20:44:32ID:???0720NAME IS NULL
2006/08/20(日) 22:10:19ID:+/ksKYrMpg_dumpを実行すると
schema with OID 5118787 does not exist
こんなエラーが出てバックアップできなくなってしまいました。
パラメータ変えても同じエラーがでます。
vacuumdbしてもかわりません。
バックアップできないだけで、その他は正常に動いているようなのですけど。
同じ症状でDB崩壊の予兆なんていう不気味な書き込みもありましたが、
直し方ご存知の方おりましたら教えてください。
0721NAME IS NULL
2006/08/21(月) 11:16:12ID:???schema だけと、データだけをダンプするとどうなる?
--schema-only と --data-only ね。
0722720
2006/08/21(月) 12:17:29ID:iNhabLLZレスありがとうございます。
早速やってみましたところ、
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からやりました。
0723720
2006/08/21(月) 12:30:56ID:iNhabLLZ0724720
2006/08/21(月) 12:49:04ID:iNhabLLZ連続の書き込みごめんなさい。
レンサバの管理者に連絡したら、3日前のバックアップが
あるということなので、被害が広がらないうちにこれで
復旧することにしました。
本当は今の状態から復旧できるのがありがたいのですが、
>>721番さん、助けてくれてありがとうございました。
0725NAME IS NULL
2006/08/21(月) 14:09:22ID:???0726NAME IS NULL
2006/09/05(火) 19:04:20ID:???それ、スキーマの大文字、小文字を区別してることに気が付かなかったとかじゃ…。
0727NAME IS NULL
2006/09/11(月) 04:32:56ID:???最近、会社に行く前に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の間の売り上げが一番よかった日を探すことなども可能でしょうか?
使えそうな関数など教えていただけないでしょうか
よろしくお願いいたします
0728NAME IS NULL
2006/09/11(月) 05:00:20ID:???# SELECT '2006-09-11'::DATE + '-1 days'::INTERVAL AS from_date;
from_date
---------------------
2006-09-10 00:00:00
(1 row)
あとは副問い合わせと組み合わせてどうぞ。
0729NAME IS NULL
2006/09/11(月) 05:05:05ID:???ありがとうございます
とても参考になります
早速いろいろ実験してみます
0730NAME IS NULL
2006/09/11(月) 16:34:15ID:???0731NAME IS NULL
2006/09/12(火) 19:43:59ID:HfcoGY8n文字列型、日付型の両方のカラムにもインデックスは作成しています。
原因か対処方法をご存知の方がいらっしゃいましたらご教授願います。
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万件のテーブルから数件を取り出すのに、数分待っても応答無し)
0732NAME IS NULL
2006/09/12(火) 23:39:08ID:???0733731
2006/09/13(水) 13:34:07ID:???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しても両者とも全く同じです。
スレ汚しすいませんでした。
0734NAME IS NULL
2006/09/13(水) 13:56:38ID:???0735NAME IS NULL
2006/09/13(水) 13:57:27ID:???>違うインデックスが使われていた
んじゃなくて、seq scan だったんだろう
0736NAME IS NULL
2006/11/16(木) 17:28:57ID:???GRANT ALL ON * TO user;
の様なことが出来れば良いんですけど・・・
0737NAME IS NULL
2006/11/24(金) 17:49:29ID:HZFCZlioEUCで作成した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)です。
0738NAME IS NULL
2006/11/24(金) 18:00:19ID:???日本語でおk
投げているクエリの文字コードが
EUC以外の”ある文字コード”で統一されているのなら、
set client_encoding to 'ある文字コード'
を事前に投げる。これでだめか?
取得時も同じことすれば、元に戻る。
そういうことを言ってるんじゃないなら、スルーよろ。
0739NAME IS NULL
2006/11/24(金) 23:22:38ID:???データは以下のようなものでこれを(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とかになりますよね?)
0740NAME IS NULL
2006/11/25(土) 03:12:46ID:???>例えばAさんが4つのデータ、Bさんが6つのデータを同時に入力しよう
PHP5ってことだから、Webサイト(HTTP)で一度のリクエストでそれぞれ4つ/6つってことだろうか?
それなら、テーブルロックなりファイルロックなりで排他的に処理すれば済む。
しかし、serialで連番を維持しようとするのはどうかなと。トランザクションをROLLBACK
させた場合でもシーケンスは元に戻らないし、削除すると当然空き番になる。
0741NAME IS NULL
2006/11/25(土) 15:29:27ID:???返事が遅くなりましたが、書かれた事を調べました。
なるほど、PHPで適当なファイルを作成して
ファイルロックを使えば良いというわけですね。
ちょっとスレ違いですがこんな感じでよろしいですかね?
$filep = 〜/lock.txt;
$fp = @fopen( $filep, "r+" );
@flock($fp,LOCK_EX);
=======================
sql関連の処理
=======================
flock($fp,LOCK_UN);
fclose( $fp );
・・・で後はlock.txtが存在するかどうかといった条件を
作ればよいというわけですね。
連番の維持に関しては入力後に変更や削除するようなデータではないですし、
番号も処理毎にまとまっていれば問題ないので大丈夫だと思います。
色々とありがとうございます。勉強になりました。
0742NAME IS NULL
2006/11/25(土) 16:34:17ID:eQzXrEm9EUC以外の”ある文字コード”で統一されて「いない」
カラムなのです・・・
(たとえば掲示板の書き込みのように URLぺたっと
張られるようなイメージ)
なので、入れるときも、出すときもEUCで放りこみたいんですが・・
無理なんですかねぇ・・・
PostgreSQL側でのチェックとか外せないのかな・・・?
0743NAME IS NULL
2006/11/25(土) 19:06:20ID:???Binary型みたいのに放りこめばいいんじゃねぇ?
0744NAME IS NULL
2006/11/27(月) 23:42:45ID:s994NHnA0745NAME IS NULL
2006/11/28(火) 12:28:38ID:???それはテキスト型とは言えないだろう。
入れたものをそのまま取り出したいなら、BYTEA型にしとけ。
0746NAME IS NULL
2006/11/28(火) 16:31:26ID:???INSERTするときプログラムで文字コード判定して
EUCにエンコードしてから
いれりゃいいんじゃね?
0747NAME IS NULL
2006/11/29(水) 18:35:38ID:???ですが、結構運用的に無理があったりしますかね。
0748NAME IS NULL
2006/11/29(水) 20:55:27ID:???インデックスを適切に(ry
0749NAME IS NULL
2006/11/29(水) 23:27:04ID:???サポ逃げできるけどなぁ・・・
運用してるとこもあるだろうが、専門タスクチームとか
あるんじゃねぇかなぁ・・・
ちなみに俺が今やってるのはレン鯖なこともあり高々15万件だが
PHPのレスポンスは2秒強掛かってる
0750NAME IS NULL
2006/11/29(水) 23:27:48ID:???0751NAME IS NULL
2006/11/30(木) 03:05:15ID:???フルスキャンにしては速いし。
うちは初代Mac miniと8.1.3で300万件に50ms。
0752NAME IS NULL
2006/11/30(木) 09:37:30ID:???まてまてポスグレのselectではなく、
phpからのレスポンスだぜ。
あと糞サーバーはPenIII
0753NAME IS NULL
2006/11/30(木) 11:58:55ID:???サポ逃げ無理でしょ
0754NAME IS NULL
2006/12/03(日) 18:13:24ID:htuJP6z10755NAME IS NULL
2006/12/04(月) 23:02:25ID:z1fFmR6L0756NAME IS NULL
2006/12/05(火) 13:07:14ID:???とりあえず create temp tabme したら
0757NAME IS NULL
2006/12/05(火) 13:49:41ID:???RC1でなくて?
0758NAME IS NULL
2006/12/05(火) 14:11:09ID:???FTPサーバにはあるみたいだね。とりあえず、configure;makeまでやった。
0759NAME IS NULL
2006/12/05(火) 16:22:08ID:???まあダンプして無いけどテストで作ったやつだけだし、このまま続けてみるか。
0760NAME IS NULL
2006/12/11(月) 05:12:15ID:???いいやり方などないでしょうか?
0761NAME IS NULL
2006/12/11(月) 13:23:10ID:???最近、DBの設計の本を読んでいてふと思ったことがあります。
私の会社(ウェブ系)のDBは文字コードにEUCを使っていて、最終的なページの出力をShiftJISでやっています。
出力のアプリケーションはPHPで作ってあるのですが、
PHPの内部エンコーディングがEUCで、出力がShiftJISだと、
テンプレートの文字コードはEUCで
宣言がShiftJISにするという、非常に分かりづらい仕様になっております
で、自分のサイトはそんな面倒なことにならないよう、モバイル以外は文字コードをUTF-8に統一しちゃおう思っていたのですが
UTF-8にすると、日本語のレコードを大量に登録すると、EUCなどを使った時と比べて、容量が1.5倍
(数字は微妙に違うかな?あんまり自身ありません)になりますよね?
ということは、メモリにキャッシュできる量も、減ると…
どうなんでしょう?
なるべく変換しないですむようにしたいのですが
みなさん、文字コードはどうしていますか?
UTF-8でも実際は気にするほど容量は増えないのでしょうか?
現実問題として、携帯も含めShiftJISが主流なので、全部ShiftJISに統一しちゃうのはどうなのでしょうか?
なんか、理由は良く分かりませんが「ShiftJISはやめれ」みたいな意見を見たことがあるのですが…
アドバイスお願い致します。
長文失礼しました
0762NAME IS NULL
2006/12/11(月) 13:27:45ID:???性愛の快楽に胎内を晒したノワールは、その余韻に身体を預け、リオスの上に馬乗りになったままじっとしていたが。
リオスの性欲は、まだ衰えない。今や性欲に正直になったリオスは、火照った顔で大きく息をするだけのノワールごと、身を回転させた。
「あ…」
ノワールが、やっと、そう声を絞り出した時には、立場は逆になっていた。今度上になっているのは、リオスだ。
リオスはノワールに覆いかぶさるようにして、ノワールの性愛に潤んだ瞳を見入っている。
「ノワールさん、いや、ノワール…今度は僕が、君を気持ちよくさせてあげたい…」
「リオスさ…」
ノワールが何か言おうとしたが、その唾液でてらてら光る桜色の唇をリオスは奪い、言葉をも奪ってしまう。
積極的に舌を入れてくるリオス、その舌の動きはぎこちなかったが、ノワールは彼を必死に持ち上げるように、助けるように、舌を絡めてあげる。
「ん…にゅ…んむ…」
じゅるじゅると唾液の絡み合う、淫靡な水音を漏らす二人。そうしながらリオスはノワールの胸を服の上からまさぐりながら、腰を動かし始めた。
「ん…! んん…!」
胸と陰部の性感を当てられるノワールは、舌でふさがれた口から、桃色の喘ぎをもらす。その可愛らしい声にリオスは更に欲情し、貪るように唇を触れ合わせる。
長い長いディープキスを終えた二人は、静かに糸引く唇を引き離した。
はぁはぁと豊かな胸を思い切り揺らしながら呼吸するノワール、その瞳がまだまだ潤んでいるのをみると、リオスはたまらなくなった。
ノワールの服のボタンを外し、彼女の上半身を露にしてゆく。やがて黒いブラジャーが現れると、その谷間に顔を埋め、滑らかな皮膚に口付けした。
「ぁん…」
感じて声をあげるノワール。その一方でリオスの腰の動きが、次第に激しくなってゆく。
優しく噛み付くように乳房の皮膚を味わうリオス。ノワールの中でも性に盛るサキュバスの本能に次第に炎がともっていった。
「ぁん…リオスぅ…もっと、もっと、頂戴、もっと、もっとぉ…」
すっかり雌の喘ぎを上げるノワール。それを耳にしたリオスは彼女の願いをかなえようと、状態を起こし、彼女の形のよい豊かな双丘を優しく掴んだ。
そしてもみもみと弄り回しながら、腰を大きく動かしてゆく。
「いい、いい、いいの、リオスさぁん…」
リオスの動きはぎこちなかったが、ノワールは自分の腰も揺り動かして、彼を助ける。
再び淫靡なじゅぷじゅぷという水音が接合面から響いてゆく。その一方でリオスは勃起したノワールのピンクの乳房を弄り、つねあげた。
「ぁ…そこ、だめぇ…」
すっかり上気した艶やかで可愛らしい顔が、心にもない拒否の声をあげる。リオスは何をしてほしいか悟り…口を乳房に近づけ、優しく噛んだ。
「ひゃんっ!」
望む行為を手に入れたノワールは唾液が行く筋も糸を引く口を大きく開いて、叫んだ。
リオスは腰を更に強く動かしながら、貪るように乳房を含み、噛み、舌でちろちろと嘗め回す。その動作はだんだん激しさを増してゆき…
「いやぁあああああんっ!」
ノワールが、達した。膣がさらにぎゅぅっと痙攣するように男根をしめつけ、生暖かい愛液をぶちかける。
びくびくびく、とノワールの腰は大きく動き、リオスの男根を刺激する。
リオスはこの快楽を余さず味わおうと、素早く乳房から口を離すと、完全にノワールに馬乗りになり、大きく男根の抜き差しを始めた。
まで読んだ
0763NAME IS NULL
2006/12/11(月) 13:44:13ID:???種馬ディープインパクトが羨ましい
まで読んだ
0764NAME IS NULL
2006/12/11(月) 18:30:57ID:???UTF-8が使えるならいかなる犠牲を払ってでも使うべし。
シフトJISは悪魔のコード系。
0765NAME IS NULL
2006/12/11(月) 18:44:25ID:???容量なんて気にしない。半年もすれば改善される。
0766NAME IS NULL
2006/12/11(月) 18:46:48ID:???0767NAME IS NULL
2006/12/11(月) 21:42:15ID:???0768NAME IS NULL
2006/12/11(月) 21:59:38ID:???0769NAME IS NULL
2006/12/11(月) 22:31:06ID:???0770ココ電球(∩T∀T) ◆tIS/.aX84.
2006/12/11(月) 23:07:59ID:3tBKtZRsユニコード問題でぐぐれ
0771ココ電球(∩T∀T) ◆tIS/.aX84.
2006/12/11(月) 23:10:06ID:3tBKtZRsコネクションで変換してクライアントもサーバーも内部は勝手なコーディングで組むのが普通。
なんでごっちゃになるのか判らん
0772NAME IS NULL
2006/12/11(月) 23:56:19ID:???コテハンもたいていキチガイ
0773NAME IS NULL
2006/12/12(火) 10:55:18ID:???Webprogの板でもいけば
0774NAME IS NULL
2006/12/14(木) 07:10:03ID:???kojin_dateというデータベース内のmeiboというテーブルに格納されているIDに当てはまるユーザーのみ、ログインを許可したいのですが
<?php
if (!isset($_SERVER["PHP_AUTH_USER"])) {
header('WWW-Authenticate: Basic realm="My Page"');
header('HTTP/1.0 401 Unauthorized');
require("error.html");
exit;
} else {
$id = $_SERVER["PHP_AUTH_USER"];
$passwd = sha1($_SERVER["PHP_AUTH_PW"]);
$db = pg_connect("dbname=kojin_date") or die("<P>データベースに接続できませんでした。</P>");
$sql = "SELECT * FROM meibo WHERE id=$id;";
$result = pg_query($db, $sql);
$num = pg_num_rows($result);
if ( $num < 1 ) {
// データベース上に該当するIDがない
echo <<<_END_OF_DATA_
〜中略〜
だとエラーが出てしまいました…自分としては、『$sql = "SELECT * FROM meibo WHERE id=$id;";』の部分が
正しくないのかなと考えているのですが…
長文ですみませんが、アドバイスお願い致します。
0775NAME IS NULL
2006/12/14(木) 07:59:39ID:???どんなエラーが出たのかぐらい書いたら?
0776NAME IS NULL
2006/12/14(木) 08:03:14ID:???$sql = "SELECT * FROM meibo WHERE id='$id';";
まぁ、SQLインジェクションされ放題なのは黙っておく。
0777NAME IS NULL
2006/12/14(木) 08:24:49ID:???ありがとうございます!そこを直しただけで上手くいきました!
0778NAME IS NULL
2006/12/14(木) 09:50:54ID:???それをpsql等で直打ちしてみるといいよ
0779NAME IS NULL
2006/12/14(木) 19:45:52ID:???「'; DELETE from meibo A='A」というユーザ名でログインを試みてみよう。
0780NAME IS NULL
2006/12/14(木) 22:20:43ID:xF0YDAWZいただいたものです。
正確には900万件となり、下記のようなシンプルなテーブルを構築
いたしました。
no | flag
--------------
12345 | 1
67890 | 0
11111 | 1
:
create index table_idx on table(no);
でインデックスをはり、selectで実行速度を測ってみたのですが、where
指定で1件のnoを抽出するまでにおよそ1分を要してしまいました。
これはもうチューニング等を行ってパフォーマンスを高めるしか方法は
ないのでしょうか。
テーブルを10分割くらいにし、分散化されるのであればそうしてみようか
とも考慮しておりますが、何か一番効率的な方法があればどうかご教示ください。
すみませんが宜しくお願いいたします。
0781NAME IS NULL
2006/12/14(木) 22:28:28ID:???インデックスを張った後に ANALYZE した?
0782NAME IS NULL
2006/12/14(木) 23:01:44ID:???PostgreSQLのバージョンとテーブル定義のデータ型は?
0783NAME IS NULL
2006/12/14(木) 23:06:54ID:???あと、今度の Vista とか。諸兄はどう対応する?
0785NAME IS NULL
2006/12/14(木) 23:38:10ID:???vacuumdbは1日に1回行ってましたが、私はてっきりこの中に
analyzeオプションが含まれているものだと思ってました。。
これからオプション付きで実行し、追って結果をご連絡させて
いただきます。
また、今後は vacuumdb --analyze db としてcronに設定する
ことにいたします。ご教示有難うございます。
>>782
バージョンは7.4.10で、データ型は、noが桁数可変のためtext、
flagがchar(1)です。
早急なご返答感謝いたします。
0786NAME IS NULL
2006/12/15(金) 01:29:00ID:???where no = 12345 とかやってない?
where no = '12345' とか where no = '12345'::text
とすると速くなったり
0787NAME IS NULL
2006/12/15(金) 10:45:24ID:???0788780
2006/12/15(金) 17:21:43ID:???原因は、私がvacuumdbのデフォルトをvacuumdb --fullと同義であると
勘違いしていたため、analyzeされていなかったという馬鹿さ加減でござ
いますが、一つ勉強になり、本当に感謝しております。
最後に経過報告といたしまして、EXPLAINの結果を以下に記載させて
いただきます。
この場をお借りし御礼申し上げます。
db1=> EXPLAIN select count(*) from no where no='12345678';
QUERY PLAN
---------------------------------------------------------------
Aggregate (cost=0.01..0.01 rows=1 width=0)
-> Seq Scan on no (cost=0.00..0.00 rows=1 width=0)
Filter: ("no" = '12345678'::text)
(3 rows)
↓ ↓ ↓
db1=> EXPLAIN select count(*) from no where no='12345678';
QUERY PLAN
-------------------------------------------------------------------------
Aggregate (cost=6.02..6.02 rows=1 width=0)
-> Index Scan using no_idx1 on no (cost=0.00..6.01 rows=2 width=0)
Index Cond: ("no" = '12345678'::text)
(3 rows)
0789NAME IS NULL
2006/12/16(土) 12:37:32ID:???0791NAME IS NULL
2006/12/17(日) 09:49:42ID:???あのパラメータ設定が正直謎すぎる。
0792NAME IS NULL
2006/12/18(月) 13:36:48ID:???一応postgresql.confのlog_line_prefix = '%r'にしてIPアドレスを出力させるようにしたんですけれど
SSHからのpsqlコマンドによるセッション、
WebアプリからのTCP/IPによるセッションともにlocalhostもしくは127.0.0.1表示になってしまって
IPアドレスを出力させる意味があまりない・・・
実際のユーザのIPアドレスを残したいんですが、Postgresqlの機能では無理なんですかね。
Webアプリ側からユーザのIPアドレスをDBに渡すとかしないとダメ?
0793NAME IS NULL
2006/12/18(月) 13:50:40ID:???そう思います
0794NAME IS NULL
2006/12/19(火) 02:05:14ID:???0795NAME IS NULL
2006/12/19(火) 02:08:00ID:???0796NAME IS NULL
2006/12/21(木) 18:13:29ID:6ZyxnkZ3今、postgres8.2.0とpgpool2 1.0.1の環境で、普通の処理はまったく問題ないのですが、フィールドtextに対して、かなり長い値を設定し、insertやupdateを発行するとうまく更新されないのです。
こんな現象がおきているのは私だけなんでしょうか?
0797NAME IS NULL
2006/12/21(木) 18:14:40ID:6ZyxnkZ3ちなみに、pgpoolを経由しないと、問題なく登録、更新はできました。
0798NAME IS NULL
2006/12/21(木) 18:19:17ID:???0799NAME IS NULL
2006/12/21(木) 20:21:02ID:6ZyxnkZ3調べましたが、どんな文字でもダメでした。。。
すごく長くすると、エラーさえも起きずに固まります。
unexpected EOF on client connection
とエラーがでているので、pgpoolでつかんだままなのかも知れないのですが、なにか解決方法はあるのでしょうか?
0800NAME IS NULL
2006/12/21(木) 21:38:01ID:???あとはpgpoolのログってとれない?
0801NAME IS NULL
2006/12/25(月) 16:26:08ID:???[pgsql-jp: 37852] Re: LIKE句による前方一致検索のエラー(invalid memory alloc request size)
0802NAME IS NULL
2006/12/25(月) 16:37:49ID:???0803NAME IS NULL
2006/12/25(月) 19:36:46ID:???勝手な思い込みで設定する輩が
たまにいるみたいよwww
0804NAME IS NULL
2006/12/25(月) 21:09:41ID:???0805NAME IS NULL
2006/12/25(月) 22:03:16ID:???日本限定でな
0806NAME IS NULL
2006/12/31(日) 02:09:07ID:???PHPでPostgresを使うときは、
PHPのインストールオプションで、--with-pgsql=/usr/local/pgsql とか
と付けるけど、
Postgresが別のサーバに有る場合は、
/usr/local/pgsqlが無いから--with-pgsql=/usr/local/pgsqlオプションが
付けられない、その場合は、どうやってPHPからPostgresに繋げる
オプションをつけたらいいの?
Aサーバ:Postgresが入っている。
Bサーバ:PHPが入っている。
BサーバからPHPでAサーバのPostgresにつなぎたい;−;
PHPのオプションはどんなのつければいいの?
0807NAME IS NULL
2006/12/31(日) 04:19:57ID:???/usr/local/pgsql/lib とか include/ のディレクトリにあるファイルを必要とするから
動かすどころかインストールする必要はないけど、Bサーバでビルドする必要はある。
バイナリパッケージでpostgresql-libなんてのだけ入れる手もある。
そんときは指定ディレクトリ先が変わるけど、ひょっとしたら--with-pgsql だけで
見つけてくれるかもしれない。(やったこと無い)
よくワカランかったら、インストールまでして今まで通りのオプションをつければいいんじゃね。
0808NAME IS NULL
2006/12/31(日) 10:34:06ID:7k+gGJn4PostgreSQLで日本語問題を解決しようと
このスレの>>42-47を参考にして
initdb --encoding=EUC_JP --no-locale
としましたが、実際にpg_settingsを覗いてみると
クライアント/サーバのエンコーディングはSQL_ASCII、
lc_*はja_JP.eucJPのままとなっています。
initdb実行は正常に行えたと思います。
lc_messages〜lc_timeはpostgresql.confをいじれば良いかと思いますが、
その他のパラメータに関してはどのように設定したら良いのかわかりません。
また、この件(PostgreSQLの日本語問題)について
詳しく記載されているサイトなどありましたら教えて頂けないでしょうか?
よろしくお願いします。
0809808
2006/12/31(日) 10:36:05ID:7k+gGJn4PostgreSQLのバージョンは7.4.13で
CentOSでrpmのものをインストールしました。
0810ココ電球(∩T∀T) ◆tIS/.aX84.
2006/12/31(日) 12:02:16ID:+YaIr0XC0811NAME IS NULL
2006/12/31(日) 13:13:11ID:???消してつくり直してみては
0812NAME IS NULL
2006/12/31(日) 18:13:50ID:???ありした〜
Postgresをインストールする方法で
接続することができました。
0813 ̄ ̄ ̄ ̄ ̄V ̄ ̄ ̄ ̄ ̄ ̄
2007/01/02(火) 03:13:34ID:???,. -ー冖'⌒'ー-、
,ノ \
/ ,r‐へへく⌒'¬、 ヽ
{ノ へ.._、 ,,/~` 〉 } ,r=-、
/プ ̄`y'¨Y´ ̄ヽ―}j=く /,ミ=/
ノ /レ'>-〈_ュ`ー‐' リ,イ} 〃 /
/ _勺 イ;;∵r;==、、∴'∵; シ 〃 /
,/ └' ノ \ こ¨` ノ{ー--、〃__/
人__/ー┬ 个-、__,,.. ‐'´ 〃`ァーァー\
. / |/ |::::::|、 〃 /:::::/ ヽ
/ | |::::::|\、_________/' /:::::/〃
0814NAME IS NULL
2007/01/05(金) 20:20:48ID:mthSBstDCentOSにてPostgreSQL 7.4.13を動かしているのですが、クラッシュしてしまいました。
dataフォルダを 救出することは出来たのですが、これを再構築したサーバに、コピーして
使用することは出来ますでしょうか? /var/lib/pgsql/data を上書きしたのですか
起動することが出来ませんでした。
何か気をつける事とか、ありますでしょうか?
0815ココ電球(∩T∀T) ◆tIS/.aX84.
2007/01/05(金) 22:56:40ID:+zslfGUnバックアップデーターとってないの?
0816ココ電球(∩T∀T) ◆tIS/.aX84.
2007/01/05(金) 22:57:49ID:+zslfGUnhttp://www.kenti.jp/dat/2005/03/postgresqldb.html
PostgresのDBをバックアップし、その後復旧する方法です。
(._.) φ メモメモ
バックアップ方法
(postgresqlは起動した状態にしておく)
% pgdumpall > backup.db
復旧方法
(postgresqlを起動し、initdbだけしておく)
% psql -e template1 < backup.db
復旧時の注意点は、やっぱり -e をつけないとだめなようです。
0817814
2007/01/06(土) 08:38:26ID:WKYcCNZ9詳細な復旧方法ありがとうございます。本来なら常にこのような
方法でバックアップをとっておくべきだったのですが。。。
クラッシュした方のpostgresが立ち上がらない状況なので
以下のリンクの一番目の復旧方法を試みてました。
http://www.hizlab.net/app/pgadmin.html
0818NAME IS NULL
2007/01/06(土) 11:22:48ID:???OSやCPUもあわせないとならんと思うけど
0819NAME IS NULL
2007/01/06(土) 11:55:00ID:1ae5baRY1981から1983の間にK谷市H陽中にてM畑44Xの
7某上野家系泰市の子泰和とその仲間たちは
6あらゆる身障者と差別されやすい容姿や身体的特徴
4のある人を化け物呼ばわりし、
0第三者の視線が外れると裏顔をあらわし
2弱者に対しては豹変しキチガイやくそたれなどの人に向けてはいけない
6言葉を交えた恫喝、罵倒を行う
社会的弱者や負組が特に嫌いで死ねばいいと度々発言している
こういう類は親族ともども不幸とは無縁の
社会的信用を得たお金持ちの生活をしている
0820NAME IS NULL
2007/01/06(土) 17:43:25ID:???SQL は
SELECT * FROM a_table WHERE id IN (SELECT id FROM b_table...)
のような感じで、副問い合わせの SELECT 単体では瞬時に 8 件結果が得られます。
IN (...) の部分にその 8 件の id を列挙すると全体としても瞬時に結果が得られるのです。
毎日 vacuumdb --analyze --all はしています。
8.2 で新たに何か設定しないといけないものなのでしょうか?
0821NAME IS NULL
2007/01/06(土) 18:31:39ID:???0822NAME IS NULL
2007/01/06(土) 18:59:22ID:???explain しろってのは分かるのですが、この程度の簡単な SQL が
バージョンアップすると劇遅になるのが不可解なのです。
この程度の SQL でチューンが必要な DB になりましたか。
0823NAME IS NULL
2007/01/06(土) 19:06:13ID:???0824NAME IS NULL
2007/01/06(土) 22:33:38ID:???http://archives.postgresql.org/pgsql-general/2006-12/msg00864.php
とりあえず 8.1.5 に戻してみようと思う。
0825NAME IS NULL
2007/01/06(土) 22:47:41ID:???>起動することが出来ませんでした。
サーバから、何かメッセージなり、ログなり出てませんか?
0826NAME IS NULL
2007/01/06(土) 23:40:07ID:???0827NAME IS NULL
2007/01/07(日) 01:21:05ID:???http://itpro.nikkeibp.co.jp/article/COLUMN/20061225/257728/
とかを見ると IN の問い合わせは速くなってるはずなんですけどねぇ。
0828NAME IS NULL
2007/01/07(日) 17:02:41ID:???なったっつうか、Postgresは昔っからそうだよ。
商用製品じゃないからOracleみたいに互換モード用意しろとは言わないけど、
いまだにプランナの特性がころころ変わるから困ったもんだ。
プランナが最適な実行計画を選択しくれないケースではたいがいHashJoinを
選択しているから、enable_hashjoinをon/offしてコストを求めてみて、IndexScan+
NestedLoopの方がHashJoinよりコストが低くなるよう、*_costを調整しろ。
#デフォルト値はディスク能力の高いサーバー機向きではないっぽい。
そうやって最適値を求めても、場合によってはバージョンアップでまた求めなおす
必要があったりするわけだけどね。
0829NAME IS NULL
2007/01/07(日) 17:24:42ID:???0830NAME IS NULL
2007/01/07(日) 17:57:12ID:???0831NAME IS NULL
2007/01/07(日) 18:05:22ID:???0832NAME IS NULL
2007/01/07(日) 20:19:39ID:???>>828
ありがとうございました。
ちなみに 8.2.0 では Hash IN Join で 8.1.5 では Nested Loop になってました。
他にもパフォーマンスが劇的に劣化している例があるようなので 8.2.1 を待ってみます。
0833ココ電球(∩T∀T) ◆tIS/.aX84.
2007/01/08(月) 00:20:54ID:bQTUi6zK誰か直して
0834ココ電球(∩T∀T) ◆tIS/.aX84.
2007/01/08(月) 00:22:38ID:bQTUi6zK0835NAME IS NULL
2007/01/08(月) 18:07:50ID:???* Fix planner mistakes for outer join queries (Tom)
* Fix several problems in queries involving sub-SELECTs (Tom)
ってあるけど
0836NAME IS NULL
2007/01/08(月) 18:16:01ID:???お、まじですか。昨日はなかったはずなんだけど。
早速試して報告します。
0837NAME IS NULL
2007/01/08(月) 18:49:48ID:???8.1.5 に戻ります。
0838NAME IS NULL
2007/01/08(月) 19:34:26ID:???0839NAME IS NULL
2007/01/09(火) 15:14:18ID:???本家 ML では同様の報告を見掛けるのに
日本の ML でパフォーマンス劣化の話は見たことありませんね。
皆さん 8.2 系使ってないのかな?
今回の問題を開発者に出来れば日本語でフィードバックしたいんだけど
どうすれば良いものでしょうかね。
ML 等の不特定多数宛に情報を流すのは避けたいのですが。
せめて Bugzilla レベルのものはないのでしょうか?
0840NAME IS NULL
2007/01/09(火) 16:36:23ID:???0841NAME IS NULL
2007/01/09(火) 19:40:15ID:???日本のMLに投げれ。きっと誰かが英訳してくれる。
0842ココ電球(∩T∀T)y-~~~~ ◆tIS/.aX84.
2007/01/09(火) 20:10:27ID:EnJ2TtdZ0843ココ電球(∩T∀T)y-~~~~ ◆tIS/.aX84.
2007/01/09(火) 20:12:54ID:EnJ2TtdZアナライズかけたん?
0844NAME IS NULL
2007/01/09(火) 21:50:23ID:NMxA2CQg0845NAME IS NULL
2007/01/09(火) 22:33:48ID:???8.3が出るまで待てってことだ。
0846NAME IS NULL
2007/01/10(水) 00:31:30ID:T8inmjPDま、あと半年くらいで8.3出てくるからなあ
0847NAME IS NULL
2007/01/15(月) 09:00:24ID:tMwB6TgS結果としては次のようなものを期待しています。
データ
id name
----------
1 hoge
2 hogehoge
3 hoge
4 saitama
SQL文の結果
name
-----------
hoge (1)
hogehoge (2)
saitama (1)
件数はあってもなくてもかまわないです。
以上よろしくお願いします。
0848NAME IS NULL
2007/01/15(月) 09:16:20ID:???これなら分かるんだが。。。
hoge (2)
hogehoge (1)
saitama (1)
>件数はあってもなくてもかまわないです。
゚Д゚)ハッ!
select name,count(*) from table group by name
0849NAME IS NULL
2007/01/15(月) 22:50:28ID:???0850NAME IS NULL
2007/01/16(火) 10:32:48ID:???tb_sampleテーブルのカラム名に
DATA_NO
data_no
というのがあり
のように大文字小文字を意識しないとDBにSQLを投げた時点で怒られてしまいます。
X:SELECT DATA_NO FROM tb_sample
◎:SELECT data_no FROM tb_sample
◎:SELECT "DATA_NO" FROM tb_sample
テーブルは大文字小文字意識する必要があったと思うのですがカラムは準拠するSQLの規格からして関係なかったように思いますが・・・
やっぱり、カラムも大文字小文字意識しないといけないのでしょうか?
0851NAME IS NULL
2007/01/16(火) 11:20:20ID:???> tb_sampleテーブルのカラム名に
> DATA_NO
> data_no
> というのがあり
これ、大小が違うだけなんだよね?
0852NAME IS NULL
2007/01/16(火) 12:00:29ID:???2バイト文字ではないです
あくまで半角英数のみになっています。
その上で大小が違うということです。
0853NAME IS NULL
2007/01/16(火) 12:03:34ID:???の補足です。
言い回しが悪かったです。
//以下修正
tb_sample1テーブルのカラム名に
DATA_NO
tb_sample2テーブルのカラム名に
data_no
というのがあり
のように大文字小文字を意識しないとDBにSQLを投げた時点で怒られてしまいます。
X:SELECT DATA_NO FROM tb_sample1
◎:SELECT data_no FROM tb_sample2
◎:SELECT "DATA_NO" FROM tb_sample1
//ここまで修正
すいません、同一テーブルに同名のカラムが存在しているように見られていたことに今気づきました。
0854NAME IS NULL
2007/01/16(火) 13:09:21ID:???create tableんときに"DATA_NO"ってくくったんじゃない?
くくると大小を区別し、くくらないと小文字と同じになるような
0855NAME IS NULL
2007/01/16(火) 13:17:26ID:???やっぱそういうことになりますよね?
で、問題は確か準拠してるSQLの規格がカラムの大文字小文字を問わない奴だったようなきがしたから聞いてみたかったんです。
まぁ、大文字小文字を区別するのであればソフトからの利便性考えて小文字にしようかなと・・・
0856NAME IS NULL
2007/01/16(火) 13:55:03ID:???0857NAME IS NULL
2007/01/17(水) 13:23:56ID:???アーーーッ orz
ありがとう、めちゃくちゃその一言で救われた
0858NAME IS NULL
2007/01/22(月) 07:29:51ID:aHLhnF6zUNICODEをつけてもインストール後の初期のDBはEUCになってしまいます。
initdbのときもオプションつけないとEUCに。。
(-E UNICODEつけるとUNICODEにはなる)
なんでですかね?デフォルトロケールをUNICODEにしたい。
0859NAME IS NULL
2007/01/28(日) 00:56:19ID:???文字コードによるバイト差とか気にしなくてOKですか?
0860859
2007/01/28(日) 01:02:05ID:94XmzyhW「text は最大文字数を指定する必要がありません。また、char、varchar に比べて効率が良いので、文字列を扱う場合は text の使用が勧められています。」
と書いてあるサイトを見つけたのですが、これってあってます?
文字列型は全部textでつくちゃって何か問題ないのでしょうか?
たとえばよけいな容量をくうとか、遅くなるとか・・・(根拠は何もないけど)
0861NAME IS NULL
2007/01/28(日) 01:50:52ID:???文字数。バイト差は気にしなくて桶
>>860
文字数チェックとかパディングとか余計なことしなくていい分
text型の方が速いんじゃね。
また、バイト数じゃなくて文字数なんだから、charにしろvarcharにしろ
INSERTされるまで何バイトか判らないので、text型に比べ容量効率がいいとも思えない。
結局
varvhar = 文字数チェック付きtext
char = 文字数チェック+パディング付きtext
って俺の中で結論つけて、検証すらやってねぇ。
0862NAME IS NULL
2007/01/28(日) 02:20:36ID:???文字数になったのは7.2からだからね。
http://osb.sraoss.co.jp/PostgreSQL/7.2/changes.html
0863859
2007/01/29(月) 23:47:47ID:JCUg+EpF>>862
遅くなりましたが
レスどうもありがとうございます。
考えるの面倒だから^^;
TEXTにして、もし必要なら後で入力のバリデートで文字数制限してみます。
まあ、後でデータ型の変更も8以降ならわりと簡単にできそうですけど
0864NAME IS NULL
2007/01/31(水) 13:42:19ID:EuNAQDjkプログラム版から誘導されてきました。
店テーブルと商品テーブルとお互いのIDを主キーにしたラインナップテーブルがあったとして
例えば商品4を扱っている店とその店が扱っている全ての商品を下のような形の配列で取得したいです。
[0]=>
[shop_id] => 1
[shop_name] => 店1
[item] => Array
[0] => Array
[item_id] => 1
[item_name] => 商品1
[2] => Array
[item_id] => 3
[item_name] => 商品3
[3] => Array
[item_id] => 4
[item_name] => 商品4
[1]=>
[shop_id] => 3
[shop_name] => 店3
[item] => Array
[0] => Array
[item_id] => 4
[item_name] => 商品4
[2]=>
[shop_id] => 6
[shop_name] => 店6
[item] => Array
[0] => Array
[item_id] => 1
[item_name] => 商品1
[1] => Array
[item_id] => 4
[item_name] => 商品4
こんな感じの多重配列を取り出したいのですが、
今のところ、一回、店テーブルから商品4を扱っている店の列を取り出した後
その配列をまわしてもう一度ラインナップテーブルにSELECTを発行して
上のような配列を得ています。
プログラム版で「内部的なSELECT回数は別としてSQL一発でいける」といわれたのですが
どのようなSQLでいけるのでしょうか?
GROUP_CONCAT()という関数を使うという話もありましたがこの関数postgreにはないですよね?
postgreでは一発で取り出せないのでしょうか?
お願いいたします。
0865864
2007/01/31(水) 13:47:39ID:???店データの中に商品の配列がある状態です。
[shop_id] => 1
[shop_name] => 店1
[item] => Array
[0] => Array
[item_id] => 1
[item_name] => 商品1
[2] => Array
[item_id] => 4
[item_name] => 商品4
こんな感じです。すいません
0866NAME IS NULL
2007/01/31(水) 14:34:37ID:???店テーブルと商品テーブルの関連がDB上でリレーションが
貼られているという前提で、
店テーブルと商品テーブルを結合してshop_idで並べ替えたSQLで
全部のデータを一回のSQLで取ってきてプログラム側で順番に
取り出して配列にする
とかじゃだめ?
0867865
2007/01/31(水) 23:12:03ID:???レスありがとうです
ふむ〜
なるほどそれなら一回ですがちと強引な気が・・・
やっぱりpostgreでは厳しいのかな
SQL板に行ってみます。
うろうろすいません^^;
この板勢いなさ過ぎ・・・
postgreSQLはあんまり人気無いのかな?TT
おじゃましました〜
0868ココ電球(∩T∀T)y-~~~~ ◆tIS/.aX84.
2007/02/01(木) 00:51:05ID:up3HpEhoあれ?Arrayなんて使ってええの?
使っちゃいけない気がするのだが・・・
0869ココ電球(∩T∀T)y-~~~~ ◆tIS/.aX84.
2007/02/01(木) 00:52:04ID:up3HpEho使用禁止。
0870NAME IS NULL
2007/02/01(木) 01:55:12ID:fAFpWpWLオブジェクトデータベースとかになるのかな?
まあ、セオリーは全部の情報を表として取って来て
ぐるぐる回しながら格納していくんだと思う
ところで、札幌市の市場の入札システム(水産、たことか貝とかかすべとか)は
PostgreSQL使ってるよ
俺が作っただよ
0871NAME IS NULL
2007/02/01(木) 07:05:13ID:???C言語を使ってpostgreからのデータを構造体に格納する手法がよく分らないんですが。
以下概要
postgre、データベースのテーブル設計
テーブル名 hogetbl
項目 名称 型
front 前部 varchar(10)
rear 後部 varchar(10)
te 長さ int(2)
C言語側
構造体
struct GH{
char front [10];
char rear [10];
int te;
};
データベースのレコード数は100件を上限に想定にしつつ
hogetbl内のデータを構造体GHへ格納したいのですが・・・。
書物で探してもCでpostgreを扱った本がほとんど見かけないので対処に困り果てています。
どうかお力をお貸しくださいませm(_ _)m
0872NAME IS NULL
2007/02/01(木) 08:28:48ID:fAFpWpWL接続は出来るの?
列の値を取って来れるの?
先ず話はそれから?
0873871
2007/02/01(木) 09:08:51ID:???SQLへの接続とSQL構文での値の抽出とかですか?
本に書いてあるのは、実際にしてみたりはしましたけど・・・。
というか、>>871でやろうとしているのは
postgresqlに組み込んだデータを資源として
Cでの二分探索木を行う試みなんですが。
0874NAME IS NULL
2007/02/01(木) 09:27:56ID:???定番中の定番であるシーラカンス本にlibpqを使った例が書いてあると思うが?
今のままだと全然PostgreSQLの話題じゃない。
0875NAME IS NULL
2007/02/01(木) 09:44:01ID:???したけど、どうなんだ。
Cで2分探索木ならスレ違いだろ。
0876871
2007/02/01(木) 09:53:02ID:???あれ? そうでした?
見落としたかな?、ちょっと見直してきます。
ちなみにシーラカンス本は・・・
技術評論社
石井達夫 著
PostgreSQL完全攻略ガイド
ですよね?
>>875
871のところでどういう手法でやればいいのか
具体的なところが分らなくなって途方に暮れてたので・・。
スレ違いですいませんm(_ _)m
0877ココ電球(∩T∀T)y-~~~~ ◆tIS/.aX84.
2007/02/01(木) 18:45:50ID:BE/MXAwvSTLコンテナのMAPとかVECTORじゃだめなのか?
自作するんか?
0878871
2007/02/02(金) 02:09:47ID:???はい、どうしてもCです・・or2
Cのソース上にデータ書けば済むところではありますが
それをするとpostgreを使わなくなってしまいますし
libpqもあるのでC&postgreでやりたいのですが。
メタコマンド\copyでCでの取り込み用に中間ファイルを作ってからやればいいんだろうか?
出来れば中間ファイルを作らずに行いたいですが・・・うーん。
0879NAME IS NULL
2007/02/02(金) 02:57:15ID:???とりあえず、全角半角混ざったのと、Postgreっていう略称は知能障害としか思えんからやめろ
0880871
2007/02/02(金) 02:59:26ID:???0881NAME IS NULL
2007/02/02(金) 10:52:24ID:???Postgre で寸止めされると気色悪いw
0882NAME IS NULL
2007/02/02(金) 10:56:49ID:???ttp://www.postgresql.jp/document/pg721doc/programmer/libpq-example.html
0883ココ電球(∩T∀T)y-~~~~ ◆tIS/.aX84.
2007/02/03(土) 00:23:15ID:eaIOV6qUインデックス張って検索やらせるんだ。
突拍子も無いアイデアだとは思うが
0884NAME IS NULL
2007/02/03(土) 01:37:52ID:???connect byなんかもロクにパフォーマンスでないしニガテな処理の類でそ
0885ココ電球(∩T∀T)y-~~~~ ◆tIS/.aX84.
2007/02/03(土) 02:06:06ID:eaIOV6qUなんのためのリレーショナルDBなのやら
0886NAME IS NULL
2007/02/04(日) 14:43:57ID:???su -l pgsql -c "/usr/local/pgsql/bin/pg_ctl start
-l /usr/local/pgsql/data/serverlog
-D /usr/local/pgsql/data
というシェルで起動させるとDBから轢いた値が文字化けします。
-c以降を手打ちすると文字化けしません。
なぜですか?誰かエロ居人教えてください
0887NAME IS NULL
2007/02/05(月) 09:30:06ID:HV6WuwW40888NAME IS NULL
2007/02/05(月) 23:00:39ID:gpmdvzrY今回はセキュリティパッチ。
0889NAME IS NULL
2007/02/06(火) 14:07:53ID:???selectするときに〜 as t , 〜 as b , 〜 as w , 〜 as hとかって別々に分解して取り出すのって無理ですか?
読み出してから配列まわしてプログラムでやらないとだめでしょうか?
お願いいたします
0890889
2007/02/06(火) 14:10:21ID:GHmM0Kazsageにチェックが、デフォルトではいってるのやめてもらいたいですねOTZ
すれ汚しすいません。一応IDだしとこうと思いまして
お願い致します
0891NAME IS NULL
2007/02/06(火) 15:15:35ID:???設定で変えられるだろ。
>>889
substring
0892889
2007/02/06(火) 16:59:17ID:GHmM0Kazありがとうございます
ほぼ出来ました。
えーと
取り出したいのはT155B85(D)W57H84でたとえるなら
155
85
D
の三つなのですが
153は substring(three_size from 2 for 3) as t で
Dは substring(three_size from position('(' in t_girl.three_size)+1 for 1) で
で取り出せました。
問題は85で、ここは3桁の可能性もあります。
POSIXで
substring(three_size from 'B.*\(') as b
とかしてみたのですが
ERROR: invalid regular expression: parentheses () not balanced
と怒られました。エスケープの仕方が違うっぽいし
そもそも、これじゃあ、"B85("がマッチしちゃうから違うんですけど。
なんか良い案があったらお願いします。
そもそも、全部の数字が別カラムに入ってない時点で、設計に問題があるのですが・・・
0893889
2007/02/06(火) 17:21:02ID:???substring(three_size from 'B[1-9][0-9]|B[1][0-9][0-9]')で
B85
まで取り出せました。
Bはどうにか出来ませんでしょうか?
0894NAME IS NULL
2007/02/06(火) 17:57:17ID:???"B85"の2文字目から後ろを取り出すの?
もっかいsubstringすれば?
0895893
2007/02/06(火) 20:00:51ID:GHmM0Kazsubstring(substring(three_size from 'B[1-9][0-9]|B[1][0-9][0-9]') from 2)
で出来ました。
お世話になりました。
結構処理早いですね。
スリーサイズと身長とバストとヒップと全部、この処理で別項目に分けたけど
ほとんど処理する前と時間かわらなった。対象は6000件くらい。
0896NAME IS NULL
2007/02/07(水) 19:10:55ID:6/it0EpA0897NAME IS NULL
2007/02/07(水) 23:59:50ID:MkuIhqmmこの interval を 分 に変換するにはどうすればよいでしょうか。
extract でごりごり書くのでしょうか。
0898NAME IS NULL
2007/02/08(木) 08:52:33ID:???select (extract(epoch from timestamp date_to) - extract(epoch from timestamp date_from))/60
でどうよ。
0899NAME IS NULL
2007/02/08(木) 13:07:44ID:Ecl3eExm0900NAME IS NULL
2007/02/09(金) 17:27:57ID:eSr0Uf1/order by 〜 descでソートすると
nullが入ってる項目が最初に出てきちゃうのですが
ascの時もdescの時も後ろに出すことは出来るでしょうか?
ソートした時はnullのものは検索に引っ掛けない、という風にしていたのですが
nullのものが後ろに出た方が自然だ、という意見もありまして。
もう一度nullのものだけ検索かけて合体とか・・・イヤイヤ
簡単な方法ありましたらお願いします。
0901NAME IS NULL
2007/02/09(金) 18:42:31ID:???http://homepage1.nifty.com/kojama/works/rdbms/psql/sql.html#term10
0902NAME IS NULL
2007/02/10(土) 11:59:09ID:???ソート対象のフィールドが数値で最小値が 0 以上なら >>901 でいいけど、
そうでないなら、
order by case when [xxx] is null then 1 else 0 end desc, [xxx] asc;
でいいんじゃないか。
環境無いから試せてないけど。
0903900
2007/02/12(月) 01:25:39ID:6lvwoyZe>>902
レスありがとうございます
遅くなってすいません。
そうか、普通にorder byにもcaseかけるんですね。
ふ〜む。結構柔軟に出来てるんだなあ。
0904NAME IS NULL
2007/02/13(火) 10:35:58ID:???俺も一瞬、おおとか思ったけど、
考えてみりゃ、CASEやら関数やらをかました
列の別名をorder byに書けるんだから、
そりゃそうか、と思った。
0905NAME IS NULL
2007/02/13(火) 18:29:42ID:???とうとうディスク容量があと2%ぐらいになってしまいましたぁ><
これは再起動とかvacuumとかでかなり容量減りそうですか?
0906NAME IS NULL
2007/02/13(火) 22:11:56ID:???vacuum fullなら減るが、一時領域が必要じゃないかな。
これはもうダメかもわからんね。
0907NAME IS NULL
2007/02/13(火) 22:20:09ID:???ダンプ→削除→リストア
0908NAME IS NULL
2007/02/13(火) 22:42:17ID:???0909NAME IS NULL
2007/02/14(水) 11:46:36ID:???その後に行なうvacuum fullは少しは短時間で完了できるものですか?
0910NAME IS NULL
2007/02/14(水) 13:45:07ID:yJifxSet例えば文字列の中から
(0)とか(8)とか取り出したいとき
substring(hoge from '\([0-9]\)')
とかやってみたんですけど、駄目みたいです。
お願いいたします。
0911NAME IS NULL
2007/02/14(水) 14:19:51ID:7NlKu+XnSerialとは挙動が違うし・・・・
SQL鯖のTimeStampは行IDのようなものらしく
自動的に更新されたりする 行をユニークに保つための型っぽいんですが・・・
何に使うかというと、頻繁に同時更新が行われそうなシステムの楽観的更新に使用したいと考えています。
なので精度が極力高いようにしたいんです。
0912NAME IS NULL
2007/02/14(水) 14:37:41ID:???substring(hoge from '\\([0-9]\\)')
0913912
2007/02/14(水) 14:45:02ID:???>>912の書式はpsqlを使った場合ね。というかほとんどの言語でもそのような書き方になるが、
一つ目の\はpsql(シェル)に対してエスケープさせているってことで。
0914NAME IS NULL
2007/02/14(水) 14:52:23ID:???つ「bigserial」
0915NAME IS NULL
2007/02/14(水) 15:08:39ID:???timestampだと被るの?
0916NAME IS NULL
2007/02/14(水) 15:17:54ID:7NlKu+Xn>>915
レスサンクスです
Windows上のPostgresで処理を行うんですが
今まではSQLサーバでやっていたんです。
その時SQLサーバのTimeStampの挙動は一意になる事が保障されているようなものでした。
TimeStampだと時間になるのでWindowsの分解能に依存し、ものすごい低確率で、起きないかもしれませんが
最悪2箇所からの同時更新の際にかぶってしまう可能性が出てきますよね?
(確かLinuxだとマイクロ秒まで取得できていたかと・・・)
実際にかぶったわけではないですが、出来る限りの可能性は取り除きたくて調べていたんです。
ぶっちゃけた話、更新の時に絶対かぶらない保障があればそれこそなんでもいいということなんです。
0917NAME IS NULL
2007/02/14(水) 15:26:14ID:???Serialなら裏でSequence使ってるから、
セッション毎に個別のシーケンス値が
割り当てられる事が保証されているはずだが。
0918NAME IS NULL
2007/02/14(水) 15:40:06ID:7NlKu+Xnレスありがとうございます。
今一歩理解力なくてすません
ってことは・・・
楽観的更新の時、 参照した時の元の値=現在のDBの値 ならば
NextValをセット でOK?って事でしょうか?
0919NAME IS NULL
2007/02/14(水) 15:55:06ID:???あ〜、意味をはき違えてたかもしんないwww
SerialじゃなくてSequenceで良いと思うよ。
で、SQL ServerでいうTimeStamp型の代わりに、
bigint型の列を定義して、
その列の値について
> 参照した時の元の値=現在のDBの値 ならば
> NextValをセット
すると同時に更新用の値をそれぞれの列にセットで良いと思われ。
0920NAME IS NULL
2007/02/14(水) 15:58:05ID:7NlKu+Xn把握!!1111111
色々回りくどく聞いて済ませんでした(;´∀`)
やってきます!ノシ
0921910
2007/02/16(金) 00:25:28ID:JCviIvwK超遅いレスですがありがとうがとうございました。
無事出来ました。
スクリプト(PHP)内から使うと
〜 and substring(hoge from '\\\([0-9]\\\)')
になるんですね。
気づくまでちょっと時間かかりました。OTZ
0922NAME IS NULL
2007/02/16(金) 00:30:54ID:JCviIvwK立て続けですんません
もう一つ質問です^^;
prepareしてSQLを実行するときORDER BYはプレイスフォルダに出来ないのでしょうか?
SELECT * from test order by ?
でprepareして、カラム名をバインド後実行してもソートされません。
やり方が違うのでしょうか?それとも出来ないのでしょうか?
(PHPのPDOで試してます。psqlでは試してません・・・)
お願い致します
0923NAME IS NULL
2007/02/16(金) 00:40:25ID:???0924NAME IS NULL
2007/02/16(金) 00:44:08ID:???0925NAME IS NULL
2007/02/16(金) 01:08:25ID:???PHPのPDOがどういう実装になっているか分からないけど
SQLのPREPARE文に対応している形に変換されているなら
PREPARE文で出来ないから出来ない。
そんなのPHP側で?の部分に変数埋め込んで展開すれば良いだけじゃんか。
SQL injection が、とか言うなよ。そもそもカラム名だろ。
そこに injection 可能なパラメータが来ることがあるかもしれないなら
それは設計が間違っているんじゃないかと。
0926912
2007/02/16(金) 02:50:24ID:???そりゃ違うぞ。間違いではないがちゃんと理解してない。
$sql = "SELECT substring(hoge from '\\([0-9]\\)') FROM Table";
もしくは
$sql = 'SELECT substring(hoge from \'\([0-9]\)\') FROM Table';
これで$sqlの中身は
SELECT substring(hoge from '\([0-9]\)') FROM Table
になってバックエンドに渡される。
>>922
たぶん
SELECT * FROM test ORDER BY 'カラム名'
となってて、'カラム名'という文字列でソートしてる。
この文字列は当然不変だから意味を成さない。
基本的に"データタイプ"を指定するので、カラム名そのものを
渡すのは無理じゃないかな?
試したことないのであれだが、そのあたりは>>925に同意
0927NAME IS NULL
2007/02/16(金) 08:38:02ID:LbPZpHQw列名ではなく列番号なら出来るかも。
やったことないけど。
0928NAME IS NULL
2007/02/16(金) 10:18:33ID:Fn+4HLpK>>926
レスありがとう御座います。
>>925
確かに、カラム名をフォームでテキスト入力させることはないだろうし
メソッドもPOSTにするだろうしインジェクションの心配はないですよね。
また値じゃないからできないのかなあ、とも思ったんですけど
出来ないじゃなくて、必要ないって感じですか。
すっきりしました。ありがとうございます。
>>956
>$sql = "SELECT substring(hoge from '\\([0-9]\\)') FROM Table";
>もしくは
>$sql = 'SELECT substring(hoge from \'\([0-9]\)\') FROM Table';
そうですよね?最初そうだろうと思って、上の例のようにしたんですけど
エラーは出ませんでしたが意図した結果が得られなかったんです。
しかも、デバッグのために発行したSQLを画面に出してるんですけど
'SELECT substring(hoge from '\([0-9]\)') FROM Table'
と表示されました。
SQL上の正規表現の()のエスケープ自体\\(2コ)にしなきゃならないのかと思って
921の例のようにしたら、意図した結果が得られたんですけど・・・
なんか勘違いしてるかな〜
時間があったらもう一度試して見ますね。
0929NAME IS NULL
2007/02/16(金) 11:25:10ID:KW5uPsrG0930NAME IS NULL
2007/02/17(土) 17:24:03ID:???> メソッドもPOSTにするだろうしインジェクションの心配はないですよね。
POST とインジェクションってなんか関係あるのか?
> 出来ないじゃなくて、必要ないって感じですか。
カラム名を動的に指定することはあるけど、カラム名はシステム側で持って
るんだからから不正なカラム名ははじいておけばいいだけだ。
>>929
そんなことが面倒になるほどテーブルを頻繁に作成すると言う設計を見直す。
0931NAME IS NULL
2007/02/17(土) 18:14:04ID:???そしてPOSTにしてもCSRFは防げない。
0932NAME IS NULL
2007/02/18(日) 07:48:40ID:???何のためにロールがあると思ってる?
0933NAME IS NULL
2007/02/18(日) 13:42:21ID:???0934NAME IS NULL
2007/02/19(月) 18:58:07ID:???とかできないから無理なんだよね。
0935NAME IS NULL
2007/02/19(月) 22:38:28ID:???ストアドで動的SQLを使えばいいんじゃね?
0936NAME IS NULL
2007/02/20(火) 02:11:35ID:sgIFKsE/ODBCでAccessから操作してるんですが、PostgresqlにどのようなSQLが送られたか
知るにはどうしたらよいでしょうか。どこかのLogに残ってたりするでしょうか。
具体的には、レコードの1カラムを変更したときにレコードまるごとUpdateしてるかどうかを
知りたいのです。たぶんしてないと思うんですが、CSEってまるごとだった気がしたので。
違ったらすみません。
よろしくお願いします。
0937NAME IS NULL
2007/02/20(火) 02:14:06ID:???server側でもODBC側でもログは取れるよ。
設定すればだけど。
0938NAME IS NULL
2007/02/20(火) 02:16:10ID:???ちょっと頭悪い質問だったんで自己フォロー入れようと思ったら遅かった・・
設定を調べてみます
0939NAME IS NULL
2007/02/20(火) 02:21:05ID:???サーバ側は
http://www.stackasterisk.jp/tech/sonomama/postgresql0b_01.jsp#5
かな。これだけで出来たっけ? なんか自分はこれだけじゃ駄目だった記憶が…
ODBC側はCOMMLOGをオンにすればC:\直下にログが出来る。
0940NAME IS NULL
2007/02/20(火) 02:54:57ID:???とりあえず、ODBC側でログがはけましたが、サーバ側のほうが便利なので調べてみます。
ちなみにupdateは変更箇所のみでしたが、何故かwhere句で抜き打ち的に
主キー以外のいくつかのカラムをチェックしていました。
0941NAME IS NULL
2007/02/21(水) 07:33:30ID:if9xwFYZ(今はMac/WinのSJIS+LinuxのEUC-JP)
今はLinux環境がVine3.2なのでPostgreSQLは7.4なのですが、
7.1対応の改訂第3版のシーラカンス本では、psqlはEUCなら日本語を受け付ける、とあります。
UTF-8については言及がなく、そもそも7.1ではUTF-8ではなくUNICODEという名称ですね。
$ psql hoge_db < fuga.sql
なんてやるときに、fuga.sqlがUTF-8で書かれていてhoge_dbもUTF-8で作成しているとき、
$psql --encoding UTF-8 hoge_db < fuga.sql
という感じにできればと思うんですが。(7.4ではできないみたい)
0942NAME IS NULL
2007/02/21(水) 07:46:10ID:???こんな所にだらだらと書く時間があるならググればいいやん。
http://www.google.co.jp/search?q=PostgreSQL+UTF-8
0943NAME IS NULL
2007/02/21(水) 11:37:04ID:???だんだんクエリが遅くなっていくんだけども、テーブル削除以外で直す方法ないの?
VACUUMしても全然元に戻らない。。
0944NAME IS NULL
2007/02/21(水) 12:25:04ID:???ワロス
0945NAME IS NULL
2007/02/21(水) 15:39:42ID:mnbRGN6mLinuxでpg_dumpを使ってバックアップしたファイル"a.out"を
Windows上のc:\に配置した場合
psql コマンドで
psql -e testdb > c:\a.out
としてもバックアップが復元されません・・・
ググってもコレでよさそうだし・・・・
上記のコマンド実行結果は
なぜかテーブル空間の一覧が表示されてしまいます。
もう訳ワカメラーメン
0946NAME IS NULL
2007/02/21(水) 16:10:18ID:???つ「VACUUM FULL」
>>945
つ「不等号の向き」
0947NAME IS NULL
2007/02/21(水) 16:28:49ID:mnbRGN6mトンクス
ごめ、こっちに書き込んだ奴の不等号間違えただけだた
psql -e testdb < c:\a.out
これは
psql -e testdb < "c:\a.out"
こうするべきなんだろうか?
むしろ""でパスくくらないと \aがコマンドに間違えられてしまって怒られるんだが・・・
画面では
postgres=# キャレット
てなってて
キャレットの位置から上にあるコマンドを打ち込んだ結果(psql -e testdb < "c:\a.out")
結果も何も出ずにまた
postgres=# キャレット
という状態です。
なにか俺カンペキに勘違いしている????
0948NAME IS NULL
2007/02/21(水) 16:36:59ID:???>postgres=# キャレット
これはすでにpsql実行中だろ
コマンドプロンプトから実行しなさい
0949NAME IS NULL
2007/02/21(水) 16:55:31ID:???つか>>948の指摘を解消した上で、
まだパスの問題が出るなら、
カレントドライブ、カレントディレクトリをC:\にしてから、
パラメタにドライブレターや\マークを使わないようにすれば良さ気だが?
C:\>C:
C:\>CD \
C:\>psql -e testdb < a.out
0950NAME IS NULL
2007/02/21(水) 17:24:52ID:mnbRGN6mサンクス!でけた〜!!!
コマンドライン引数に入れてやったらでけたよ
パスは"D:\a.out"
としました。
しっかしこうやってコマンドライン引数に入れるのであれば・・・・Postgresインスコした時に一緒に入ってくる
'オーナー名'へのpsql
のショートカットの使い道がわからんっす(;´∀`)
ほとんどはPgAdminでやっちゃってたから・・・・・
ともかく勘違いしてたんでスッゴイ助かりました!
0951NAME IS NULL
2007/02/21(水) 17:27:27ID:???> 'オーナー名'へのpsql
DB管理には便利だと思うがなwww
0952NAME IS NULL
2007/02/21(水) 17:31:03ID:mnbRGN6mん〜
やっぱりGUIツール使うよりコマンド覚えたほうが色々早いし融通もきくの・・・かな?
0953NAME IS NULL
2007/02/21(水) 18:01:09ID:???とりあえず、このスレは知能の足りないお前のボヤキを書くスレではない
0954ココ電球(∩T∀T)y-~~~~ ◆tIS/.aX84.
2007/02/24(土) 23:32:34ID:ocVpsDw00955NAME IS NULL
2007/02/25(日) 00:22:10ID:???mingw の psql はタブ補間も効かないし、使い物にならん。
0956NAME IS NULL
2007/02/25(日) 00:47:26ID:???俺もWindows版のpsqlは補完が効かなくて、一時期cygwinを入れてたが、
結局pgAdmin3になっちゃった。
でも、テスト的にSQLを書くなら補完の効くpsqlは便利なんだよなぁ。
まぁ、LAN内に常時稼動しているLinux機があるから、そこにあるpsqlから
Windows機のpgsqlに接続することも可能なんだけどね。
0957NAME IS NULL
2007/02/26(月) 11:19:17ID:???0958NAME IS NULL
2007/02/26(月) 17:08:40ID:???わかってるならサーバを時刻校正しろよwww
0959NAME IS NULL
2007/02/26(月) 17:11:29ID:???や、サーバそのものは触れないのです。
確認のお願いをする前に確認しておこうかな..と(・ω・`)
0960NAME IS NULL
2007/02/27(火) 11:13:18ID:eiuGLXcr例えば、
テーブルA
id | name
--+------
1 | ほげお
2 | ほげこ
テーブルB
id | name_id | item
--+---------+-----
1 | 1 | えんぴつ
2 | 1 | ノート
3 | 2 | 消しゴム
の二つのテーブルから、
id | name | item
--+--------+-----
1 | ほげお | えんぴつ
2 | ほげお | ノート
3 | ほげこ | 消しゴム
のような結果を取得したい場合に、テーブルBの name_id には外部参照の制約を
つけるとパフォーマンスが上がるものなのでしょうか?
それとも単にデータ整合性が保たれるというだけのものなのでしょうか?
現在、上記の例のようなテーブルで、テーブルAのレコードのみ非同期で削除
したいという案件がありまして、外部参照の有り無しがパフォーマンスに影響
するのかしないのかちょっと不安になったので質問させてもらいました。
0961NAME IS NULL
2007/02/27(火) 11:25:42ID:???\! でサーバ側の日時を確認すれば分かるでしょ。
0962NAME IS NULL
2007/02/27(火) 18:14:14ID:???0963NAME IS NULL
2007/02/27(火) 22:55:03ID:???上がらない。
外部参照制約をつけた状態でAのレコードを削除すると、
つけない場合より遅くなる。
B.name_idにindexをつけてやれば解決。
0964NAME IS NULL
2007/02/28(水) 00:30:15ID:Xrd/4ZND>>963
えっ?FKにしないとJOIN出来ないんじゃないの?
勘違いしてたっぽい?
ということはFKは何のためにあるの?
登録しようとしたときエラーを出すためだけ?
0965NAME IS NULL
2007/02/28(水) 00:43:35ID:???制約とJOINは関係ねーべ。
0966960
2007/02/28(水) 09:10:06ID:???レスありがとうございます。
なんとなくそうじゃないかなぁと思ってたんですがこれですっきりしました。
>>964
登録のときと削除のときに、整合性がないデータはエラー判定するための
ものですかね。
そもそも数年前のバージョンでは外部参照制約使えませんでしたし。
0967NAME IS NULL
2007/03/02(金) 21:51:16ID:???ODBCドライバのメインメンテナを相手になんてことを書いているのか。
0968NAME IS NULL
2007/03/03(土) 09:10:07ID:???0969NAME IS NULL
2007/03/03(土) 10:45:13ID:???> 登録のときと削除のときに、整合性がないデータはエラー判定するための
> ものですかね。
削除の時に関連するデータを削除することもできるよ。
ようは、整合性をデータベース側で維持するための仕組みだよ。
0970NAME IS NULL
2007/03/05(月) 03:22:34ID:???vacuum analyzeをかけようかと思っているのですが、このオプションは
「vacuum+analyze」という認識でかけてよろしいのでしょうか。
それともvacuumはvacuumで別にかけなければならないものなのでしょ
うか。
初心者的な質問で恐れ入りますが、ご教示いただけますと幸いです。
0971NAME IS NULL
2007/03/05(月) 06:28:53ID:???http://www.postgresql.jp/document/current/html/sql-vacuum.html
0972NAME IS NULL
2007/03/06(火) 01:47:28ID:???vacuum+analyzeでしたね。
ありがとうございました。
0973デムパゆんゆん
2007/03/06(火) 14:52:11ID:xEVGMVADおちんちんが奥まではいってる
いつか様 お尻がいたいですーーーーっ!!! ア"ーッ!!!
もっとズボズボおながいします ぁぅぁぅ
スレ汚しすまそ クエリ検索でバキュームアナルがヒットしちまった
8.2になってからjavaとのせつぞく少し早くなった気がするお
0974NAME IS NULL
2007/03/06(火) 16:07:46ID:???0975NAME IS NULL
2007/03/06(火) 18:15:35ID:???今はオレもそれで躊躇してる。
動作確認さえもしていない
0976NAME IS NULL
2007/03/06(火) 18:34:42ID:???8.2.3
Changes
* Remove overly-restrictive check for type length in constraints and functional indexes(Tom)
* Fix optimization so MIN/MAX in subqueries can again use indexes (Tom)
なんていうのがあるから、>>820の問題が解決している可能性はあるんだけどね。
とはいえ、8.2にすると使いものにならないほどパフォーマンスが落ちる可能性が
あるっていうのは、バージョンアップ後にいちいち検証しなければならないので
非常に面倒。
0977NAME IS NULL
2007/03/06(火) 19:17:21ID:???試してみるか・・・
しかし8.1.xで、昔入力に失敗して文字化けしたデータが混ざってるやつ
そのまま8.2.xにもってくと文字コード範囲から外れてるとかで
テーブル丸ごとスキップされるんだけど、無理やり入れる方法は無いものか・・
0978NAME IS NULL
2007/03/06(火) 20:22:38ID:???あれから暫く、リリースされる度に Change log は見ていたのですが
確認するのが面倒だったので確認はしてません。
副問い合わせが 8.1 系列と遜色ない速度に戻っていたとしても
別の問い合わせ(SQL)で問題が出ないかを検証しないといけないのは
ちょっとやってられない、からです。
まぁ、今回せっかく話題が出たので、時間があれば試してみますが
>>976 の件には当てはまらない感じなので、駄目だとは思います。
0979NAME IS NULL
2007/03/06(火) 22:33:43ID:???こいつしょっちゅうプランナ弄ってるけど、正直その修正が
役に立ってるのかと思うよね。
つか、どういうデータでどういう問い合わせで検証しているのか。
RBOでいいからきっちり期待通りに動けばそれでいいんだけどな。
geqoは役に立たない失敗作だったし。
0980ココ電球(∩T∀T)y-~~~~ ◆tIS/.aX84.
2007/03/07(水) 23:11:36ID:EZjgay4sえーとね
痛かったのは 文字列変数に ' を埋め込むとき \' って書いてたのが駄目になってた事。 '' に直さなければならない
0981ココ電球(∩T∀T)y-~~~~ ◆tIS/.aX84.
2007/03/07(水) 23:12:43ID:EZjgay4s要素数が多いとき シーケンススキャン
要素数が少ないとき インデックススキャン
を選択しておりました。
0982NAME IS NULL
2007/03/08(木) 00:33:23ID:???俺は、8.2のソースを取ってきて、
文字コードチェックのところで変換できない文字を'?'に置き換えることで対処。
その後は、正式版のバイナリに差し戻した。
0983NAME IS NULL
2007/03/08(木) 11:25:58ID:???うわ、強引だけど使えそう。
ありがとう、早速試してみます。
レス数が950を超えています。1000を超えると書き込みができなくなります。