PostgreSQL
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。
2001/05/09(水) 11:36ID:GHX.oCXo関連アプリケーション特有の話題は、以下のスレッドへ。
☆関連スレッド
[PHP + PostgreSQL]
http://corn.2ch.net/test/read.cgi?bbs=php&key=983128806
[PHP以外+PostgreSQL]
http://corn.2ch.net/test/read.cgi?bbs=php&key=988929199
[MySQL vs PostgreSQL]
http://corn.2ch.net/test/read.cgi?bbs=php&key=989341364
0458nobodyさん
02/08/10 00:30ID:???0459nobodyさん
02/08/10 00:43ID:K0BBB4AYテーブル設計が腐っています。
select 日時,面会者1 AS 面会者 from 面会記録テーブル
union
select 日時,面会者2 AS 面会者 from 面会記録テーブル
以上のようにして合成し、日時,面会者の形に整理して使いましょう。
まとめると以下のようになる(かも)
select a.ID,a.名前 from
(select 日時,面会者1 AS 面会者 from 面会記録テーブル union select 日時,面会者2 AS 面会者 from 面会記録テーブル) a,人物テーブル b
where a.ID==b.ID
0460nobodyさん
02/08/12 21:08ID:wOaAyc1y>テーブル設計が腐っています。
(´・ω・`)ショボーン 勉強してきます。
えっと上ので試したけどいまいち訳わからずです。
一度の面会で複数の人に会ったという設定なのですが、
このSQLでよいのですか?
DQNな質問でスマソ。
0461nobodyさん
02/08/14 04:37ID:MFUQQkABアプリケーション側で表示は工夫する必要はあります。
同じIDの人は、同じ面会であったことになるので、ソートして再構築。
SQLはwhere句がでたらめだったので、以下のような感じに訂正。(動作チェックはしていません)
select a.ID AS 面接ID,a.名前 AS 面接者名 from
(select 日時,面会者1 AS 面会者 from 面会記録テーブル union select 日時,面会者2 AS 面会者 from 面会記録テーブル) a,人物テーブル b
where a.面会者==b.ID
order by 面接ID
0462nobodyさん
02/08/14 10:47ID:???select m.日時, j1.名前 as 面会者1, j2.名前 as 面会者2
from 面会記録テーブル as m, 人物テーブル as j1, 人物テーブル as j2
where m.面会者1 = j1.ID and m.面会者2 = j2.ID
じゃダメ?
cross join がイヤなら適当に変えてね。
0463461
02/08/14 16:11ID:MFUQQkABいける。頭まわっていなかったらしい・・・
0464nobodyさん
02/08/14 21:30ID:/c+Z8KBo解決出来ました!有難う御座います。
>>461
どうもいろいろ意見有難うございました。unionの用法勉強してきます!
0465コギャルとHな出会い
02/08/14 22:08ID:udQrDzAC朝までから騒ぎ!!
小中高生
コギャル〜熟女まで
メル友
i/j/PC/対応
女性の子もたくさん来てね
小中高生大歓迎です
全国デ−トスポット情報も有ります。
全国エステ&ネイル情報あります。
激安携帯情報あります。
0466466
02/08/20 01:22ID:VsvDpbeqデータ-ベースを使用するデータ-ベース使用者の数だけPostgresのアカウントを発行するのが嫌だったので
"Administrator" と "User" という2つのアカウントだけつくり、
したにあるようなIDとパスワードを保持する別のテーブルを作って認証を行おうと思いました。
DataBase=# select * from lD_Passwd;
id | password
------------+----------
tanaka | abcdefg
satou | 0000000
guest | guest
上のテーブルにSelectの権限が与えられているのは"Administrator"(=管理者)のみで
その他のデータ-ベース使用者はすべてアカウント"User"を使うことになります。
ところがUserたちが認証する際、読み取り権限がないのでアクセスすることができません。
読み取り権限を与えるとすべての人のパスワードが見れてしまうことになります。
そこで、
関数をつくって、その中で権限をAdministratorにしてそのテーブルにアクセスして、
Idとパスワードが正しいかどうか判断したのち、戻り値(True or False)として
Userに返すという方法を考えていますが関数自体に権限を与えるといったような
簡単な方法はないでしょうか? また、根本的に間違っているのでしょうか?
マニュアルには見当たりませんでした。
どなたかご教授お願いします。
ちなみにデータ-ベースにはlibpgvbというDLLを使ってVBからアクセスしています。
0467nobodyさん
02/08/20 01:27ID:Yv31fq1Hなあ、この女どう思う?
0468httpd
02/08/20 18:26ID:cHWvWGpngrantしないとpermissionエラーになるんですけど(;_;)
いちいちgrantしたくないので助けてくださいm(_ _)m
要するにhogedbにhttpdでアクセスしたいだけなのですが・・・どこが違うの??
//ユーザー作成
createuser -d httpd
//変身!!
su httpd
//DB作成
createdb hogedb -U httpd
//インポート
psql -e hogedb < db.out
0470nobodyさん
02/08/21 11:57ID:2UYHGwouデータの移植は正常だったですか?
おいらんトコは、7.1.xのpg_dumpバックアップファイルが、一部のテーブルだ
けエラーでダメだった。
どーなんてんだ?いったい‥‥‥
0471nobodyさん
02/08/21 13:04ID:IYK8rA+AEUC 外の特殊な文字とか入ってない?
0472470
02/08/21 14:12ID:2UYHGwouないと思うんですけどねぇ‥‥
データの大元は、S-JISのテキストなんですけど、変換かけてEUC
にしてから入力にかけてますんで‥‥‥
0473httpd
02/08/21 16:30ID:ie5NkI8ZVersion覚えてないけどシーケンス発行がトラブった。
つーか、setvalでシーケンスの数字変更する時に。
最後の't'を外したら動いたけど……。
0474httpd
02/08/21 16:33ID:???やっぱり、これではhttpdの所有になっとらんのですね(T_T)なぜだ……。
//ユーザー作成
createuser -d httpd
//変身!!
su httpd
//DB作成
createdb hogedb -U httpd
0475nobodyさん
02/08/22 17:05ID:w2//Sq4yAというテーブルからBというテーブルへ項目をコピーしたいのですが、その際に
日付/時刻型の「2002/08/22 午前 12:12:12」というデータを「yyyymmddhhmmss」という型に
デコードしてコピーしたいのですが、どういった方法が挙げられるでしょうか?
0476nobodyさん
02/08/22 21:19ID:sZeyw1CT何のために?
DB に入れておくんだったら、日付型の方が便利。
時刻をフォーマットしたいだけなら to_char() を使うけど。
0477nobodyさん
02/08/22 23:17ID:WGWM2PPcユーザquotaのしばり受けるの?
Postgreの使えるレンタサーバ使おうと思ってるんだけど、HP容量にDB容量が含まれるのか知りたくて
0478_
02/08/23 14:03ID:???xreaですか?
0480nobodyさん
02/08/23 20:48ID:5qP9jqJhxreaのHPに、「データベースサイズ:目安は5メガバイトまで。」って書いてあるぞ。
HP容量と違うし
0481nobodyさん
02/08/23 21:39ID:5qP9jqJh0483nobodyさん
02/08/24 06:47ID:???無理。
initlocation使ってうまく容量制限かけられたとしても、制限にひっかかると
dbが壊れる。
PostgreSQL自体がデータベースごとの最大容量を指定できるようにならない限
りはどうしょうもないと思う。
0484nobodyさん
02/08/27 15:00ID:???念のため pg_class の中を削除したいユーザIDで検索すると、
pg_toast_XXXXXX_idx
pg_toast_XXXXXX
というデータが見つかります。これって何でしょう?
無視してユーザ消してしまっていいんでしょうか?
0485nobodyさん
02/08/27 15:28ID:???pg_*テーブルはPostgreSQLの内部テーブルなんでユーザーを消しても平気。
TOASTが何かを知りたいなら↓。
http://www.jp.postgresql.org/projects/devel-toast.html
0486484
02/08/27 15:59ID:???でも、とあるテーブルのオーナを削除したらまずいんじゃないの?
と思って試してみたら
%createuser hoge
%psql -U hoge hoge
hoge=#create table t1 (a int);
hoge=# \dt
List of relations
Name | Type | Owner
------+-------+-------
t1 | table | hoge
(1 row)
hoge=#\q
%dropuser hoge
%psql hoge
hoge=# \dt
List of relations
Name | Type | Owner
------+-------+-------
t1 | table |
(1 row)
hoge=#\q
%
あ、なるほど。表示されなくなるだけなのね。納得。
04877.2.2
02/08/27 23:49ID:yZsdlGNN0488nobodyさん
02/08/28 00:15ID:???7.2.2でサポートされてます?7.3からかな?
select timestamp( date(now()) );
通るようになったかな。7.2.1だと↑通らん。
SELECT CAST( now() AS date ), now()::date, 'now'::date::timestamp;
通るからまぁいいんだけど。
0489nobodyさん
02/08/28 06:15ID:???> ALSO NOTE!!! This is a security update. A number of security related
> bugs were fixed. The update is mandatory!!
ということなので、さっさとアップデートした方がいいよ。
>>488
7.2.xは基本的にメンテナンスリリースなんで新機能は入りませんです。
0490nobodyさん
02/08/28 06:40ID:???マイナーバージョンアップは、PGDATA領域そのまんまでも
OK?
0491nobodyさん
02/08/28 08:46ID:???OK
以下を参照ね。
http://www.jp.postgresql.org/sitess.html
0492nobodyさん
02/08/29 11:09ID:V8Nh7P6Z>>476さんありがとうございます。
項目の定義として、システム日付をデフォルトで入れるように
「日付 varchar(14) default to_char('now'::datetime, 'YYYYMMDDHH24MISS')」
という風に設定しているのですが、データを見ると日付の中にはテーブルを作成して
一番最初に取得したYYYYMMDDHH24MISSを何度も入れてしまいます。
名前 | 日付 |
--------------------------
aaa |20020829103253 |
bbbb |20020829103253 |
cccc |20020829103253 |
・
・
といった感じなのですが、このテーブル項目作成の定義は間違っているでしょうか。
0493nobodyさん
02/08/29 11:43ID:???http://www.postgresql.jp/document/pg721doc/user/functions-datetime.html#FUNCTIONS-DATETIME-CURRENT
0495nobodyさん
02/08/29 15:21ID:K7zpT3zeINSERT INTO "whatsnew" VALUES(
'2002-08-29',
'{"<a href="/">XXXX</a>を更新しました", "YYYY"}'
);
と書くと前半部分<a href="/が無視されます。
"のエスケープする方法しらないでしょうか?
0496nobodyさん
02/08/29 15:22ID:???0498nobodyさん
02/08/29 15:42ID:K7zpT3zeそれはやってみたんだけど、
テーブルの中身を確認したら無視されています。
0499nobodyさん
02/08/29 15:43ID:???0500497
02/08/29 15:55ID:???これじゃだめなのね? なんでだろうね。
あと、"と'を混在しているのはなぜ? 全部"でかいてみ。
0501495
02/08/29 16:08ID:???テーブルの中身は「{">XXXX</a>を更新しました","YYYY"}」です。
あと'と"を混合してるのは下のページの影響です。
http://osb.sra.co.jp/PostgreSQL/Manual/PostgreSQL-7.1-ja/arrays.html
0502497
02/08/29 16:11ID:???> '{"<a href=\"/\">XXXX</a>を更新しました", "YYYY"}'
0503nobodyさん
02/08/29 16:28ID:???テーブルの中身も変わらず…。
0504497
02/08/29 16:30ID:???0505495
02/08/29 16:48ID:???update date,
content text[]);
こんな具合です。
0506497
02/08/29 17:03ID:???<a href="/"> の、/ って、エスケープ文字と同じじゃない?
だから、エスケープはこうならないかな?
> '{"<a href=\"\\\">XXXX</a>を更新しました", "YYYY"}'
0507495
02/08/29 17:11ID:???ERROR: parser: parse error at or near "'"
ためしにこっちもやってみたけど
'{"<a href=\"\/\">XXXX</a>を更新しました", "YYYY"}'
こちらも駄目。
0508495
02/08/29 17:32ID:???'{"<a href=\"/\">XXXX</a>を更新しました", "YYYY"}'
とすれば、テーブルの中身は
「<a href=\"/\">XXXX</a>を更新しました", "YYYY"}」
となっていました。迷惑かけてごめんなさい。
0509497
02/08/29 17:50ID:???でも、解決したみたいなので良かったっす。
# これが MySQLスレだったらもっと良かったのに
0510495
02/08/29 17:53ID:???'{"<a href=\"/\">XXXX</a>を更新しました", "YYYY"}'
じゃなく
'{"<a href=\\\"/\\\">XXXX</a>を更新しました", "YYYY"}'
でした。
スレ汚し、スマンです。もうちょっと勉強してきます。
0511sas
02/08/30 04:37ID:T6Vbh/OnPostgresqlにログイン出来なくて困っています…。
postgresql-7.1.3 win32をインストールし、
initdb.exeを実行してデータベースを初期化し、
pgsvmgr.exeでデータベースサーバーを起動し、
psqlj.exeで、ホスト名localhost
ユーザー名 Administrator
パスワードはWindowsで管理者としてログインするときの
パスワードを入力しましたがログインできません。
色々調べてみましたが、原因がわかりません。
どうしたらいいでしょうか?教えてください。
0512nobodyさん
02/08/30 05:08ID:???0513sas
02/08/30 15:53ID:PK97+40Y使っているパスワードなので、
あってると思います。
0514nobodyさん
02/08/30 16:28ID:okP1fGcQそのまんまで他のクライアントからODBC接続(Accessでリンクする)はできないんでしょうか?
ODBC--呼び出しが失敗しました。
Could not connect to the server.
Could not connect to remote socket (#101)
っていうエラーがでるんですが・・・(Accessでリンクしようとした時)
0515nobodyさん
02/08/30 16:30ID:okP1fGcQ0516nobodyさん
02/08/30 18:15ID:???PostgreSQLのユーザーはWindowsのユーザーとは別。
pg_hba.confで検索しる。
>>514
Redhatは知らんが、デフォルトではTCP/IPでの接続はできない。
postgresql.confでtcpip_socket = trueする。
たぶん、パスワードとかの設定も必要だろうからその辺は適当に。
0517514
02/08/30 19:17ID:okP1fGcQうおおおおおお
のた打ち回ってた問題が解決したっ!
あんた神か!? ありがとう!
0518nobodyさん
02/08/30 20:44ID:8xSHI6ux0519nobodyさん
02/08/31 02:43ID:???ところが
SELECT pattern, count(pattern) FROM t1 GROUP BY pattern;
とやると、
ERROR: Unable to identify an ordering operator '<' for type '_text'
Use an explicit ordering operator or modify the query
と怒られてしまいます。ひょっとすると、と思って、
SELECT pattern FROM t1 ORDER BY pattern;
とやっても案の定、同じように怒られますた。
このあたりが配列の限界なのでしょうか?
ちなみにテーブルは以下のような形です。
CREATE TABLE t1 (
pattern TEXT[]
);
INSERT INTO t1 VALUES ('{"A", "B", "C"}');
INSERT INTO t1 VALUES ('{"A", "B", "C"}');
INSERT INTO t1 VALUES ('{"A", "D", "E"}');
:
:
0520nobodyさん
02/08/31 02:58ID:mK1R3E6Zナースステーションのあらゆる場所に仕掛けられた隠しカメラから、知られざるナースたちの秘密を映し出します!
http://210.188.193.18/agency/bnb/form.phtml?banner=wataru
0521nobodyさん
02/08/31 08:24ID:???operator < (text[], text[]) が無いのが原因。
自分で create operator してやればいいんじゃない?
でも、配列の各要素を別の行にできないかも検討してみるといいかも。
他のDBMSへも移植しやすくなるし。
0522nobodyさん
02/08/31 11:05ID:McY4kGnjテーブル作るときにデフォルトのSQL_ASCIIってのだと文字化けしてるんで
EUC_JPで作り直したらこんどはWebで表示したときに文字化けるように
なってしまって・・・どうすればいいんでしょうか・・・。
0523nobodyさん
02/08/31 11:09ID:Eh4H/Twd文字コードが統一できていないから化けるのだと思われ。
HTMLの文字コードをEUCにするか、PosgreSQLから出したデータをSJISなどに変更しろ。
0524nobodyさん
02/08/31 17:32ID:???contribとintarray,arrayあたり使えばできるよ。
ただ、配列使うとindex使われないからあまりいいスキーマ設計とはいえないね。
まだ
"ABC"、"ADE"とかで前方一致(LIKE)で検索した方がいいような。
0525nobodyさん
02/08/31 17:32ID:???contrib!の!
0526動画無料サンプル
02/08/31 22:55ID:AF4irkr1小学生、中学生、女子高生が【無料】で見れる!!
http://www.traffimagic.com/WIPE7MMLZCA/comein/NZKYA
0527123
02/09/01 02:40ID:Rn3wDJdFSQLはcse使っているけど,あれではストアド作ることしかできないよな。
いい開発環境がないと,どうもそもそも使う気になれない。
ただ,SQLにソースを書くのは好きではないので,PostgreSQLでもストアドはやっぱり使いたい。
誰かいい開発方法知らんかのぉ。
普段使ってるストアドはTransactSQL(SQLserver)になるが,
たとえば,こんなものを作るとする。
DECLARE @no int
SET @no = 1
SELECT *
FROM TABLE
WHERE no = @no
@no = 1 でSELECTするということ。
これをクエリマネージャとか使うと結果も見れる。
ストアドに変えようと思ったらそのまま,
上と下に Createprocedre [selectno](こんなんだっけ) go とかつけて,
SET = としているとこをパラメータ渡しに変えたらストアドになるしね。
こんな簡単なSQLだったら,一発で作れるだろうが,ちょっと複雑なもので
テストとか繰り返して,作ろうと思ったら,開発環境いるよな。
また,コンソールから exec selectno(1)
みたいにしたら,ストアドをキックできて,結果も見れる。
こんなことしながらの開発PostgreSQLで出来るのかな。
とりあえず,ストアド作った後にそれを実行するのが,
プログラムからしかできないのはきつい
0528nobodyさん
02/09/01 03:21ID:???ストアド作るごときエディタでええやん。
頭ん中で流れ考えるんだよ(w
それが面倒ならmssqlserverでも買ってなさいってこった。
pgaccessでやれることが限界では。
http://osb.sra.co.jp/PostgreSQL/Manual/PostgreSQL-7.1-ja/app-pgaccess.html
テキストベースでできた方が何かと便利。
遠隔操作とかにも都合がいいし、テストをちょちょっとスクリプトで書いたり。
0529522
02/09/01 18:41ID:/oI3M69SPosgreSQLから出したデータをSJISなどに変更
ってどうやるんでしょうか・・・
0530nobodyさん
02/09/01 21:06ID:???0531522
02/09/01 23:39ID:/oI3M69Spsqlで
SET CLIENT_ENCODING = 'SJIS';
とやってみたんですが、Webで表示してる方には変化がなくて・・・。
HTMLのCharsetをEUCにすると日本語はOKなんですが関係ない部分が
なぜか文字化けてしまいました。
0532nobodyさん
02/09/01 23:45ID:???@ラージオブジェクトを例えば
INSERT INTO t1 (id, oid) VALUES (1, lo_import('/tmp/hoge'))
で作ったとして、それを削除したいときには
DELETE FROM t1 WHERE id = 1
で削除するだけでいいんでしょうか?ゴミとかは残りませんか?
A上記の例でさらに
UPDATE t1 SET oid = lo_import('/tmp/hoge') WHERE id = 1
なんてしちゃった場合、元のラージオブジェクトはどこに行ってしまうのでしょう?
自動的に削除されるのでしょうか?ゴミとかは残りませんか?
0533522
02/09/01 23:50ID:/oI3M69S0534nobodyさん
02/09/06 02:31ID:tscmWiVv1カラムに1Gがのデータを入れると、8kのカラム容量制限に引っかからないですか?
0535nobodyさん
02/09/06 08:36ID:KP0wE/mN8kのカラム容量制限 は、7.1 で解決済み。
最新版使ってれば全く問題ない。TOAST という技術。
私はメールの本文とかを丸ごと1カラムに格納してる。
0536ななしし
02/09/06 12:16ID:o0uKxXbL残ります。
lo_unlinkをかけてあげましょう。
0538nobodyさん
02/09/06 18:21ID:6cS1MLb+ありがとうございます。
助かりました。
05398月のクリスマス ◆zzfy/JR2
02/09/06 18:37ID:zUklKDWI$result=pg_exec("select * from nwpersonal ");
を実行すると下記のエラーが発生するのですが
どうしたらよいのでしょうか?
分かる方よろしくお願いします☆
Warning: PostgreSQL query failed: ERROR: nwpersonal: Permission denied.
0541nobodyさん
02/09/08 09:08ID:???0542nobodyさん
02/09/08 12:44ID:???0543nobodyさん
02/09/09 01:15ID:Ek+d2LV7件数は1万件以上ですが、テキストファイル保存に比べて、
パフォーマンス上問題はないでしょうか?
0545nobodyさん
02/09/09 20:33ID:???しかし、作り込まれたRDBMSよりパフォーマンスが出るフラットファイルの
入出力を作るのは至難の技。
それに、ふつーに作れば、ネットワークの帯域の方がボトルネックになって、
I/Oなんてどっちもどっち。
イントラとかなら別だが。
0546nobodyさん
02/09/10 09:52ID:VSIVhwr4普通のスレッド型掲示板です。
スレッドを表示する場合はスレッドIDが一致するものだけ取り出そうかと。
0547nobodyさん
02/09/10 17:03ID:20uIzqy9Pear DBパッケージのStatementを用いた挿入がうまくいきません。
【PHP】質問スレッドとPHP+MySQLでたずねたのでマルチになりますが。。。
どなたも答えてくれませんので、またここで、質問を投げます。だめですか??
※日付型(書式:yyyy/mm/dd HH:mm:ss)は現在時刻を挿入する。
※日付型以外(文字列、数値型)はうまくいきます。
エラー内容
SQLエラー → ステートは37000
コードは以下です。
/**
* インサートテスト
*
* @access public
* @param ProductState $ps 製品状態情報
*/
function insert($ps)
{
// DB接続
$this->connect(); // $this->db = DB::connect( $dsn )にて取得。
// SQL文
$sql = "INSERT INTO user (id,name,date) VALUES (?,?,?)";
// Statement取得
print "date=" . date("Y-m-d H:i:s",time()) . "\n";
$stmt = $this->db->prepare( $sql );
// SQL発行
// $this->db->execute($stmt, array($ps->id,$ps->name,time())); //これもだめでした。
$this->db->execute($stmt, array($ps->id,$ps->name,date("Y-m-d H:i:s",time()) ));
// DB切断
$this->db->disconnect();
}
0548nobodyさん
02/09/10 17:05ID:20uIzqy9自分のイメージ的には、JavaのJDBCの様に使いたいのです。
よろしくお願いします。
0549nobodyさん
02/09/10 22:04ID:???日付のフォーマットが問題なら、
フォーマットするwrapper関数みたいのを作ればいいじゃん。
100% RDBMS依存を無くしたいなら PEAR に contribute しる。
0550nobodyさん
02/09/10 22:55ID:ecEmpk8F日付をフォーマットしたいのか?
to_char() 使え。逆の関数もあるぞ。
Postgres 提供の関数だから、SQL 中に記述できるぞ。
0551nobodyさん
02/09/11 06:26ID:MyJQslI1PostgreSQLはよくわからんのだが、
date("Y-m-d H:i:s",time())
DATE型は「年月日」までじゃないか?入力形式。
H:i:s は無視されるだろ。つか「フィールドの型がちがうぞ!エラー」じゃないか?
時分秒を扱うならTIMESTAMPにすれば?
0552nobodyさん
02/09/12 03:22ID:r6MxR56R0553nobodyさん
02/09/12 11:57ID:???0554nobodyさん
02/09/12 12:18ID:r6MxR56Rデータファイルはどこにあるの?
0555nobodyさん
02/09/12 12:43ID:???0556nobodyさん
02/09/13 17:18ID:39GWJCRQ平分パスワードで接続できるのですが暗号パスワードで接続できません。
つまりpg_hba.confでcryptとした後接続できません。
どうすればいいんでしょうか?
そもそもパスワード暗号化は可能でしょうか?
0557nobodyさん
02/09/13 20:30ID:???ドキュメント見れ。
■ このスレッドは過去ログ倉庫に格納されています