探検


PostgreSQL 2テーブル目

1nobodyさん
垢版 |
03/03/11 02:34ID:9JR4latc
PostgreSQLについて語って2万テーブルをめざしましょう。
関連アプリケーション特有の話題は、以下のスレッドへ。
pgsql-mlのヲチもここで。

前スレ
[PostgreSQL]
http://pc2.2ch.net/test/read.cgi/php/989375812/

☆関連スレッド
[PHP + PostgreSQL]
http://pc2.2ch.net/test/read.cgi/php/983128806/
[PerlでPostgreSQL]
http://pc2.2ch.net/test/read.cgi/php/999249463/
[MySQL vs PostgreSQL]
http://pc2.2ch.net/test/read.cgi/php/989341364/

322nobodyさん
垢版 |
03/08/03 08:56ID:???
>>321
突破口って。。。
マニュアル読めばいいだけと違うの?
323_
垢版 |
03/08/04 16:26ID:???
CREATE TABLE account_table ( expire_date TIMESTAMP, name TEXT );

のようなものがあって、

SELECT * FROM account_table WHERE expire_date > now() AND name = 'foobar';

のような問い合わせを頻繁に行なっています。実際にはテーブルも問い合わせ
ももっと複雑です。

ここで、上記SELECT文を、1引数('foobar' 部分)のPL/pgSQLの関数にしてしま
いたいのですが、そういうことは可能でしょうか?

CREATE FUNCTION get_account( TEXT ) RETURNS ??? AS 'BEGIN ???; END' LANGUAGE 'plpgsql' ;

のような概観になるかなとは思うのですが、戻りの型などがわかりません。
EXECUTEを使うのでしょうか? 教えてください。

# Viewのほうが無難でしょうか? プログラム側にwhere句を書き忘れる可能性
# があるのが嫌なんですよね…
324nobodyさん
垢版 |
03/08/05 03:24ID:???
CREATE FUNCTION get_account( text ) RETURN SETOF RECORD AS '
[...snip...]
' LANGUAGE 'plpgsql';
325nobodyさん
垢版 |
03/08/05 13:23ID:???
すこしスレ違いかもしれませんが、どちらに質問していいかわからなかったので、
ここで質問させてください。

ある大きな2つのテーブルをJOINしたいのですが、そのままJOINすると
時間が掛かりそうなので、片方を一時テーブルに書き出して、それをJOINしようと
思ったのですが、一時テーブルを作った後、違うページで一時テーブルとJOINしようと
するとテーブルが存在しないと言われてしまいます。
PHPから一時テーブルを作成した場合、その一時テーブルにアクセスできるのは
どのタイミングまでなのでしょうか?
マニュアルにはセッションの終わりまでのようなことが書いてありますが、
PHPのセッションは終了してません。
それとも、一時テーブルを作成しないでもいい方法などありませんでしょうか?
よろしくお願いします。

環境は、PHP 4.2.3 PostgreSQL 7.2.3です。
326308
垢版 |
03/08/05 13:57ID:???
すいません、自己解決しました。
327nobodyさん
垢版 |
03/08/05 15:59ID:???
>325
pconnect使わなければ、PHPからPostgreSQLへのセッションは
毎回切った張ったされますが。
328nobodyさん
垢版 |
03/08/05 16:25ID:???
>>325
一時テーブルをVIEWにするかサブクエリにするのが一般的だけど、
性能上の問題からその一時テーブルの結果を使いまわしたいなら
名前をつけてテーブル作成するしかないかな。

pg_pconnect使ってもApache/PHPの状態によってはDBセッションが同一にならないから、
ページを跨いだ一時テーブルの利用はできない。
329nobodyさん
垢版 |
03/08/05 18:56ID:???
PostgreSQL 7.2 のPL/pgSQLについて教えてください。
CREATE TABLE reg ( d TIMESTAMP );
なるテーブルがあり、d には「現在からn秒後の時刻」をINSERTするようにし
ています。現在はプログラムから
INSERT INTO reg VALUES ( NOW() + INTERVAL ''100 sec'' );
のようにしているのですが、これをPL/pgSQLで書きなおそうとしています。
で、
CREATE FUNCTION f( BIGINT ) RETURNS BOOL AS '
BEGIN
INSERT INTO reg VALUES ( NOW() + INTERVAL ''$3 sec'' );
RETURN TRUE;
END
' LANGUAGE 'plpgsql';
としてみたのですが、$3 が展開されないのか、足し算が行なわれません。
どのように書いたら望む結果になりますでしょうか? 教えてください。
330325
垢版 |
03/08/05 21:08ID:???
>>327, 328

ありがとうございました。
pconnectを使って、ページをまたいで一時テーブルを使おうとしてたので、
テーブルが残ってるのか残ってないのか、よくわからなくて混乱してました。

pg_connectを使って、なんとか同じページ内で一時テーブルを使って処理してます。

VIEWは、まだ勉強中なので試行錯誤してみます。
331nobodyさん
垢版 |
03/08/06 04:59ID:7sg7mWSc
教えてください。
DISK障害でテーブル内データのほとんどが消えました。
実体の/usr/local/pgsql/data/base/内は無事のようです。
/base/DB名からなんとかリカバリできないでしょうか?
postgresql6.5.3です。
332nobodyさん
垢版 |
03/08/08 10:59ID:???
ZDNetの誤字ひどいな。
『SRA 最新PostGreSQLをベースにした「PoerGres on Linux」「PowerGres Plus」を発表』
http://www.zdnet.co.jp/news/0308/07/nj00_srasql.html
333nobodyさん
垢版 |
03/08/18 01:33ID:???
age
334nobodyさん
垢版 |
03/08/25 03:03ID:???
perl、DBIでのトランザクションについてなんですが、
今日のレコード数を持ってきて、それを+1した値で、
新たにINSERTするというときは、
↓みたいな感じでOKなのでしょうか?
(他のユーザが登録している場合でも、値のずれが生じないですよね?)

よろしくお願いします。

$dbh->{AutoCommit} = 0;
$dbh->{RaiseError} = 1;
eval {
$val = get_value("SELECT count(*)+1 FROM a WHERE 今日のもの");
$ret = insert_value("INSERT INTO a (foo, ...) values ($val, ...)");
$dbh->commit;
};
if ($@) {
warn "Transaction aborted because $@";
$dbh->rollback; # undo the incomplete changes
}
335nobodyさん
垢版 |
03/08/25 21:37ID:r6wfNhzL
7.4の自動バキュームって使えそう?
フルバキュームまで自動でやってくれるの?
336nobodyさん
垢版 |
03/08/27 12:18ID:???
何を勘違いしたか今までポスタージャSQLって読んでたよ…
337nobodyさん
垢版 |
03/09/01 22:46ID:???
私信に近い雑談をMLに流すな〜!
338nobodyさん
垢版 |
03/09/01 22:57ID:???
>>334
ズレはしないかもしれないが、カチ合う可能性はあるよ。
それを防ぐには、SERIALIZABLEにするか明示的にテーブルロックする。
339nobodyさん
垢版 |
03/09/01 23:02ID:???
cygwinインストール中に落ちてしまって、インストールできないのですが
どうすれば。。あっここで聞くことじゃないですか。。そうですか。。
340nobodyさん
垢版 |
03/09/01 23:31ID:???
>335
contrib/pg_autovacuum/README.pg_autovacuum より。
vacuum fullに関しては、xid使い切りに関しては考えてるけど、
普段はvacuum止まりということかな。

Vacuum and Analyze:
-------------------

pg_autovacuum performs either a vacuum analyze or just analyze depending
on the quantity and type of table activity (insert, update, or delete):

- If the number of (inserts + updates + deletes) > AnalyzeThreshold, then
only an analyze is performed.

- If the number of (deletes + updates ) > VacuumThreshold, then a
vacuum analyze is performed.

deleteThreshold is equal to:
vacuum_base_value + (vacuum_scaling_factor * "number of tuples in the table")

insertThreshold is equal to:
analyze_base_value + (analyze_scaling_factor * "number of tuples in the table")

The AnalyzeThreshold defaults to half of the VacuumThreshold since it
represents a much less expensive operation (approx 5%-10% of vacuum), and
running it more often should not substantially degrade system performance.

341nobodyさん
垢版 |
03/09/07 02:48ID:yFWWpiPw
PostgreSQL 7.2.1使ってるんですけど、
運用中にREINDEXとかDROP INDEX〜CREATE INDEXとかの
INDEXの再生成って行って良いんですかね?

念のため運用を一時的に止めた方が良いんでしょうか?
342nobodyさん
垢版 |
03/09/07 04:52ID:???
やってもいいっすよ。ロックかかるけど。
343nobodyさん
垢版 |
03/09/16 10:01ID:Wb82WrlA
バッチグーage
344nobodyさん
垢版 |
03/09/16 10:29ID:???
MLヲチスレでつか?(藁
345nobodyさん
垢版 |
03/09/16 15:02ID:Wb82WrlA
>>344
1をみてくらさい。
346/
垢版 |
03/09/16 22:32ID:GYSWeRnL
おまえら、7.4 は高速化が図られてるようですよ。

【PostgreSQLウォッチ】第1回 PostgreSQLの次期版7.4の性能を検証
http://itpro.nikkeibp.co.jp/members/SI/oss/20030911/1/
347nobodyさん
垢版 |
03/09/17 11:21ID:An2EWdc3
select hoge,hogehoge from table group by hoge;
をしたいのですがどのようにしたら実現できますか?
グループ化してないhogehogeもselectしたいのです
348nobodyさん
垢版 |
03/09/17 12:17ID:???
select hoge,hogehoge from table group by hoge,hogehoge;
349nobodyさん
垢版 |
03/09/23 22:55ID:PMiaWnnI
>>347
hoge|hogehoge
aaaa|bbbb
aaaa|cccc

とあったら、何を出せバインダー
350nobodyさん
垢版 |
03/09/24 01:47ID:Mc741Fcx
おもろい
http://www.39001.com/cgi-bin/cpc/gateway.cgi?id=dolphin
351nobodyさん
垢版 |
03/09/24 05:33ID:namugEPq
>>350
「メル友みっけ」か...
352nobodyさん
垢版 |
03/09/24 05:41ID:???
ここが一番上にきとる。
移転したんじゃなかったっけ?

PostgreSQL 2テーブル目
http://pc2.2ch.net/test/read.cgi/db/1056944337/
353nobodyさん
垢版 |
03/09/24 05:56ID:???
バイナリデータの挿入の仕方がマニュアルに書いてない
気がするんですが、どうやるんでしょう。
create table images (imagname text, img bytea);
このimg列に /tmp/hoge.jpg を挿入したいです。
354nobodyさん
垢版 |
03/09/24 06:17ID:???
>>352
しらんかった。
っていうか、ドラゴンボール板さわぎのどさくさで、気付いてなかった。

ということで

--- 糸冬 了 ---
355tes
垢版 |
04/01/15 23:32ID:???
tes
356nobodyさん
垢版 |
04/06/25 15:10ID:???
適当な文字列が入っているcolumnにたいして、
大文字小文字関係なく、検索文字をマッチさせるにはどうしたらいいの?

select * from foo where text_column ^ lower('BAR') or text_column ^ upper('BAR')

とかだと、「Bar」みたいのはヒットしないんだよなぁ。


357nobodyさん
垢版 |
04/06/25 15:12ID:???
あげとく
358nobodyさん
垢版 |
04/06/25 16:09ID:???
>>356
text_column ~* 'BAR'

DBのみのネタはDB板へ
ttp://pc5.2ch.net/db/
359356
垢版 |
04/06/25 16:33ID:???
>>358
THX

~が^になっていた orz
360nobodyさん
垢版 |
04/07/01 16:49ID:???
■   PostgreSQLのことならここで聞け   ■
http://pc5.2ch.net/test/read.cgi/db/1056960249/
361nobodyさん
垢版 |
04/07/14 02:54ID:IeDlw13K
postgres7.3を使用予定ですが、REINDEXの使用方法を教えてください。

REINDEX対象のテーブル名をpg_stat_user_tablesより
取得しながら、REINDEXを全テーブルに順番にかけるシェルを作ろうと思っています。
その際、pgbashを使用し、cronで自動実行を予定しています。

もしソースコードがわかれば教えて下さい。
またみなさんはどんな方法で、行っていますか?
362nobodyさん
垢版 |
04/07/14 02:55ID:IeDlw13K
postgres7.3を使用予定ですが、REINDEXの使用方法を教えてください。

REINDEX対象のテーブル名をpg_stat_user_tablesより
取得しながら、REINDEXを全テーブルに順番にかけるシェルを作ろうと思っています。
その際、pgbashを使用し、cronで自動実行を予定しています。

もしソースコードがわかれば教えて下さい。
またみなさんはどんな方法で、行っていますか?
363nobodyさん
垢版 |
04/08/26 20:45ID:QkQTY22p

ネットワークから接続しているユーザのIPを
抜き出してログを取りたいのですが
SQLコマンドで、自分はどこから接続しているかを
確認できる関数ってPostgresにはありませんか?

とにかく、接続しているクライアントのIPさえ分かればOKです。
宜しくお願いします。
364nobodyさん
垢版 |
04/08/26 21:22ID:vvcjm84y
管理人が拳銃発砲!!!
http://bbs2.orange-e.net/?id=binbin
365nobodyさん
垢版 |
04/09/03 11:18ID:dro8VJ79
apache2.0.5とPostgreSQL7.4の環境でmod_auth_pgsqlを使ってBasic認証を
行なっているのですが、認証するたびにpostgresユーザーで下のようなプロセスが
溜まっていきます。
postgres: apache database 127.0.0.1 idle
そして挙げ句の果てに
mod_auth_pgsql database connection error reset failed FATAL:
connection limit exceeded for non-superusers とメッセージが出てサーバーエラー
になってしまいます。多分mod_auth_pgsqlがパスワードのデータベースへ接続した後、
切断してくれないからじゃないかと思うのですが、どこか明示的に設定しなければ
ならない場所があるのでしょうか?
366nobodyさん
垢版 |
04/09/03 12:21ID:???
>>365
Auth_PG_connection_reuse がonだとコネクションプーリングするみたいですよ。
デフォルトはoffのようだが。
367nobodyさん
垢版 |
04/09/03 13:48ID:dro8VJ79
レスありがとうございます。早速 Auth_PG_connection_reuse off を設定して
みました。(それ以前は、Auth_PG_connection_reuseは何も設定していません。)すると
Invalid command 'Auth_PG_connection_reuse', perhaps mis-spelled or defined
by a module not included in the server configuration
となりサーバーエラーが返ってきました。別の原因は考えられますか?
ちなみにmod_auth_pgsqlは2.0.1、ディストリは fedora core 2です。
368366
垢版 |
04/09/03 19:40ID:???
>>367
ざっとソースを眺めてみた限りにおいて、2.0.1では切断をしていなさそうだ。
postgresqlの設定を変更して接続許可数を増やすか、
2.0.2b1にUpするしかないんじゃないか。
369nobodyさん
垢版 |
04/09/03 21:48ID:???
わざわざ調べて頂いてありがとうございます。バージョン特有の問題なのですね。
当面の間は、max_connectionsを増やして、cronで定期的に service httpd graceful
を走らせてしのごうと思います。お世話になりました。
370nobodyさん
垢版 |
04/09/04 17:32ID:???
>>368
fedore core 2 の mod_auth_pgsql-2.0.1-4.1.src.rpm のSPECファイルの
バージョンを書き換えたらそのままmod_auth_pgsql-2.0.2b1.tar.gzから
rpmをbuildできました。早速アップデートしましたところ、当該不具合は
めでたく解消されました。重ねてお礼申し上げます。
371nobodyさん
垢版 |
04/09/09 18:47ID:xemAm0Ui
行き詰まってしまって解決できなくなってしまったので、
質問させて頂きます。

TESTというテーブルの中に、A,Bというカラムがあり、
Aでgroup byしてから、Bをdistinctしたものの
カウントを取りたかったくて、下のようなSQLを組んだのですが、
Bをdistinctできてないものをgroup byした結果が、
出てきてしまいます。
私が意図したSQLはどうすれば実現できるかご教授おねがいします。

SELECT A,count(distinct(B)) FROM TEST group by A;
372nobodyさん
垢版 |
04/09/09 19:21ID:???
>>371
質問の意図を取り間違っているかもしれないが。

SELECT a,count(*) FROM text GROUP BY a,b;

以後、DBのみの話ならDB板へ
■   PostgreSQLのことならここで聞け   ■
http://pc5.2ch.net/test/read.cgi/db/1091523132/
PostgreSQL & pgsql-jp ML 3テーブル目
http://pc5.2ch.net/test/read.cgi/db/1079771059/
373371
垢版 |
04/09/09 22:19ID:xemAm0Ui
>372
意図したこととは違いましたが、そのSQL見てて、
ふと思いつき、解決できました。ありがとうございます。
374nobodyさん
垢版 |
04/09/30 06:39:58ID:???
データが8000件位入ったテーブルtestに
さらに8000件近いレコードを追加したいのですが
insert文をエクセルで8000個作ることまではできたのですが、
これをポスグレに読ませる際、一括でコピペするとパースエラーになってしまいました。
10件位づつこまめにコピペするとエラーは起きないのですが
時間がかかりすぎるのでファイルから読み込ませたいのです。
ググった所"copy"だと扱えるデータがタブ区切り形式らしいのですが
insert文が書かれたファイルを読み込ます事はできるのでしょうか?
PostgreSQL7.2.3です。
375nobodyさん
垢版 |
04/09/30 07:13:18ID:???
>>374
psql -f filename
376374
垢版 |
04/09/30 07:38:51ID:???
>>375
レスありがとうございます。
早速ググりましたが
psql -f filename db名で
http://jpug.postgresql.jp/document/pg721doc/reference/app-psql.html
にありました。
ありがとうございました!
377nobodyさん
垢版 |
04/10/05 15:22:15ID:xTnP4bvw
不安なのでちょっと質問して宜しいでしょうか。
timestamp型のmodify_dateというカラムがあったときに
たとえば、2004年11月4日のデータを取りたいというときは
where to_char(modify_date,'YYYY/MM/DD) = '2004/11/04';
という風にしてるのですが、これよりもっと最適な検索法?というのが
ありましたら教えて貰えますでしょうか。
to_charで一度charに変換してるから速度的にどうかなぁと思ってるのですが…。
378nobodyさん
垢版 |
04/10/05 15:37:46ID:???
>>377
date型にキャストした方が速いかも。
WHERE modify_date::date='2004/11/04';
379nobodyさん
垢版 |
04/10/05 15:41:36ID:???
>>378
おお!なるほど、そういうやり方があったんですね。
感謝ですm(_ _)m
380378
垢版 |
04/10/05 15:43:11ID:???
>>378
あ、この方法だと、'2004/11/04'もdate型に変換するだろうから、
結局>>377とあまり違わないのかな?
俺はこの方法を用いているのだけど。

381377
垢版 |
04/10/05 15:46:28ID:???
>>380
377では速度の最適を求めるような書き込みになってしまいましたが
to_charでYYYY・・・・と変換するのに抵抗を感じてしまって他のやり方が
あればと思って質問したので、十分満足しています。もっと最適なものが
あれば尚いいとは思いますが、378さんのやり方を使っていきたいと思います。
382nobodyさん
垢版 |
04/10/06 11:37:12ID:???
ポストグレスキューエルそろそろ囓ってみようと思うんだけど
こんなボンクラはまずどんな本を読めばいいですか?
教えて下さい ISBNコードのみで( ´,_ゝ`)
383nobodyさん
垢版 |
04/10/06 18:22:48ID:???
初めてこのDBに挑戦したら
initdb: command not found
でいきなり死亡しました。
http://www.terra-intl.com/unix.html
↑に書いてある通りにやったら
7. のinitdb でだめだったんですが、
このような経験のある人いませんか?
384nobodyさん
垢版 |
04/10/06 20:34:45ID:???
>>383
せめて、使ったCygwinとPostgreSQLのバージョンくらい載せるべし。
このページと同一のバージョンが入手できた訳じゃないよね?
あるいは、PostgreSQL と Cygwin でぐぐって、新しめのページをを探すべし。

385nobodyさん
垢版 |
04/10/06 21:48:18ID:???
同じバージョンしか落とせなかったんですが、古いみたいですね。
新しいので朝鮮します。
386nobodyさん
垢版 |
04/10/07 12:14:27ID:???
http://discypus.jp/pukiwiki/pukiwiki.php?Cygwin%2F%A5%A4%A5%F3%A5%B9%A5%C8%A1%BC%A5%EB#content_1_15
今度はこのページ見てやったんですが、「Cygwin-X」なんてできないし、
デスクトップのcygwinを起動しても一瞬黒いウインドウが出るだけで
何も起こりませんでした。
昨日はできたbashもできなくなって余計ひどくなってしまいました。
環境変数は本当にシステム環境変数でいいのでしょうか?
昨日はユーザー環境変数で設定したんですが。
387nobodyさん
垢版 |
04/10/07 13:55:35ID:???
>>386
Cygwinなんて使わずに8.0入れたらだめなの?
388nobodyさん
垢版 |
04/10/07 14:22:42ID:???
特定のレコード(たとえばIDがaaaのレコード)がなければインサート、
あればアップデートという処理をしたいのですが、
selectであるかどうかチェック>insertかupdateに振り分ける
という方法以外に簡潔にやる方法はありますでしょうか?
389nobodyさん
垢版 |
04/10/07 23:12:25ID:???
>>386
cygserver や postmaster (postgres.exe) をサービスにしないのなら、
PATH や CYGWIN や TZ はユーザ環境変数で十分。

いま、Cygwinのデフォルトパッケージ + PostgreSQL を入れて、
cygservder, CYGWIN環境変数の定義、initdbの実行までやってみたけど、
特に問題なし。(OSはWindows2000 Pro SP4。作業時間は10分で完了)

もっとも、>>387 のいうとおり、8.0 beta 入れてもいいと思うけどな。





390386
垢版 |
04/10/08 01:27:12ID:???
http://allabout.co.jp/career/database/closeup/CU20040813A/
結局ここの通りにやって成功しました。
これからの問題はJavaServletでどう扱うのかってことだけです。
なぜかPHPの解説サイトばっかなんだけれども・・・。
8.0は解説無しじゃ難しいと思ったので、辞めておきました。
391nobodyさん
垢版 |
04/10/12 12:56:48ID:V57uzdCO
質問させて下さい

PostgreSQL(7.2.3)を使ったWebサイトを作っているのですが、最新項目の表示のため
日付(date型)でorder byしてますとえらく処理に時間がかかっています。
そういうものなのでしょうか?
日付でソートしたい場合の効率的な方法などがありましたら教えてください
392nobodyさん
垢版 |
04/10/12 13:56:22ID:???
まず、vacuumdb -f dbname やってミソ。
393nobodyさん
垢版 |
04/10/12 13:58:02ID:???
>>391
DATE型は内部的には4Byteの整数だから、DATE型にしてソートが遅くなると言うわけはないだろう。
一度、VACUUM FULL table;をしてみては如何だろうか。
394nobodyさん
垢版 |
04/10/12 18:57:34ID:???
>>391
型の問題ではないと思うが。そのカラムにインデックスつけてる?
395391
垢版 |
04/10/12 20:08:58ID:???
>>392,393,394
す、すいません
みなさんのご指摘の組み合わせでした。
indexつけたあとvacuumしてなかったせいみたい。。。
ご指摘ありがとうございました!
396nobodyさん
垢版 |
04/10/25 02:34:54ID:???
.open()
でエラーがたまに出るけど、みんなどうやって処理してます?
自分は2回リトライさせてるだけなんですけど、
「普通はこうやるんだ」みたいな決まりってあるんでしょうか?
397nobodyさん
垢版 |
04/10/25 04:26:44ID:???
>>396
でたことないので、出たら出ないように調べると思う
398nobodyさん
垢版 |
04/10/28 02:30:23ID:???
ポストグレスキューエルを信じて裏切られることはありまつか?
399nobodyさん
垢版 |
04/10/30 09:21:22ID:???
PostgreSQL ベースの某社の製品にならあるけど。
4007.4.5
垢版 |
04/10/30 20:56:47ID:???
Cygwinでselect文発行したら
<8B><64><A2>みたいな文字が白くなって大量に表示された
エディタみたいな画面になっちゃったことってあります?
qキー押さないと復帰できないし、selectの結果もでないし。

あとこれは別の環境でだけど、コマンドだと文字化けしちゃう。
WEB上ではちゃんと出てるのに、コマンドで飛び出すと文字化け。
ちゃんと↓入れて日本語入力もできるのに。
set kanji-code sjis
set convert-meta off
set meta-flag on
set output-meta on
Win2000のドメインに入った状態でセットアップして
そのままだと使えなかったからローカルで使ってるのが
いけないのかなぁ。
401nobodyさん
垢版 |
04/11/10 17:17:33ID:gbkcKDZ/
PHP4.39とPGSQL7.46で学習してます
トランザクションについて教えてください

BEGIN

SELECT テーブルAのid(SERIAL)のNEXTVALを取得

INSERT テーブルAに上で得られた値をidにいれて挿入

INSERT テーブルBに上で得られたidの値を挿入

COMMIT

以上のような流れがあったとしてテーブルAのidの唯一性は保証されてますか?
要はテーブルAにINSERTしたときのidを取得としてテーブルBにも入れたいんです。
NEXTVALを取ったあとに他のプロセスが参照してデータの整合性がなくなるのが心配です。
402nobodyさん
垢版 |
04/11/10 17:52:12ID:???
シーケンスの nextval で取得される値は
トランザクションとは関係なく
唯一性が保証されるように思う
403nobodyさん
垢版 |
04/11/17 16:35:31ID:???
(;´Д`)ハァハァ ポストグレスキューエルはマイエスキューエルにまだアドバンテージはあるのかい?
404nobodyさん
垢版 |
04/11/24 18:16:16ID:fGkcMHGT
SELECTして出てきた行に1から始まる連番をつけるってことできますか?
データのランキングをだしたいんですが。
405nobodyさん
垢版 |
04/11/24 19:32:44ID:???
PostgreSQL 7.4.6 の環境で質問があります。

データベースtest_db内のテーブルtbl_aのパーミッション
を以下のようになっているのですが、、、

test_db=# \dp tbl_a
Access permissions for database "test_db"
Relation | Access permissions
----------+-------------------------------------
tbl_a | {"=","postgres=arwR","nobody=arwR"}
(1 row)

パーミッション未設定のテーブルを上記の同じ設定にするには、
どのようにすれば、いいでしょうか?

test_db=# \dp tbl_b
Access permissions for database "test_db"
Relation | Access permissions
----------+-------------------------------------
tbl_b |
(1 row)

406405
垢版 |
04/11/24 20:46:16ID:???
>> 405 の件は、自己解決しました。

grant select,insert,update,rule on tbl_b to nobody;
以上で実現しました。

板汚し失礼しました。
407nobodyさん
垢版 |
04/11/24 20:56:44ID:???
>>403
Myに比べて多機能だしいろいろあるだろ
>>404
できる
408404
垢版 |
04/11/27 22:42:48ID:???
>>407
具体的にどうやるんですか?マニュアル読み漁ってもわかりません。
サブクエリで連番つくる方法は検索して見つかったんですけど
もっと簡単にできないものかと。
409nobodyさん
垢版 |
04/12/03 01:31:36ID:2+kl6sm2
カラム内のデータを置き換えすることはできないものでしょうか。

イメージとしましては、

update table_name set f =~ s/abcde/qwert/g;

こんな感じのようなことをやりたいのですが、説明がどうもうまく
なくて申し訳ありません。

ご教授いただければ幸いです。
宜しくお願いします。
410nobodyさん
垢版 |
04/12/03 02:07:28ID:???
お主の望みは正規表現置換かや?
ならば、PL/Perl などを使ってユーザ定義関数を作れ、とのご神託である
411nobodyさん
垢版 |
04/12/03 10:44:31ID:2+kl6sm2
>>410
SQL内でなんとかできないものでしょうか。
フィールド値の内容を丸まる変更は当然出来ますが、
likeを使用しつつもどうにかできないものかと模索中で
ございます。
412nobodyさん
垢版 |
04/12/03 12:23:36ID:???
strpos() と substr() をうまく組み合わせればある程度までは行けるかもしれんが、
g オプションは難しそうだなあ。

お告げに従って PL/Perl で書くと、よくわからんが、こんな感じ?

CREATE FUNCTION chikan(text) RETURNS text AS '
my ($mojiretsu) = @_;
$mojiretsu =~ s/abcde/qwert/g;
return $mojiretsu;
' LANGUAGE plperl;

update table_name set f = chikan(f);
413nobodyさん
垢版 |
04/12/14 15:59:09ID:2o4fy8y0
>>410>>412
ERROR: Unrecognized language specified in a CREATE FUNCTION: 'plperl'.
Recognized languages are sql, C, internal, and created procedural languages.

となったので、どうやらPL/Perlが入っていないみたいなので、入れる権限のない
私なりに何か他に方法がないか探してみました。

http://www.nanbu.com/~nanbu/keizi_show1_2.php?category1key=&keizikey=1041937855000000006&PHPSESSID=8087763c1060187e12476afe32e0a60d

これでなんとか凌ぎました。
グローバルオプションこそつけられないものの、置き換えは何とかできるので
助かってます。

ご教授有難うございました。
414nobodyさん
垢版 |
04/12/16 13:06:24ID:qpxocizM
foo というテーブルで、hoge fuga hige moe
ちう2つのレコードがあります。

で、hoge fuga higeが3つとも同じレコードについては、まとめて1レコードとみなし。
fooテーブルが何レコードあるか調べたいのですが、
どうゆうSQL文を書いたらよいのでしょうか?
select sum(*) from favorite group by hoge, fuga, hige
とやってもだめでした(そりゃそうだよね。。。)

どなたか教えていただければ幸いです。
415414
垢版 |
04/12/16 13:07:38ID:???
訂正:
>foo というテーブルで、hoge fuga hige moe
>ちう2つのレコードがあります。

foo というテーブルで、hoge fuga hige moe
という2つの「フィールド」があります。

すみません
416414
垢版 |
04/12/16 21:08:42ID:???
回答ないようなのでDB板逝ってきます
417nobodyさん
垢版 |
05/01/19 17:22:21ID:???
ゲイツOSに対応した、postgreSQL8
キタ━━━━(゚∀゚)━━━━ッ!!
418nobodyさん
垢版 |
05/01/21 13:24:22ID:DguRcNyC
フィールドが一個だけのテーブルが必要なんですが
こういうことって変ですか?
419nobodyさん
垢版 |
05/01/21 15:11:06ID:???
>>418
それだけの情報で何をどう答えろと?
そうですか、では私はエスパーですか
420nobodyさん
垢版 |
05/01/22 02:07:24ID:???
>>418
必要なのなら変ではない。
必要ないのにあるのなら変。
421nobodyさん
垢版 |
05/02/01 16:43:18ID:HYaKzyWg
vacuum fullを実行すると2〜3時間ぐらいかかり、
しかもその間、httpdに完全に接続できなくなります。
vacuum fullって、そんなもんなのでしょうか?

vacuumしないと、3日もしないうちに重くなってDB接続エラーでまくります。
3日1回httpd止めて作業となると大変なので軽減させたいのですが、
何か良い方法があれば教えてくださいm(_ _)m

構成は、こんな感じです。
Xeon2.8GHzDUAL
メモリ2GB
HDD120GB
Linux-FedoraCore2
 ・apache_1.3.33
 ・postgresql-7.4.5
 ・php-4.3.9
レスを投稿する


ニューススポーツなんでも実況