トップページ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
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 ***
と出て先へ進めません。何か間違ってますでしょうか。
0361nobodyさん02/07/03 23:31ID:???
>>360
自分で書いてるじゃないか。きみはそれでもアメリカ人か?
0362nobodyさん02/07/04 00:45ID:???
え〜と、なになに…。ばーきゃら型といんとふぉー型のどちら向けに'+'を使えば
ええか識別できんって書いとるね。
このコードは多分、ばーきゃら型のtotalにいんとふぉー型と解釈された100を加算
しようとしたからエラーになっとる。型を合わさなあかんてことやね。
ん〜。ほら、後ろのほうに「はっきり型変換してくれ」て書いとるがな。
0363nobodyさん02/07/07 02:35ID:xYfdkDpE
すいません、むちゃくちゃ初心者なのですが、検索してもわからず・・・
postgresのテーブルにそこにExcelデータをインポートしたいのですが、
ふつう、どうやってやるものなんでしょうか?

#アクセスのリンクテーブルでやればいいのかなとも思ったのですが、
postgresのテーブルにしか存在しないフィールド(serial型)があるもので、
ペーストしようとしても、怒られてしまいます。
0364nobodyさん02/07/07 05:00ID:???
おいらはCSVで保存してPerlでパースして、SQL作ってダラダラ流し込んでる。
0365nobodyさん02/07/07 07:18ID:???
無駄に検索する前にマニュアル読もうぜ、なあ兄弟。
http://www.postgresql.org/idocs/index.php?sql-copy.html
ポイントは一番下のユーザーコメントね。
0366nobodyさん02/07/07 15:04ID:???
psqlで、insert into hoge(myouji) values('山田');をペーストしようとしても、
「山田」の部分が「\123\332\222」のような文字列で表示されてしまいます。
(DBにはきちんと登録されている)
これはなぜなのでしょうか?

なお、Teraterm日本語版を使ってます。(送信、受信ともEUCに設定しています)
また、コピーした文字列は、明らかにEUCです。
0367nobodyさん02/07/07 16:24ID:???
>>366
ユーザの環境変数LANGは何?
0368nobodyさん02/07/07 16:34ID:???
createdbのときに--encodingを指定しる。
036936602/07/07 16:36ID:mEMpxNTI
言い忘れましたがFreeBSDです。
で、setenv LANG=ja_JP.EUC
したのですが、症状は変わらずです。。。
#自分、はずしてますでしょか・・・
0370初期不良02/07/08 00:52ID:???
>>363
漏れも基本的には >>365 と同じなんだけど、
Excel ってセルを選択してコピー、テキストエディタで
ペーストするとタブ区切りのテキストになる。
これ CVS で出力より便利。
これを COPY コマンドで流し込んで、最後に
SELECT setval('table_id_seq', (SELECT max(id) FROM table));
なんてやってやるといいかと。んでリレーションの関係で
INSERT しないといけない場合は >>364 の方がいいかと。
0371初期不良02/07/08 01:05ID:???
>>369
ports/japanese/postgresql7
のを入れると大丈夫だったぞ。
普通のでもなんとかできるかも知れないけど
最後の手段として。
0372nobodyさん02/07/08 15:29ID:Qyr7qWYN
>>363
1.awk か perl を使って先頭に行番号を入れたファイルを作る。
awk '{print NR "\t" $0;}' < source.txt > destination.txt

2.psqlを使ってインポートする
copy "target table" from "source.txt"

3.シーケンスをインポートした数より増やす
select setval('sequence name',10000);
0373nobodyさん02/07/08 16:42ID:???
>370
てゆーか、Excelってタブ区切りファイルに保存できるべ。ふつーに。
0374初期不良02/07/09 09:20ID:???
>>373
いや、それが面倒だから...
0375nobodyさん02/07/09 13:48ID:???
オラクルマスターやめて ポケモンマスターになりたいんだけど
なんかある?
0376nobodyさん02/07/09 22:48ID:???
失礼すマスタ
0377nobodyさん02/07/17 22:44ID:pXjI4Thg
まだ設計段階でPostgreSQLの実行環境がないのでここで
質問させていただきます。

テーブルの継承を行った際のバックアップですが、
上位から継承したテーブルを\copyコマンドで指定して
バックアップをとったら、上位の継承元のテーブルと
いっしょにバックアップされるのでしょうか? それとも
下位のテーブルのみが対象となるのでしょうか?
どなたかご教授お願いします。
0378nobodyさん02/07/18 00:51ID:???
ここらへんかな?

http://ml.postgresql.jp/pgsql-jp-old/pgsql-jp/2001Dec/msg00295.html
0379ごんた02/07/18 13:46ID:q5AT3Pt2
PostgreSQLと相性のいいJ2EEアプリケーションサーバってある?
ただしリーズナブルなやつで。。
0380nobodyさん02/07/18 16:34ID:zcxvlzIl
>>378
ありがとうございます。バックアップできる様ですので
検討してみます。あと継承機能を使った際、処理が増える分、
パフォーマンス的には落ちるのでしょうか?
その辺り触れたページが見つからなかったのでご存知の方
教えてください。
0381初期不良02/07/18 20:06ID:5Jy0ruag
XMLPGSQL って使ってる人いる?
ドキュメントが少ない気がするけど
SoftwareDesign のバックナンバー取り寄せた方がいいのかな?
0382nobodyさん02/07/19 14:31ID:???
>379
jbossかな?

>381
いまんとこ、DOMで事足りてるからねぇ。
0383nobodyさん02/07/20 00:24ID:???
postgres以外のユーザから
psql -U postgres
ってやったらパスワードも求められずにpostgresユーザでログインできたけど
PostgreSQLってそういうモンなの?
0384Name_Not_Found02/07/20 00:50ID:???
>>383
pg_hba.conf で設定しる!
0385nobodyさん02/07/20 08:48ID:???
local all password
host all 127.0.0.1 255.255.255.255 password

ってやってもパスワード聞かれないよ〜
0386nobodyさん02/07/20 17:53ID:???
pg_hba.confの上の方でlocal trustとかやってるに5万リペカ。
0387nobodyさん02/07/20 20:34ID:/K3zxWeq
PostgreSQLって -i 付けて起動しないと
DBD::PgやPHPで使えないんだっけ?
0388nobodyさん02/07/21 18:28ID:???
PHPは使える。
DBD::Pgは使ったことないから分からんけど、多分大丈夫。
0389Name_Not_Found02/07/21 23:55ID:???
>>388
man DBD::Pg すると
-i が必要だよーんって書いてあるよ。
0390初期不良02/07/22 03:25ID:???
>>389
postgresql 用 JDBC インターフェイスも -i が必要だね。
unix ドメインソケットに対応している PHP の方が珍しいのかも。
■ このスレッドは過去ログ倉庫に格納されています