vb.netからpsqlコマンドを実行する方法

このQ&Aのポイント
  • vb.netからpsqlコマンドを使ってDBサーバーにデータを一括登録する方法について説明します。
  • DBサーバーはLinux、Postgresql 8.4.9を使用し、クライアントはWindows7 pro、vb.net 2010です。
  • copyコマンドを使用してクライアントのcsvファイルのデータをDBテーブルに登録する方法を考えています。
回答を見る
  • ベストアンサー

vb.netからpsqlコマンドを実行するには

DBサーバー:Linux、Postgresql 8.4.9 クライアント:Windows7 pro、vb.net 2010 にて開発を行っております。 ■経緯 copyコマンドを使用して、クライアントにあるcsvファイルのデータを DBテーブルに一括登録したいと考えております。 まず、「COPY table FROM 'csvファイルパス' 」で試したところ、  ファイル経由のCOPY FROM、COPY TOを行うにはスーパーユーザでなければなりません  標準入出力経由のCOPYは誰でも実行可能です。またpsqlの\\copyも誰でも実行できます 旨のエラーが返ってきた為、下記の方法を考えております。 ■質問内容 psqlからのcopyにより、登録を行おうと考えている。 その際に、vb.netからpsqlコマンドの実行がそもそも可能なのかどうか、 (Linux上のpsqlコマンドなのだから、vb.netから実行できない?) 根本的なところからの質問となってしまいますが よろしくお願いいたします。 また、上記実装を開設してるサイトなどもございましたら、 ご教授願います。よろしくお願いいたします。

  • -0-y
  • お礼率75% (59/78)

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

  • ベストアンサー
  • Siegrune
  • ベストアンサー率35% (316/895)
回答No.1

>vb.netからpsqlコマンドの実行がそもそも可能なのかどうか、 >(Linux上のpsqlコマンドなのだから、vb.netから実行できない?) vb.netからサーバのLinux上のpsqlコマンドを実行できたとして、 (多分、大抵の人にはできない。  Linux上にアプリを常時起動しておいて、vb.netのアプリと会話してpsqlを起動するという  大変面倒な方法ができる人なら別ですが。) >copyコマンドを使用して、クライアントにあるcsvファイルのデータを >DBテーブルに一括登録したいと考えております。 ということは、Linuxから、クライアントのWindows7のファイルにアクセスしないといけない ということになります。 (これはさらに大変では?  ftpかなにかでファイル転送してLinux上に格納したファイルを処理すればできるかもしれませんが、  コード変換とかどうするのだろう。。。) ということで、 Windows版のpsqlを使ったらどうでしょう? 以下のURL参照。 http://www.psn.ne.jp/support/database/psql.html 但し、ざっとみただけでは、Windows7対応済みかどうかはよくわかりませんでした。 もし使えるなら、クライアント上でpsqlが動かせるので、バッチファイル等にしておくと vb.netから起動できるはずです。

-0-y
質問者

お礼

ありがとうございます。 悩んでいたので助かりました。 後日、試させてもらいます。

関連するQ&A

  • シェルからpsqlコマンドでトランザクション

    標題についてご教授下さい。 シェル内でpsqlコマンドから オプション c にて BEGIN ↓ DELETE ↓ COPY xxx FROM xxx.sql ↓ COMMIT の流れでシェルコマンドを実行したいのですが、 いい方法ありますでしょうか。 もちろんエラーハンドリングもしたいです。 COMMIT前に エラーがあったらROLLBACK したいです。 シェルだと難しいのでしょうか。

  • psqlでファイルに記載した命令を実行できません。

    psqlを使っています。 ファイルに10行ほどのinsert命令を書いて、 psqlにて「\i /Users/・・・・省略(ファイルパス)・・・・)/aaa.sql;」 を実行するとエラーがでて実行できません。 /Users/・・・・省略(ファイルパス)・・・・)/aaa.sql:1: error: invalid command \rtf1 ・ ・ psql:/Users/・・・・省略(ファイルパス)・・・・)/aaa.sql:17: error: invalid command \'7b psql:/Users/・・・・省略(ファイルパス)・・・・)/aaa.sql:18: error: invalid command \'b7 psql:/Users/・・・・省略(ファイルパス)・・・・)/aaa.sql:18: ERROR: syntax error at or near "{" LINE 1: { こんな感じでエラーがでてしまいます。 命令文を1行ずつ手打ちで実行するとできるのですが、なぜでしょうか。 同じような経験のある方など教えていただけるとありがたいです。

  • テーブルにcsvファイルをインポートできない

    かなり困っています。REDHAT LINUXでpostgresのテーブルにpsqlからのCOPYコマンドでcsvファイルのデータをインポートしようとしているのですが、文字数オーバーのエラーがでてしまいます。テーブルは2列で1つ目の列はCHAR(10)で2列目はINT4型です。csvファイルの内容はとりあえず1行だけ入れていて「"1234567890","1234"」を入れています。コマンドはpsqlで「COPY テーブル FROM 'ファイルのパス' USING DELIMITER ","」で行いました。エラーはおそらくインポートしたデータがおかしくなって変な桁数になっているのですが、どういうふうにおかしくなっているのかがよくわからないので対策できません。

  • psqlコマンド接続によるパスワードについて

    psqlコマンドでDBへの接続を行っております。 /usr/local/pgsql/bin/psql -U postgres -h xxx.xxx.xxx.xxx testdb 上記コマンドをコマンドラインから実行するとパスワードが聞かれます。 パスワード設定をmd5にしているためですが、 その設定を変更せずコマンドラインでパスワードを渡すなどしてパスワードの入力を促す処理をスルーしたいのですが全然出来ません。 どのなたかご存知の方、いらっしゃいましたらご教示の程お願い致します。

  • psqlでのリストアの仕方

    Windows上でPostgreSQL8.0を使用しています。 DBのバックアップを毎日自動で(タスク登録して)とっています。 具体的にはバッチファイルの中で以下のようなpg_dumpコマンドを実行させています。 「pg_dump -U ユーザー名 -f %DATE:~0,4%%DATE:~5,2%%DATE:~8,2%EXPDAT.db DB名 <dmp.txt」(なお、最後のテキストファイル内にはたぶんパスワードと思われる内容が記載されています。) 通常はAdminIIIを使用してバックアップおよびリストアを行っており、上記のバッチ実行にて作成されたダンプファイルからのリストアを行ったことがありません。(拡張子がBackupでないので、AdminIIIからのリストアはできませんでした) ヘルプや書籍を参考に、psqlからのリストアを試みたのですが、そもそもどのようにコマンドを入力してよいかわかりません。 試した内容は以下の通りです。 1.psql.exeを実行 2.ホスト名、ユーザー名、パスワード、データベース名をそれぞれ入力 3.データベース名#> が表示されるので、「psql -U ユーザー名 -d データベース名 -f "c:\20070822EXPDAT.db"」と入力し実行すると、psqlという文字列に対してsyntaxエラーとなってしまいました。 そもそも、psql画面でのコマンドの入力方法がよくわかっておりません。書籍などをみるとよく「psql -U xxx -d xxx -f xxx」と書いてありますが、実際に入力するのはどこからでしょう? 担当者が退社してしまい、手探り状態で運用し始めたところです。 大変初歩的な質問で申し訳ありませんがよろしくお願いいたします。

  • VB2008でコマンド実行

    VB2008のフォームからボタンをクリックして、DOSコマンドを実行したいのですが うまくいきません。 http://dobon.net/vb/dotnet/process/standardoutput.html にあるサンプルをそのまま貼り付けて実行したら Console.WriteLine(results)の実行結果が空白になります。 Debugで見ると BasePriority = {"プロセスは終了しているため、要求された情報は利用できません。"} という表示があるのですが、このサイトのコメントでは、出来ると書いてあるので何が 悪いのか分かりません。 分かる方がいらっしゃったら教えてください。お願いします。

  • VB.NETでのDOSコマンドを実行について

    VB.NETでのDOSコマンドを実行について いつも大変お世話になっています。 VB.NET上でバイナリデータを DOSコマンド「copy」で結合させたいのですが うまくいきません。ご助言ください。 Dim results As String Dim psi As New System.Diagnostics.ProcessStartInfo() 'ComSpecのパスを取得する psi.FileName = System.Environment.GetEnvironmentVariable("ComSpec") '出力を読み取れるようにする psi.RedirectStandardInput = False psi.RedirectStandardOutput = True psi.UseShellExecute = False 'ウィンドウを表示しないようにする psi.CreateNoWindow = True 'コマンドラインを指定("/c"は実行後閉じるために必要) psi.Arguments = _ "/c copy /b /y "C:\Program Files\test\Data\out0001.bin"+"C:\Program Files\test\Data\out0002.bin" "C:\Program Files\test\Data\TEST.jpg"" '※コマンドの前後のダブルクォーテーションを省き、コマンドプロンプトで ' 直接実行した場合は成功しました。 '起動 Dim p As System.Diagnostics.Process=_ System.Diagnostics.Process.Start(psi) '出力を読み取る results = p.StandardOutput.ReadToEnd '出力された結果を表示 Console.WriteLine(results) 'WaitForExitはReadToEndの後である必要がある '(親プロセス、子プロセスでブロック防止のため) p.WaitForExit()

  • asp.netからbcpコマンドの実行

    asp.netからbcpコマンドを実行し、CSVをエクスポートする方法はありますか? bcpは普通は、コマンドプロンプトから実行しますが、「プログラムからボタンをクリックしたらcsvが吐き出される。」というようなことができますでしょうか?

  • (Linux、データベース初心者)スクリプトを実行するとPermiss

    (Linux、データベース初心者)スクリプトを実行するとPermission deniedが発生します。 Postgresql psqlに関して よろしくお願いします。 UbuntuサーバにインストールしたPostgresqlに対し、スクリプトを実行してcsvファイルをインポートしようと考えています。 その際にPermission deniedが発生しテーブルにデータが入りません。 以下にスクリプトファイルとエラーメッセージを掲載します。 <test.sh> #!/bin/bash #接続文字列 export PGHOST="ホスト名” export PGPORT="ポート番号" export PGDATABASE="データベース名" export PGUSER="ユーザー名" export PGPASSWORD="パスワード" PSQL='COPY bat_test FROM ' '''/test/test.csv''' ' with DELIMITER ' ''',''' echo "$PSQL" | psql echo "commit" | psql <以上、test.sh> <エラーメッセージ> test.sh:/test/test.csv:Permission denide <以上、エラーメッセージ> インポートしたいファイルの権限等は確認しましたがわかりませんでした。 何が悪いのかご指摘いただければ助かります。 どうか、よろしくお願いします。

  • コマンドを実行し、出来たファイルと取り出したい

    windowsから、linuxにファイルを入れて、遠隔操作でコマンド(置き換え)を実行して、出来たファイルを取り出したいと思っています。 linuxへのコマンド実行は、sshのソフト(Poderosa)で出来るのですが、目的のファイルをlinuxへ出し入れする方法がわかりません。 windowsからファイルを出し入れするにはどうすればいいのでしょうか? ファイルの出し入れだけなら、sambaで出来るようなのですが、まだそこまでの準備が出来ていないので、sambaでコマンドが実行できるかわかりません。 そもそも、linux自体よくわかっていません。 そのため、根本的に間違っているかもしれません。 どうぞよろしくお願いします。