トップページphp
1001コメント345KB

PostgreSQL

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。2001/05/09(水) 11:36ID:GHX.oCXo
PostgreSQLについて語りましょう。
関連アプリケーション特有の話題は、以下のスレッドへ。

☆関連スレッド
[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
0261nobodyさん02/03/27 02:46ID:???
>>260
難しいんだねぇ・・・
ま、とりあえずビジネスベースでMySQL使うなら、大人しくライセンス買っといたほうがいいってことだね。
顧客的にもそのほうが後々、幸せだろうし。
0262nobodyさん02/03/27 02:55ID:???
>>260
売ったあとの信用問題とかあるしね。
金で解決できるのであれば。
0263nobodyさん02/03/28 04:46ID:xQXjNFYd
 MySQLは、ストアドとトランザクションとWAL(ノンアーカイブドREDO
ログ)の実装は終わったのかな?
0264hogehoge02/04/08 13:09ID:AYJuT8cH
pgsql-jpMLで話題になってる「pg_dumpのデータ欠落」問題って
デカイ話だと思うんだけど、なんでみんな冷静ですか。
MLにも出てるけど
ttp://www.sankyo-unyu.co.jp/Pool/PostgreSQL.htm
ここのパッチでみんな解決したのかなあ。
0265nobodyさん02/04/22 00:13ID:1DFRB74b
結局PostgreSQLとMySQLと両方勉強するはめになるのね、、、
0266nobodyさん02/04/22 00:30ID:OmlBepHH
>>265
そんなもんだよ。
私はPostgres と Oracle と MySQL と InterBase と パラドックス使ってる。
0267nobodyさん02/04/22 14:06ID:7LCMI0nt
PostgreSQL-7.2.1 と Access2000 接続がうまくいきません。
以下のようなエラーがでてしまいます。


ODBC--呼び出しが失敗しました。
Error while executing the query.
ERROR: tablename: Permission denied. (#7)


PostgreSQLは Redhat Linux 7.2 で動かしていて、
psqlでの操作、table作成、
同マシン上でのJDBC経由での操作は問題ありません。
また、Access2000でpsqlで作成したtableの一覧はでてきており、
テーブルのリンクは作成できてます。
しかし、そのテーブルのリンクを開こうとすると、上記のエラーが
出てきてテーブルの中身は見ることができません。
何が原因なのでしょうか?
0268nobodyさん02/04/22 19:57ID:???
パーミッションが原因です
026926702/04/22 21:01ID:???
ネット上に転がってたdllを使ったらうまくいきました。
0270nobodyさん02/04/23 16:58ID:ScEW9CB6
マルチバイトって言うか日本語の検索なんですが
name | ocupation
鈴木一郎 | 野球選手
鈴木三郎 | タバコ屋
鈴木一郎 | 野球選手
鈴木次郎 | 魚屋
鈴木宗男 | 政治家
に対して
SELECT * FROM a_table WHERE name = '鈴木一郎';
した場合、全部出て来ちゃいます。
LIKE や "~" など正規表現では問題ないのですが。このためGROUPもできないのれす。
7.1の時は自分の環境じゃ起きなかったのに7.1.3からそうなるようになっちゃったです。
今まで放っておいたんですが、やっぱり治したい…。もちencodingはEUC_JPなんですけど。
027127002/04/23 17:25ID:ScEW9CB6
今、自分でちょっとやってみたんですが、どうも
例えば 鈴木喜三郎、田中一郎、大林素子を含むレコードに
鈴木一郎をSELECTした場合、鈴木喜三郎以外、全部出る…
田中一郎をSELECTした場合、 鈴木喜三郎以外、全部出る…
どうもSTRING長しか見てないような気がする…
0272nobodyさん02/04/23 22:27ID:us8x58hp
>>270
 環境作って試験しましたがなりません。
 実験手順は以下です。

1.PostgreSQL 7.13 を準備
2.SQL: create table house (name varchar(100),occupation varchar(100));
3.EUC/TAB区切りで >>270 の一覧を作成
4.\copy でインポート
5.SELECT * from house where name='鈴木一郎';

 もし本当なら PostgreSQL Users-ML の方にポストするべきです。
 入力した日本語文字コードがEUCかチェックを希望。
0273nobodyさん02/04/23 23:07ID:???
MySQL-Max4.0.1がこんなに凄いとは知らなかった...
http://www.mysql.com/news/article-91.html
http://www.eweek.com/article/0,3658,s=708&a=23115,00.asp
http://www.eweek.com/slideshow/0,3018,sid=0&s=1590&a=23120,00.asp
0274nobodyさん02/04/24 00:57ID:AExlUipD
>>273
 トランザクションも、オンライン・アーカイブ・ログも、ストアド・
プロシージャーも無いデーターベースを凄いといわれても・・・。
0275nobodyさん02/04/24 02:28ID:???
あれ? Maxはトランザクションはあると聞いたけど。
0276nobodyさん02/04/24 10:40ID:zrCVc2f4
>>274
MySQL-Max(InnoDB)はトランザクションに対応してますよ。
コンパイル時にそう設定されているだけなので、MySQLとMySQL-Maxは
お好みに合わせて使い分けることになると思います。
0277nobodyさん02/04/24 10:42ID:zrCVc2f4
>>274
ストアド・プロシージャーがなくても困ることはほとんど無いですよ。
それに頼る設計方針を見直すべきだよ。
0278nobodyさん02/04/24 10:46ID:zrCVc2f4
>>274
ベンチマークにエントリさえもされないPostgreSQLの立場って。
0279nobodyさん02/04/24 12:48ID:PorNOKJ/
 有料の低機能DBのMySQLなんか使えんと思われます。
 PostgreSQL使いましょう。

 まあ、MySQLの劣っているところも理解できない厨房であれば、
利用もやむを得ないけど。

>>276
 トランザクションを利用すると、劇的に遅くなるよ。
 一気に処理が複雑になるからね。だからMySQLの特徴が消える。

>>277
 複雑な演算で速度出すときには必要です。
028027002/04/24 14:51ID:YiGTDcvn
>>272
ありがとうございます。お手数を感謝いたします。
入力した文字コードもEUCなんですが、PostgreSQL Users-ML に
ポストするしかないのですか。トホホ。
0281nobodyさん02/04/24 15:18ID:???
MySQL って有料なの?
0282nobodyさん02/04/24 15:44ID:PorNOKJ/
>>281
 商用利用は有料。詳細は調べてくれ。
0283nobodyさん02/04/24 17:40ID:zrCVc2f4
>>282
GPL?
0284nobodyさん02/04/24 17:42ID:zrCVc2f4
>>279
何か資料ありますか? 無いんでしょ?
また、トランザクション入れてもほとんど変わらないですよ。
また、複雑な演算処理の例を教えてください。
0285nobodyさん02/04/24 17:44ID:zrCVc2f4
>>279
WEB+DB PRESS の vol.4 の記事読んでみな。
0286nobodyさん02/04/24 17:45ID:zrCVc2f4
>>279
Delphi6 や Kylix や C++Builder6 のdbExpressでは、MySQLへの接続は
サポートされているけど、PostgreSQLへの接続はサポートされていない
んですよ。なんとかしてくれ。
0287nobodyさん02/04/24 18:29ID:zrCVc2f4
Googleに聞きました

What is the most popular RDBMS? Is it MySQL?
約3,410件

What is the most popular RDBMS? Is it PostgreSQL?
約2,860件

MySQL beats PostSQL. :-)
0288nobodyさん02/04/24 20:36ID:/PnzmLOG
初歩的な質問で申し訳ないんですが、データがあれば更新して、なければ挿入す
るって簡単に書けないのでしょうか ?

例えば、社員名簿のアプリケーションで、社員番号と社員データを元に更新/挿入
をやりたいんです。今は、更新してみて更新されたタプルが 0 だったら、改めて
挿入してるんですけど、1つの SQL で書けないのでしょうか ?
0289nobodyさん02/04/24 20:43ID:???
おらにはUPSERTってのがあるって聞いたけどな。
029028802/04/24 21:19ID:???
う〜〜〜む、UPSERT は Ora9i でサポートかぁ...。じゃあ、Ora9i
でって...、いくわけないですよね。ほとんど数人でしか使わないローカ
ルデータベースだしねぇ。まあ、Ora8x でサポートしていないぐらいだか
ら、大体の DB じゃサポートしてなさそうですね。心おきなく、今までの
方法 (Update + Insert) で行きます。ありがとうございました。
0291nobodyさん02/04/25 11:06ID:???
制限か何かで 120996 という数字に思い当たるフシのある人います?

0292nobodyさん02/04/25 14:58ID:e1QGMeHX
>>290
 ストアド・ファンクションをPLPGSQLで書けば代わりになります。

1.挿入/更新対象をSELECTする
2a.存在 →
2b.非存在 →

 PostgreSQLオブジェクトは複雑になりますが、処理速度は向上します。
 プログラム側で2回のクエリーが1回にで済むからです。
 またプログラム側の処理が単純になりますね。
0293nobodyさん02/04/29 00:48ID:oAtRhIR1
ストアドいいんだけどなぁ。。。

関係ないけど、Ora系の業務だと、ストアドで10Kとかあるんだよね、よく。
デバッグ環境ももろくにないから泣きそう泣きそう…。
0294nobodyさん02/05/03 21:41ID:/0wZrz3p
>>279,292

Postgresのファンクションって、Oraなんかと違って、
コンパイル(?)して無いよね?

実行時のスピードって、向上してない気がするんだけどな、俺。
それとも単に、俺のクエリがへぼイだけ?


#久々に覗いたら、にぎわってるなココ。

0295名無しさん@XEmacs02/05/03 22:11ID:???
でも、C言語でも書けるし。
特に処理が重くなりそうな場合、Cで書くのもいいと思いますヨ。
0296nobodyさん02/05/12 03:17ID:bKfXEgEZ
CSE(Common SQL Environment)を使っているのですが、
postgresのテーブルの定義書を出力しても、
出力されたExcelファイルの中に、外部キーに関する情報が含まれていません。
これは、CSEのバグ(仕様?)なんでしょうか?
あるいは自分の設定かなにかが違うのでしょうか?
0297nobodyさん02/05/12 04:17ID:RwG45MrU
>288
MySQLにはreplace intoというのがあるよ
0298nobodyさん02/05/12 20:30ID:jWhbjITO
>>249 亀レスだが、スクリプトなんぞいらん。さくっとSQL使え

create table moto (c2 int,c1 int);
create table shin as select c1,c2 from moto;
drop table moto;
alter table shin rename to moto;
0299nobodyさん02/05/12 22:38ID:q4IRLeqO
>>298
 制約が消えませんか?
0300nobodyさん02/05/13 14:00ID:bpGvMvHb
>299 じゃあ、ちゃんとしたCREATE TABLEを書いて、
INSERT INTO shin SELECT c1,c2 FROM moto
でいいんじゃないの。
ALTER TABLEで地道に制約付け直すでも良し。
SELECTで指定できるのに列の順序が気になる程度のもんなら、
別に大した設計してないだろ、と煽ってみるテスト(w
0301299 (!=249)02/05/14 01:45ID:VEi3hWaX
>>300
煽りに乗ってくれてありがとう。
030230002/05/14 04:06ID:???
>>301 どういたしまして。
0303nobodyさん02/05/14 10:27ID:dvbYPP4R
質問なんですが、PostgreSQLで以下のVIEWを作成します。

CREATE VIEW v_name AS
SELECT * FROM TABLE WHERE start_date<='TODAY'

開始日が本日もしくは本日以下の範囲を取得するというものです。
通常のselectでは問題なく取得できますが、
例えば日付が明日、明後日となるとその範囲のデータが表示されな
くなります。
で、viewをまた作成しなおすと表示されます。なんで??
TODAYはview作成時の日付で固定となってしまうのでしょうか?

お願いします。
0304名無しさん@XEmacs02/05/17 09:54ID:???
curret_dateを使うべきなのでは?
todayとかnowは、作成時点での日時に固定されます。

http://osb.sra.co.jp/PostgreSQL/Manual/PostgreSQL-7.1-ja/datatype-datetime.html
0305nobodyさん02/05/17 11:03ID:fkHus637
ウェブサーバ・データベース利用者に、バックアップ・リストア作業をする機構を作るには、
どうすればよいでしょう。

: 専用データベースクライアントを作る
最近じゃ JDBC とかデータベースを簡単に利用できる API があるので、いいと思う。
: Web 上で、ファイル送信のフォームを用いてCSVファイルを送信してもらい、しかも PHP の system 関数を起動させる
スクリプトを書く
なぜか、俺がやってみたところ、起動しなかった。「system('./thread.rb > /dev/null &'); 」
0306名無しさん@XEmacs02/05/17 20:21ID:???
pg_dump/pg_restoreをするCGIを作ればいいんちゃうん?
0307nobodyさん02/05/19 18:43ID:khVJsytm
C言語からPostgreSQL(7.2.1)を操作したくて、http://www.atmarkit.co.jp/flinux/rensai/postgres03/postgres03.html

ここを参考にソースをコンパイルしてみることにしました
PHPやpsqlからは、操作できたので、postgreSQLはきちんとインストールできてるものと思ってました。

しかし、いざコンパイルしてみると
dbconn.c:6:22: postgres.h: そのようなファイルやディレクトリはありません
と出されたので、postgreSQL7.1.3のソース元から、postgres.h をコピーしてきて

またコンパイルしてみると、更に何かが足りないとでます。
ムカツイタので、includeディレクトリィーごと、全部、パスが通ったところにインストールしたんですが、それでも、最終的に

/usr/local/pgsql/include/postgres.h:48:24: utils/elog.h: そのようなファイルやディレクトリはありません
/usr/local/pgsql/include/postgres.h:49:26: utils/palloc.h: そのようなファイルやディレクトリはありません

とゆうのがでます。何かインストール段階で間違ってるところがあるでしょうか?
インストール手順は、普通に、./configure make make install です
0308nobodyさん02/05/19 18:49ID:a+gm9DOh
PHPの pg_last_oid() (旧 pg_getlastoid()) みたいな動作を
Javaでできないんかな?
0309名無しさん@XEmacs02/05/19 22:08ID:???
>307
> C言語からPostgreSQL(7.2.1)を操作したくて、

> postgreSQL7.1.3のソース元から、postgres.h をコピーしてきて

そこがダウトです。

ソースから手で取ってくるのではなく、インストールした /usr/local/pgsql/include に
あるはずです。

そのプログラムをコンパイルするときに、gcc に -I/usr/local/pgsql/include という
オプションを追加してください。
0310名無しさん@XEmacs02/05/19 22:23ID:DDSBJIFh
>308
7.2のjdbcからは、ResultSetクラスにgetLastOID()というメソッドが
追加されています。これでお望みの機能を得られるかと思います。
031130802/05/19 23:39ID:a+gm9DOh
>>310
どうもです。
org.postgresql.ResultSet のドキュメントに目を通さずに、
java.sql.ResultSet のドキュメントばっかり眺めてたから、
てっきり不可能なことかと思ってた。
0312nobodyさん02/05/21 06:09ID:A7Xa03Vw
>>308
どうもありがとうございます。
実際コンパイルするときは、gcc -o test1 test1.c -I$POSTGRES_HOME/include -L$POSTGRES_HOME/lib -lpq -lnsl -lcrypt こんな感じでコンパイルしています。
(環境設定で、POSTGRES_HOMEのパスは設定してあります)

それで、/usr/local/pgsql/include を見てみると以下の構成になっています。

c.h ecpgerrno.h ecpgtype.h lib libpq libpq-int.h pg_config.h postgres_ext.h pqexpbuffer.h sqlca.h
config.h ecpglib.h internal libpgeasy.h libpq-fe.h os.h pg_config_os.h postgres_fe.h sql3types.h

見てみると、コンパイルする時に必要な、postgres.hや、utils/ 以下のディレクトリなんかも見当たりません。

実際 http://www.atmarkit.co.jp/flinux/rensai/postgres03/postgres03.html ここのページの真中当たりを見てみると、
include "postgres.h"
include "libpq-fe.h" が必要と書いてあります。libpq-fe.hはあるのですが、postgres.hがないことから、>>307のような行為をしてみたのです。

0313名無しさん@XEmacs02/05/21 21:26ID:???
ていうか、postgres.h ってインクルードする必要性を感じないんだけど。
おいらは postgres.h インクルードしてないよ。
libpq-fe.h はインクルードしてるけど。
0314名無しさん@XEmacs02/05/21 21:27ID:???
あ、@ITの記事は6.5.3ベースだから細かいところが結構変わってると思う。
031531202/05/22 12:56ID:8kY9gZMf
>>313
解決しました。
インストール段階で、明示的に
gmake
gamke install
gmake install-all-headers
と打ち込んでやる必要があったみたいです

このように打つことで、全部のヘッダファイルがインストールされたみたいです。
いろいろアドバイスどうもでした。
0316nobodyさん02/05/27 11:39ID:3Jjx1/hO
7.2からPL/pgSQLで、REFCURSOR使えるから複数行を戻り値にできるっていうので
試してみたんだけど、これって作成した関数を普通のSELECTで使えないものなの?
サンプルだとわざわざFETCHしてるし。やりたいのは

CREATE OR REPLACE FUNCTION gethoge(int4)
RETURNS REFCURSOR AS '
DECLARE
ret REFCURSOR;
BEGIN
OPEN ret FOR SELECT * FROM hoge WHERE c1 > $1;
RETURN ret;
END;
' LANGUAGE plpgsql;

SELECT gethoge(4);

ってしたら複数行返してくれると嬉しいんだけど。SQL関数のSETOF使うと
妙にキャストしないと駄目だし。誰か詳しい人情報きぼんぬ。
0317nobodyさん02/05/29 02:44ID:VbNebk4I
取り敢えず、サンプルどおりだと次のようになる。

CREATE OR REPLACE FUNCTION gethoge()
RETURNS REFCURSOR AS '
DECLARE
ret REFCURSOR := ''r1'';
BEGIN
OPEN ret FOR SELECT * FROM hoge;
RETURN ret;
END;
' LANGUAGE plpgsql;

BEGIN;
SELECT gethoge();
FETCH ALL IN r1;
END;

で、本当は>>316に書いたように
SELECT gethoge();
だけで結果を取得したいんだが、詳しい人引き続ききぼんぬ。

あるいはJDBCから
BEGIN;
SELECT gethoge();
FETCH ALL IN r1;
END;
を実行した結果をResultSetに入れる方法でもOKです。
0318nobodyさん02/05/29 04:06ID:???
できました。

CREATE OR REPLACE FUNCTION gethoge()
RETURNS REFCURSOR AS '
DECLARE
ret REFCURSOR;
BEGIN
OPEN ret FOR SELECT * FROM hoge;
RETURN ret;
END;
' LANGUAGE plpgsql;
0319nobodyさん02/05/29 04:07ID:???
呼び出すJavaのコード

import java.sql.*;

public class test {
public static void main(String[] args) {
try {
Class.forName("org.postgresql.Driver");
} catch (Exception ex) {}

try {
Connection conn =
DriverManager.getConnection(
"jdbc:postgresql://localhost/iruka",
"iruka",
""
);

Statement stmt = conn.createStatement();
ResultSet rs;
0320nobodyさん02/05/29 04:08ID:???
String sql = "begin; select gethoge()";
rs = stmt.executeQuery(sql);
rs.next();
String cursorName = rs.getString(1);
sql = "fetch all in \"" + cursorName + "\"; ";
rs = stmt.executeQuery(sql);

int c1;
String c2;

while(rs.next()) {
c1 = rs.getInt("c1");
c2 = rs.getString("c2");
System.out.println(c1 + " : " + c2);
}
sql = "end;";
stmt.execute(sql);
rs.close();
stmt.close();
conn.close();
}
catch(SQLException ex){
ex.printStackTrace();
}
catch(Exception ex){
ex.printStackTrace();
}

}
}
0321nobodyさん02/05/31 15:27ID:VOysfiXS
おい、お前ら pg_log が800Mを超えて困っています。
どうしたらいいんですか。Version は6.5.3です。
調べた範囲では消すとまずそうなのですが....
引き継いだシステムなので、バージョンアップとかも
ためらわれる...
0322nobodyさん02/05/31 19:22ID:???
ディスクを増設してシンボリックリンクで流す。

あるいは pg_dumpall して $PGDATA 削除して initdb し直し。
0323nobodyさん02/05/31 19:30ID:???
>>322
ありがd
initdb してみるぽ。
データ飛びませんように。南無南無。

0324nobodyさん02/05/31 22:21ID:???
いや、データ飛びませんようにっつーか、
データ消して作り直しってことですヨ!
バックアップ取って。

気をつけてくださいヨ。おながいします。
032518:01 2002/06/0202/06/02 18:05ID:KL9d9Dk5
postgresql.orgつながらない(?)よぉ・・・
pingもとおらん・・・

cvsupしようと思ったのにぃ〜
032618:14 2002/06/0202/06/02 18:19ID:KL9d9Dk5
復活した・・・
0327nobodyさん02/06/04 15:01ID:???
すまそ、PHPと重複投稿になってしまうが、
これって全く求人ないんだけど、皆さんは何の仕事してるの?
WEB系って単純なHTMLの単価が低い仕事ならよく見かけるけど、
そもそも金のあるクライアント・つまり金になる仕事で
フリーのRDB使うような仕事って成り立つものなの?
0328nobodyさん02/06/04 16:56ID:???
>>327
PostgreSQLで金になる仕事してるが何か?
0329nobodyさん02/06/04 21:26ID:???
というか、RDBMSのライセンスに金がかからないぶん、
人間に金かけられるようになると思うのだが。
0330nobodyさん02/06/14 23:50ID:???
最近データベースを構築する必要があって postgresql を perlで叩く方法を1から
勉強しているんだが 何処を探してもphpの記述しか無いような気がするんですが
DBD::Pg は 一般的ではないんでしょうか?

ttp://member.nifty.ne.jp/hippo2000 は見たけど これくらいしか無いような気がする

あと具体的な質問
新しいtableを作るには
my($sql) = "CREATE TABLE suitedb (clumn_1 varchar(16))";
などとして
$dbh = DBI->connect("dbi:Pg……
とコネクトして
$que = $dbh->prepare("$sql");
$que->execute();
$que->finish();
とするように SQL文を丸々書くんですよね。

ttp://web.arena.ne.jp/suite/support/manual/cgi-db
0331nobodyさん02/06/15 02:12ID:???
>>330
情報が少ないのはマニュアル見れば十分だからでは。
0332nobodyさん02/06/15 08:03ID:ovPoj3sh
>>330
 マニュアル(man)に詳しく書いてある。

 $dbh->prepare ではなくて $dbh->do("CREAT TABLE ...");を使うほうが、
よいと思われ。結果が返って来るわけでないし、DDLは自動でCOMMITされる。

 あと $dbh->disconnect; を忘れるとエラーが出る(気がした)
 とにかく試すことだ。
0333初期不良02/06/15 20:17ID:Imc6xOen
なぜかテーブルの情報とかを取得する SQL が用意されてない
PostgreSQL ですけど、ML とかに書いてあった通り、
psql -E で \d とか \d table とかやって一応フィールド名と
フィールドタイプの取得はできるようになりました。
けど、プライマリキーがどのフィールドかってのがわからないんです。
pg_class とかトリガーとか調べれば... とか思っていろいろ調べて
みたんですが力尽きてしまいました。

プライマリキーがどのフィールドかわかる SQL って誰か書いた
ことありませんか?
0334nobodyさん02/06/16 02:06ID:8EBDLVWp
Yahoo!とかFreeMLみたいに、階層にページをわけて、
「aaa > bbb > ccc」みたいに現在地を表示させるには、
postgresだと、データをどうやって持たせるのが得策(定石?)なのでしょうか?
033533202/06/16 10:42ID:IP4vfeht
>>333
 反則技としては pg_dump を用いて、CREATE TABLE しているところを
確認すればよい。以下のような文が見つかるはずだ。

Constraint "initial_error_no_pkey" Primary Key ("initial_error_no")

>>334
 自己結合(プ
0336nobodyさん02/06/16 12:06ID:O6K9M+cM
>334
3階層のフィールドを用意するだけ
0337初期不良02/06/16 17:29ID:???
>>335
ありがと。なんかやる気出た。
0338初期不良02/06/16 17:41ID:???
キタ━━━━(゚∀゚)━━━━ ?
select indkey from pg_index
where indisprimary=true and indrelid=(
 select oid from pg_class
 where relname = 'tablename'
);
これで int2 の配列が帰ってきて何番目のフィールドが
プライマリキーかがわかる。あってる?
0339初期不良02/06/16 17:44ID:bMMKPpy6
さげてもた
0340初期不良02/06/17 09:59ID:???
>>338
よく見たら \d tablename で出てくるインデックス(tablename_pkey 等)を
調べればわかることだったんだな...
\d tablename_pkey とすると出てくる。
unique の場合は tablename_fieldname_key のようなインデックスができるので
\d tablename_fieldname_key
とすれば unique なフィールドがわかる。
けど、テーブル名から調べる場合は前に書いたやり方の方が良さそうだな。
unique の場合はこうすればよし?
select indkey from pg_index
where indisunique=true and indisprimary=false and indrelid=(
 select oid from pg_class
 where relname = 'tablename'
);
0341質問君Φ02/06/19 11:01ID:qIh4juAy
だれかシーケンスを自動作成するtriggerを作成するヒントくれ
insert delete updateの際に欠番なしでシーケンシャルに増減するような奴

作ってみたんだが、どうしても無駄な番号アトリビュートを使って
orderbyしてupdateするという陳腐な方法しか思いつかん
もっとスマートに出来るはずだ。
よろしこ
0342初期不良02/06/20 00:04ID:???
>>341
ちょっと意味が分からんのだけど
serial で delete すると穴が空くけどそれを詰めたいって事?
0343初期不良02/06/20 00:05ID:???
>>342
俺のも意味が分からんな...
serial 型のフィールドでシーケンスをつくるとって事ね。
0344質問君Φ02/06/21 13:36ID:???
お前あたまいいいいいいいいいいいいいいいいいいいいいいいいい
そう言うこと
0345初期不良02/06/21 13:44ID:???
>>344
どういうの作ったかみしてケロ
0346nobodyさん02/06/25 03:48ID:XBDHwftN
データベース内に指定したものがあるかないかで処理を変えるプログラムを作ろ
うとしています。とりあえず以下のようなものができあがりましたが、もっと簡
単で効率のよい方法ってありますか?

selectrow_arrayref()よりもこの場合に適したものがあるんじゃないかと思って
訊いてみました。

use DBI;

$string = "文字列";

$dbh = DBI -> connect ("dbi:Pg:dbname=testdb", "a");
if ($dbh -> selectrow_arrayref("select * from images where url = '$string'")) { print "ある\n"; }
else { print "ない\n"; }
$dbh -> disconnect;
0347nobodyさん02/06/25 03:56ID:???
>>346
もしそのあとに何かDBでするんだったらPL/pgSQLで書いたほうが
いいとは思うが、Perlからやるんだったらこうか?

my $dbh = DBI->connect(...);
my $sth = $dbh->prepare( 'SELECT 1 FROM images WHERE url = ?' );
$sth->execute( $string );
if( $sth->fetchrow_arrayref ) { # 多分$sth->rowsでも平気かな
print "ある\n";
} else {
print "ない\n";
}
$dbh->disconnect;
0348nobodyさん02/06/26 01:44ID:WIsWhSE/
>>347
なるほど。
ああ…まだまだ勉強不足…。
ありがとうございました。
0349nobodyさん02/06/27 18:35ID:eHTNEubk
インストールしてみたがまともに動いてるのかまったくわかりません。

php4とpostgresqlが入ってたらまともに動くという
超簡単な環境検証用スクリプトみたいなものありませんかね?
本当に小さいものでかまわないです。
php4とpostgresqlに詳しい方であっという間に作れる方いませんか?
0350nobodyさん02/06/27 21:37ID:fDXVhhFf
>>439

まずは PHP を捨てるところからはじめよう。
0351nobodyさん02/06/28 00:10ID:???
>>349
てめー、おちょくっとんか氏ね。
0352nobodyさん02/06/28 07:27ID:xBL4mzWk
>349
逝ってよし
0353CHANCE FOR EVERYONE02/06/28 17:31ID:hU48lsFK
インターネットは使い方次第で個の力を何倍もの力に変えることが可能です。
費用対効果で他の媒体にこれより優れたものは無いでしょう。
長い目で見ても素晴らしいネットワークビジネスの紹介!!
私たちの参加しているネットワークビジネスは 在庫をもつ必要がなく、
製造メーカーの製品を直接広めるものです。
私たちのグループは、製造会社の製品をHPとメールという媒体も活用して、
低価格、高品質なよき製品を広めようという集まりです。
流通コストを消費者に還元して製品を広めるというこのシステムは、
何人かの識者が本などで発言しているのを読んでみると、
人間的かつ将来有効なシステムを創っていける可能性の大きいものだと感じます。
実際、有名な大会社AT&T、GM、マスターカードなども採用しだしています。
興味のある人には、ぜひ参加して一緒にやってみましょう。
以下のホームページでの説明も御覧ください。
http://ailove22.fc2web.com/lpd/index.html
0354nobodyさん02/06/29 10:20ID:???
>>353

>インターネットは使い方次第で個の力を何倍もの力に変えることが可能です。
>費用対効果で他の媒体にこれより優れたものは無いでしょう。

誰だって知ってる

>長い目で見ても素晴らしいネットワークビジネスの紹介!!
>私たちの参加しているネットワークビジネスは 在庫をもつ必要がなく、
>製造メーカーの製品を直接広めるものです。
>私たちのグループは、製造会社の製品をHPとメールという媒体も活用して、
>低価格、高品質なよき製品を広めようという集まりです。

禿げしく既出。

>流通コストを消費者に還元して製品を広めるというこのシステムは、
>何人かの識者が本などで発言しているのを読んでみると、
>人間的かつ将来有効なシステムを創っていける可能性の大きいものだと感じます。
>実際、有名な大会社AT&T、GM、マスターカードなども採用しだしています。

さらに既出のシステムだと自分で公言してるし…。

>興味のある人には、ぜひ参加して一緒にやってみましょう。
>以下のホームページでの説明も御覧ください。

ところで、2chにコピペすることは経営的に見て正解なのか?
0355libpq02/07/01 00:16ID:???
libpq(PostgreSQL 7.2.1)を利用してWindowsのクライアントを作成中の者です。
マニュアルに目を通していると、PQconnectdb()のパラメータにrequiresslを
指定できるとあったのですが、Windowsのクライアントでこのパラメータを実際に
使用している方はいらっしゃるでしょうか?
0356nobodyさん02/07/01 10:01ID:b4xBEoiz
データベースに保管してある、Perlのcrypt関数で暗号化した文字列を
参照してパスワード認証を行う方法を考えています。

以下のスクリプトだとうまくいくのですが…。

print "名前:\n";
$name = <STDIN>;
chomp $name;
$pwd = <STDIN>;
chomp $pwd;
$dbh = DBI -> connect ("dbi:Pg:dbname=testdb", "test_user");
$pre = $dbh -> prepare ("select password from test_list where name = '$name'");
$pre -> execute;
while ($i = $pre -> fetchrow_array) {
print "データベースに保管してあるパスワード\t$i\n";
if ((crypt ($pwd, $i)) eq $i) { print "OK\n"; } else { print "NG\n"; }
}
$dbh -> disconnect;

while文内のif文を、$dbh -> disconnect;文以下にもってくると
うまく処理されません。どうやらwhile文で使った$iは、$dbh -> disconnect;
した後は消去されてしまうようです。

$dbh -> disconnect;した後もスカラ変数や配列に代入された値を
そのまま保持する方法ってありますか?

なんか見当はずれの質問をしているっぽくて不安なんですけど…。

よろしくおねがいします。
0357初期不良02/07/01 14:10ID:???
>>356
なんだか perl な話だが、$i = $pre -> fetchrow_array
って事は array が返ってきているわけだよな?
スカラーに入れるって事はリファレンスになっちまってないかい?
password しか select してないからそれでも使えるのかもしれないけど
本当は参照の代入じゃなくて @i に入れてきちんと値のコピーを取るべきだろね。
そしたら disconnect したあともコピーした方は残ってるでしょ。
0358nobodyさん02/07/01 15:01ID:???
>>356
>while文内のif文を、$dbh -> disconnect;文以下にもってくると
の意味がよくわからんのだが、

$dbh -> disconnect;
while ($i = $pre -> fetchrow_array) {
print "データベースに保管してあるパスワード\t$i\n";
if ((crypt ($pwd, $i)) eq $i) { print "OK\n"; } else { print "NG\n"; }
}
→ $dbhをdisconnectした後にfetchrow_arrayを呼んでも無効

while ($i = $pre -> fetchrow_array) {
print "データベースに保管してあるパスワード\t$i\n";
}
if ((crypt ($pwd, $i)) eq $i) { print "OK\n"; } else { print "NG\n"; }
$dbh -> disconnect;
→whileを抜けた後は$iがundefになっているので比較しても意味なし

のいずれかでは?
0359初期不良02/07/01 23:18ID:???
>>358
>whileを抜けた後は$iがundefになっているので比較しても意味なし
うう、これだぁね、たぶん。
俺の目が節穴だった...
0360nobodyさん02/07/03 23:21ID:9oP/71OL
updateで、set total = total+100みたいな書き方をすると、
Warning: PostgreSQL query failed: ERROR: Unable to identify an
operator '+' for types 'varchar' and 'int4' You will have to
retype this query using an explicit cast in ***.php on line ***
と出て先へ進めません。何か間違ってますでしょうか。
■ このスレッドは過去ログ倉庫に格納されています