• ベストアンサー

データベース接続制御関数について

同じような質問を昨日したのですが、色々調べた上でちょっと質問内容が 的外れな感じだったので再質問します (前回の質問は後ほど削除しておきます) 現在行っている課題として以下の事を行っています。 ・C言語とDB(PostgreSQL)を使ったデータの移動 今まではLINUXのREDHATにTeratermでアクセスを行い、その中でC言語から CSVファイルのデータを取得、新しいファイル(CSVファイル)に書き出 し、という処理を行ってきました。 今回はこの最初に取得するCSVファイルの部分をDB(PostgreSQL)に置き 換え、同じ実行結果を得るというのが最終目的です。 昨日まではちょっと分からなかったのですが、日本PostgreSQLユーザ会の 日本語ドキュメントや以下のサイトを参考にして考えていたのですが… ファイヤープロジェクト http://www.fireproject.jp/feature/postgresql/programing_libpq/query_select.html 自分なりの解決方法として (1)何か実行結果を得たい (2)調べて、参考サイトとサンプルコードを見つける (3)当たり障りが無いようなら、サンプルコードを実行してみる (4)エラーが出ても実行結果が得られるまで、やってみる (5)出た結果から何がどう動いているか検証する とやってみたのですが、今回は上記のサイト(ファイヤープロジェクト  libpqを使用したDBアクセスプログラミング)から持ってきたサンプルコードを gcc -Wall -I/usr/include/postgresql/ -lpq query2.c でコンパイルし生成された a.out よりコマンドで $> ./a.out 1024 "host=localhost user=Linux/Redhatの中で作ったユー ザー名 password=パスワード dbname=PostgreSQL内で作ったDB名" と打つと ### start connect 0 0 ### PQconnectdb OK ### end connect 0 0 ### ### start createTable 0 0 ### NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index 'hoge_pkey' for table 'hoge' ### end createTable 1 1 ### ### insert start 1 0 ### insert completed (1024/1024) ### end insert 7 6 ### ### start select 7 0 ### ########## SQL command status [SELECT] ########## 上記のような文が表示され (もしかしたら、少し違う所で記述が終わっていたかもしれません) column number 7113 is out of range 0..2 column number 7113 is out of range 0..2 column number 7113 is out of range 0..2 -1 (null) 0 のような文がとまらなくなり、Ctrl-Cで止めてみると、hogeというテーブ ルが出来ている状態です。 何も進まなかった昨日と比べれば、何か進んだ感もあるのですが、意味が 分からなくては勉強になりません。 ドキュメントやサイトの説明を理解し、サンプルコードを読み下すには もっとSQL文を理解しなくてはならないでしょうか? (私はPostgreSQLははじめたばかりで本を片手にインストール、設定、 ユーザー作成、データベース作成、ユーザー作成、テーブル作成、今まで のCSVファイルをテーブルにコピーの作業しかやっていません。) そしてやっている方向性は間違っていないでしょうか? できればこの課題の実行結果を得るためのヒントを頂ければ嬉しいです。 それでは宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • THX1138
  • ベストアンサー率51% (108/208)
回答No.2

なんかどっかで見たようなと……思ったら、前の続きでしたか。 初学者にはよくあることなんですが、エラーメッセージが出たら、 読んでください 今回の答えもそこにちゃんとあります。 (ものすごいオチだったりしますが……) > connect.c: 関数 `selectRecords' 内: > connect.c:359:6: 警告: コメント内に "/*" があります ココです。ソースを見てみましょう。 (スペースを全角に変えていますので注意) 359 /* フィールドインデクス,フィールド名/サイズの表示 */ メッセージは「コメント内に "/*" が」と言っていますが、 コメントはきちんと開始・終了しています。何ら問題はなさそうです。 でも警告が出ています。ということは、 それ以外の行がおかしい ことを疑う必要があります。 "/*" がコメントの中で出てきたと言っているのですから、 その手前のコメントがまだ終わっていないものと思われます。 ちょっと戻ってみましょう。 356 /* フィールド数 :/ 閉じてません(!) Shift キーを押し損ねたものと思われます。 したがって下記の部分全体がコメントとして解釈されます。 そして確かにコメントの中で "/*" が出てくることになるので 当該の警告が出たわけです。 356 /* フィールド数 :/ 357 fieldNum = PQnfields (result); 358 fprintf (stdout, "tuple has %d fields\n", fieldNum); 359 /* フィールドインデクス,フィールド名/サイズの表示 */ 引用元のページではわかりやすく色分け表示されていますが、 やはりこの部分全体がコメントとして解釈されて茶色くなってますね。 結果として変数 fieldNum には代入が行われません。 さらに宣言で初期値を与えていませんから、 どんな値が入っているかは不定です。 少なくともまともな値ではありません。 これが問題の原因です。

nrc52372
質問者

補足

回答ありがとうございます。 前回の続きで早くもつまずいてしまい、にっちもさっちもという感じで… 今回も分かりやすい回答で助かります。 なるほど!という感じですね。 コメントが上手くいかず、変数に上手く代入が出来ず不定の値が入ってしまった、という事ですね。 あまり理解していない物を動かしているとエラーメッセージの多さだけにやられてしまって、 気づきませんでした。今後注意します。 それで、前回は一段落ついたので一度質問を締め切ってしまったのですが (勉強なので自分で考えないと、とも思い)、 もうこれ以上時間を掛ける訳にもいかないので、ずばり質問します。 Q、このサンプルと前回のサンプル、私の得たい実行結果にするにはどっちが良いでしょうか? 自分では色々調べた結果。前回のサンプルをDB接続まで行った状態で list[ii].num = PQgetvalue(res,i,0); //項目1番目を取得 list[ii].san = PQgetvalue(res,i,1); //項目2番目を取得 list[ii].kok = PQgetvalue(res,i,2); //項目3番目を取得 ※list[ii].○○ … 今までCSVファイルのデータを格納していた構造体 と行っていき、データ格納関数(仮)として関数化。 そして今までのプログラム本体のデータを格納していた部分と入れ替え。 それを新しくファイルに書き込んでいくような流れなのかな? と思っているのですが… THX1138さんが説明不足やソースが無いと判断しかねる、といった場合は 私もあきらめて違う方法も考えていきたいと思います。 (全ソースは掲載しきれないので…) しかし出来れば、前回からとても効果的なTHX1138さんのアドバイスが欲しいと思っています。 もし、また時間がありましたらぜひアドバイス宜しくお願い致します。

その他の回答 (3)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.4

お役ご免のようなので退散しますがw  デバッガを使うことを覚えておくべきだと思います。 サンプルプログラムのポカはわたしも見落としてしまいましたが コンパイル時のメッセージをきちんと見ればわかるという話はあるものの デバッガでステップ実行すればどこがおかしいかすぐにわかったでしょう。 人によってはデバッガでステップ実行して動きを把握しろとかいう 意見もありますし。

nrc52372
質問者

補足

回答ありがとうございます。 <お役ご免のようなので退散しますがw  もうちょっとゆっくりしていって下さい。 デバッガのお話なんですが、Linuxでのデバッグ作業をやった事がありません。 今まではWindows環境だったので visual studio を使ってデバッグを行っていました。 まだ触ったばかりなのであまり難しい事は出来ませんが、デバッグからプログラムを走らせて、一行づつ実行していく事はやっていました。 それと同じ作業をLinuxでもできますか? というか、出来るんでしょうね。調べるとgdbデバッグというものが出てきたので… Linux上でプログラムをデバッグする時は皆さんgdbというものを使うのでしょうか? それとも何か違う方法が?

  • THX1138
  • ベストアンサー率51% (108/208)
回答No.3

> 変数に上手く代入が出来ず不定の値が入ってしまった、という事ですね。 入ってしまった、と言うよりは拾った箱の中に入っていた ゴミをそのまま使ってしまった形になります。 割り当てられた変数 fieldNum 用のメモリは初期化されないからです。 最初は0が入っていると思うかもしれませんが、 0を書き込む時間がもったいないのでメモリの確保しかしません。 したがって前にそこを使った誰かが入れた値がそのまま入ってます。 > あまり理解していない物を動かしていると > エラーメッセージの多さだけにやられてしまって、 > 気づきませんでした。今後注意します。 衝撃のオチ(笑)だっただけに脱力しているかもしれませんが、 実はサンプルがバグっていた、という例はしばしばあります。 Web サイトはともかく、書籍の場合は原稿から製本まで 途中にいろんな人の手が入りますから結構危険です。 書いてある通りにやってるのに動かないのは困りものですが、 対応を心得ていれば「あ、間違えてる」で終わりです。 今回の例でもそう断じるだけの根拠(エラーメッセージ)がありましたし、 実際そうでしたよね。 > (勉強なので自分で考えないと、とも思い)、 現状から察するに、libpq よりは C の基礎固めをした方がいいと思います。 トラブルさえ起きなければデキるのはわかりますが、 ひとたびコケたらお手上げ、という印象です。 ソフト開発というものは 絶対にコケる(涙) ので、耐性を付けないと生きていけません。 入門書を再度読み込んでください。 手始めに他に出ていた警告(型不一致の件)を退治してみてはどうでしょう。 > ※list[ii].○○ … 今までCSVファイルのデータを格納していた構造体 既にその流れができているのであれば 流用してしまっていいのではないでしょうか。 データ取り込み部分だけすりかえるイメージですかね。

nrc52372
質問者

補足

すばやい回答でとても助かります。 <入ってしまった、と言うよりは拾った箱の中に入っていた <ゴミをそのまま使ってしまった形になります。 そうですね。書き方が悪かったですね。 これは入ったのではなく、入っていたものを見たという形ですね。 <衝撃のオチ(笑)だっただけに脱力しているかもしれませんが、… 正直、本当に分からないままやっていたので「全然違う事を やっているんじゃないか?」という気持ちだっただけに、 むしろホッとした気持ちです。 サンプルなども間違っている事もあるという事を 頭に置いてやっていこうと思います。 <現状から察するに、libpq よりは C の基礎固めを した方がいいと思います。 最もだと思います。 しかしこれはあくまで仕事としての課題なので Cばかりやる訳にもいかず、 新しい事を出来るようになる事を目的としているので 課題を進めながらCを復習していく形になると思います。 なので今やってきたエラーメッセージなどは必ずまた 引っかかると思うので、 そこはもう一度間違わないよう、 同じ間違いをしない様にしていきたいと思います。 <ひとたびコケたらお手上げ、という印象です すいません、正直プログラミング自体は三ヶ月ほどの初心者なのでお手上げという状況がかなりあります。 しかし初心者だろうがなんだろうが、出来なければダメなのでこうして皆さんの手を借りながら進めている次第です。 <既にその流れができているのであれば <流用してしまっていいのではないでしょうか。 <データ取り込み部分だけすりかえるイメージですかね。 了解しました。 DB接続部分を関数化し、プログラム本体に組み込んでいこうと思います。 何度も教えていただきありがとうございました。 (また引っかかってしまうと思いますが…)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

リンク先にあるサンプルプログラムをそのまま使ってますか? 止まらなくなるというメッセージの前に、 /* フィールド数 :/ fieldNum = PQnfields (result); fprintf (stdout, "tuple has %d fields\n", fieldNum); /* フィールドインデクス,フィールド名/サイズの表示 */ ここで出力している fieldNum の値が出力されていると思うんですが、 その値はどうなってますか? まあSQLの基本的なところ(文法とかコマンドとか)を抑えておかないと ちょっときついでしょうね。 とはいえそんなに難しいレベルはとりあえず必要ないはずなので、 簡単な問い合わせができるようであれば当面はいいだろうと思います。 for (i = 0; i < fieldNum; i++) { fprintf (stdout, "%d\t%s\t%d\n", PQfnumber (result, PQfname (result, i)), PQfname (result, i), PQfsize (result, i)); } ループの中の呼び出しでステータスをチェックして、何か異常があったら 即座にループを抜けるようにしたほうがいいでしょう。 たぶん、作成したデータベースにあるものよりとんでもなく大きな数字が fieldNum に入ってしまっていて、エラーが起きてもお構いなしにその回数だけ ループを回ろうとしているんじゃないかと思います。

nrc52372
質問者

補足

回答ありがとうございます。 早速、上記の事を確認しようと思い、再度 a.out を実行してみました。 すると… ### start connect 0 0 ### connect failed expected authentication request from server, but received S というエラーメッセージが出て動きません。 原因がよく分からないので(PostgreSQLサーバーは起動済み)、再起動というか teraterm なので再接続し、実行も上手く実行されず、 しょうがないのでもう一度 gcc からコンパイルしてみると今度はこっちも上手くいきません。 一応以前やった処理をメモに控えていたのですが、もしかしたら色々やって いたのでメモ自体がどこか違っていたのかもしれません。 ちなみにエラーメッセージはこんな感じです。 connect.c: 関数 `insertRecords' 内: connect.c:216: 警告: フォーマットは int ですが、引数は pointer です (引数 5) connect.c: 関数 `selectRecords' 内: connect.c:278: 警告: 変数 `tupleNum' は使われませんでした connect.c:359:6: 警告: コメント内に "/*" があります /tmp/ccUkaWMz.o(.text+0xfa): In function `main': : undefined reference to `PQfinish' /tmp/ccUkaWMz.o(.text+0x121): In function `connectToServer': : undefined reference to `PQconnectdb' /tmp/ccUkaWMz.o(.text+0x159): In function `connectToServer': : undefined reference to `PQstatus' /tmp/ccUkaWMz.o(.text+0x1af): In function `connectToServer': : undefined reference to `PQerrorMessage' /tmp/ccUkaWMz.o(.text+0x1cb): In function `connectToServer': : undefined reference to `PQfinish' /tmp/ccUkaWMz.o(.text+0x1f8): In function `connectToServer': : undefined reference to `PQfinish' /tmp/ccUkaWMz.o(.text+0x2ad): In function `createOrDropTable': : undefined reference to `PQexec' /tmp/ccUkaWMz.o(.text+0x2c7): In function `createOrDropTable': ~一部省略~ collect2: ld はステータス 1 で終了しました sakusaker7さんのアドバイスにもあったようにSQL文の文法をもう少しやらないと理解しづらいですね。 あとアドバイスの最後にあったループの~…という所は言っている事は理解できます。 というか持ってくるサンプルコード自体自分のニーズにあっていないもの何ではないかと思ってきました。 「ソース中にランダム関数が入っているのでどこかを自分で指定しないと 適当に何かがランダムに入ってエラーが起きるみたいな感じなのかなぁ」 と思いましたが、理解しない上での推測なので当てにはなりません。 これは追加で新しい質問なんですが、 (1)接続までは多分出来ていると思うのですが… 以下のサンプルコードが実行できている ※サンプルコード(PostgreSQLをプログラムで操作する) http://www.atmarkit.co.jp/flinux/rensai/postgres03/postgres03.html これは接続し、中を覗いて表示するという流れなんですが、ここからデータを新しいテーブルを作成し、 取得という形にするには、上記のサイトのソースにどういった物を追加していく事になるのでしょうか? この後本屋にでもいって、似たような事が載っている本を探してこようと思いますが、 もし時間がありましたらアドバイスお願い致します。

関連するQ&A

  • Javaでデータベース(PostgreSQL)に接続したいです

    学校でJavaの勉強をしています。この前、DB(PostgreSQL)に接続しました。 勉強のため、家のPCでもDBに接続できるようにしたいです。 自分で試してみましたが、上手くいかないので、知識をお持ちの方、どうかご教示ください。 ・Javaのバージョン     JDK1.5.08 ・PostgresSQLのバージョン  PostgresSQL8.2 ・OS               WindowsXP このサイト http://jdbc.postgresql.org/download.html から、postgresql-8.2-504.jdbc3をダウンロードしました。 ダウンロードしたファイルを、Program Files>Java>jdk1.5.0_08>jre>lib>ext と   Program Files>Java>jre1.5.0_08>lib>ext に 入れました。 (学校ではこのextというフォルダに入れていました。ちなみに学校のPCに入れたファイルは postgresql-jdbc3でした。) 学校の環境ではデータベースにアクセスできました。なので、SQL文とDBに接続するための Javaのコードは正しいと思います。 しかし実行すると、NullPointerException というエラーが出ます。 ファイルを入れた場所が間違っていると思うのですが、postgresql-8.2-504.jdbc3は どのフォルダに入れればよいのでしょうか。 解決する知識をお持ちの方、どうかご教示願います。 宜しくお願いいたします。

    • ベストアンサー
    • Java
  • Cプログラミング内でのPostgreSQLの利用について

    Cプログラムでのデータベース接続が出来ない事で質問です。 現在C言語で書いたプログラムがありまして、今まではwindows上でCSVファイルから読み込んで、 新しいファイルに書き込むというような内容のプログラム作っていました。 それを今は OSをLINUXのRedhat(teratermからアクセス) 読み込むデータファイルをデータベース(Postgresql) にしてやっています。 何とかDBをインストールして、DBにCSVファイルをコピーした物を作る所までは出来ました。 その後CプログラムでDBを利用する時、色んな設定をしてやらなくてはいけないと思うのですが まずlibpq-fe.hというものをincludeして使うとは分かったのですが、これがまず見つかりません。 質問(1) OSの中のファイルを探す時にコマンドで# find ~ -name libpq-fe.hとやったのですが間違っていますか? ちなみにあるとしたらどこにそのヘッダーファイルはありますか? 質問(2) インストールした手順としては日本PostgreSQLユーザ会のサイトからソースをダウンロードしてコンパイル、インストールを行いましたが、調べるとrpmと言うものを使ってインストールした人が同じような内容で質問していて、develを入れないとヘッダーファイルが 入らないという記述がありました。 その事は何か関係がありますか? 質問(3) libpq-fe.hが必要と書きましたが、他にもlibpq.soやlibpq.hと書いてあったりしてそこの所もよく分かりません。 記述が足りなかったらすいません。 ヒントでも良いので宜しくお願いします。

  • psql select結果を環境変数に格納できる?

    お世話になります。 バッチファイル中でpsql.exeを実行させて、 select結果を環境変数に格納したいと考えております。 "C:\Program Files\PostgreSQL\8.2\bin\psql.exe" DB名 -c "select count(*) from table" という単純なselect文を実行し、select count(*)した結果を バッチファイル中で使用したいのです。 -o "C:\hoge.txt" などと付けて、このhoge.txtを改めて読み込んでも良いのですが、 それ以外に方法はありますでしょうか? DB:PostgreSQL 8.2.4 OS:WindowsXP です。

  • PHP5でpostgresqlのデータベースに接続する簡単なPHPプロ

    PHP5でpostgresqlのデータベースに接続する簡単なPHPプログラムを書きました。 ローカルホストにブラウザでアクセスすると正常に動作し、 コマンドラインで実行すると、次のエラーが発生します。 PHP Fatal error: Call to undefined function pg_connect() コマンドラインでphpのバージョンを見ると以下のとおりです。 C:\>php -v PHP 5.3.0 (cli) (built: Jun 29 2009 21:25:23) Copyright (c) 1997-2009 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2009 Zend Technologies ブラウザで、phpinfo();を実行した際の情報には postgresqlのDBドライバがあります。 pdo_pgsql PDO Driver for PostgreSQL enabled PostgreSQL(libpq) Version 8.3.3 Module version 1.0.2 Revision $Id: pdo_pgsql.c,v 1.7.2.11.2.1.2.4 2009/03/28 01:58:49 mbeccati Exp $ pgsql PostgreSQL Support enabled PostgreSQL(libpq) Version 8.3.3 Multibyte character support enabled SSL support enabled Active Persistent Links 0 Active Links 0 Directive Local Value Master Value pgsql.allow_persistent On On pgsql.auto_reset_persistent Off Off pgsql.ignore_notice Off Off pgsql.log_notice Off Off pgsql.max_links Unlimited Unlimited pgsql.max_persistent Unlimited Unlimited テストソースです。パスワード・DB名は伏せています。 <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <TITLE>PostgreSQLテスト</TITLE> </HEAD> <BODY> <?php $db_host = "localhost"; $db_port = 5432; $db_user = "postgres"; $db_pass = "xxxx"; $db_name = "yyyy"; // PostgreSQL 接続 if (!($cn = pg_connect("host=$db_host port=$db_port dbname=$db_name user=$db_user password=$db_pass"))) { die; } // PostgreSQL 切断 pg_close($cn); // 正常終了 print "<P>正常終了</P>"; ?> </BODY> </HTML> よろしくお願いします。

    • ベストアンサー
    • PHP
  • データベースの設計について

    現在PostgreSQL(ver 8.4)を使ってちょっとしたシステムの構築を計画していますが、データベースの設計に関して広くアドバイスを頂きたいです。 ユーザーの入力データをDBで効率よく管理したいと考えています。 例えば、次のようなテーブルを作るとします。 userテーブル id | name ---+------------- 1 | 山田太郎 2 | 高橋次郎 .. | ............. .. | ............. emailテーブル id | address ---+------------------------------ 1 | yamada@mail.com 2 | takahashi@mail.com .. | ................................. .. | ................................. この様な複数のテーブルにユーザーの入力を受け、1対1に対応するIDを振って名前やアドレスなどのデータをリアルタイムで挿入していく場合、どのようなテーブルを用意し、プログラムを組むのが適切なのでしょうか? 具体的には、PerlでCGIをつくり、ブラウザ上などからユーザーの入力したデータを取得してPostgreSQLに次々挿入していく形にしようとしています。 具体的なPerlのコードを書いていただけると助かるのですが、他の言語のコードでも一向に構いません。 今のところ、自分で考えたものとしては、 create table user( id serial, name text); create table email( id serial, address text); とテーブルを用意し、 Perlコードの概要は use DBI; # *実際にはユーザーの入力値から値を得る $input_user = 'name_hogehoge'; $input_email = 'address_hogehoge@mail.com'; # DBとの接続 $dbh = DBI->connect("dbi:Pg:dbname=hogehoge", ......); # プレースホルダの準備 $sth_user = $dbh->prepare("INSERT INTO user (name) VALUES(?)"); $sth_email = $dbh->prepare("INSERT INTO email (address) VALUES(?)"); # SQLの実行 $sth_user->execute("$input_user"); $sth_email->execute("$input_email"); # コミット $dbh->commit; といった感じで考えていました。しかしidの対応が確実に取れるかなど不安な点がありますので、アドバイスいただけたらと思います。 もちろんこの方法に固執する必要はなく、結果的に同じようなテーブルが得られれば問題ないです。 長々と失礼致しました。

  • Cでデータベース操作

    C言語で、SQLを実行させるサンプルソースを探しています。 スピードと次のようなデータベースにアクセスできるものが良いです。 SQL Server2005 DB2 MySQL PostgreSQL Oracle よい本もあるのでしたら、ご紹介お願いいたします。

  • データベースに接続できない

    『PHP5逆引き大全500の極意』にあるサンプルスクリプトで PHPとMYSQLと学んでいます。 XAMPPもインストールし、スタンドアロンでMysqlを操作しようと しています。 しかし、どのサンプルスクリプトをいじっても接続できません。 require("config.php"); header("Content-Type: text/plain; charset=EUC-JP"); $db = odbc_connect(ODBC_CONNECT_DSN, ODBC_CONNECT_USER, ODBC_CONNECT_PASS) or die("データソースに接続できません!\n"); でエラーがでています。 ちなみにconfig.phpの内容 // DSN define("ODBC_CONNECT_DSN", "DSN=sample_db;"); // ユーザー名 define("ODBC_CONNECT_USER", "username"); // パスワード define("ODBC_CONNECT_PASS", "password"); // テーブル名 define("ODBC_TABLE_NAME", "php500"); となっています。SQL文を実行し、テーブルを作りましたが、 上手く言っているかどうか・・・。 文字コードをちゃんと設定していないせいか、????????のような データがカラムに入っています。 サンプルスクリプト上、データベースが自動作成されるスクリプトも あるのですが・・・。 1.useename、userpassの設定 2.phpMyAdminでデータベースを作成する方法 3.データベース作成時の文字コードの設定。utf?sjis? についてヒント頂けたら幸いです。

    • ベストアンサー
    • MySQL
  • PostgreSQLのケースセンシティブの設定

    よろしくお願いいたします。 LINUX & PostgreSQl 8.4.9 を使用してDB構築をしております。 PostgreSQLでは、CreateTable等、DDLを作成する際に、 テーブル名カラム名に対して大文字小文字が区別されるということですが、 PostgreSQLのconfファイル等の設定などによって ケースセンシティブ(大文字小文字の区別)の基準値などを設定することは可能なのでしょうか。 (ケースセンシティブを有効にする無効にする、のような設定) また、PostgreSQLのリファレンス内に、 ケースセンシティブについて触れた記述があるページが見つからなかったのですが、 そのような記述がある場所(Postgresの公式ページ内で)を、 ご存知の方いらっしゃいませんでしょうか?

  • 異なるデータベースでのINSERTについて

    ただいま、PostgreSQL、VB6.0を使用して開発中です。 日々レコードが追加される、A_DBにあるAテーブルのデータを バックアップとして、まったく構造の同じ、B_DBにあるBテーブルに差分をINSERTするようにしたいのですが、どのようにコードを記述すればよろしいでしょうか? イメージ的には下記に近いのですが… http://ziddy.japan.zdnet.com/qa691870.html http://ziddy.japan.zdnet.com/qa1099610.html 初心者なので、不十分なところがあるかも知れませんが、ご回答よろしくお願いします。

  • Windows+postgreSQL+C言語によるDB接続モジュールの開発環境について

    現在、以下の開発環境を構築しています。 OS:Windows XP SP2 データベース:PostgreSQL 8.1.4 C言語コンパイラ:LSI C-86 Ver 3.30 エディタ:CPad for LSI C-86 Version 2.31 libpqライブラリ、ヘッダファイル取得元: http://www.interwiz.koganei.tokyo.jp/software/PostgreSQL/windows.html データベースの作成、操作を正常に行えることを確認しています。 また、C言語によるテストモジュール(printf()関数によるHello world等 の文字出力、DB接続処理は無し)の作成が行えることも確認済です。 これらの確認が済んだ後に、以下の手順を行いました。 ・取得したlibpqライブラリを (コンパイラ配置フォルダ配下)\LIB\S ディレクトリ配下にlibpqdll.libを配置。 ・コンパイラの_LCCファイルに-llibpqdllを追記。 (-Lオプションで(コンパイラ配置フォルダ配下)\LIBが 指定されているのを確認済) ・コンパイラの_LCCファイルで、-Iオプションで指定したディレクトリに postgres_ext.h、libpq-fe.hを配置。 そこで、PQsetdbLogin()関数とPQfinish()関数を用いた DB接続テスト用ソースコードhoge.cを作成し、エディタ経由でコンパイルをした ところ、 以下のエラーが発生しました。 (コンパイラ配置フォルダ配下)\LIB/s/libpqdll.lib: Not a library file hoge.obj(hoge.c): Undefined symbol: PQfinish_ hoge.obj(hoge.c): Undefined symbol: PQsetdbLogin_ (コンパイラ配置フォルダ配下)\LIB/s/libpqdll.lib: Not a library file エラーの原因は、ライブラリファイルが認識されないことと推測していますが、 何故、認識されないのかが分かりません。 ご教授お願い致します。

専門家に質問してみよう