質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

PL/SQL

PL/SQL (Procedural Language/Structured Query Language) はOracle CorporationによるSQL(非手続き型言語)を手続き型言語に拡張させるために開発されたプログラミング言語です。

Q&A

解決済

2回答

3819閲覧

Postgre SQL から外部ファイルを実行する方法

Sato_y

総合スコア12

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

PL/SQL

PL/SQL (Procedural Language/Structured Query Language) はOracle CorporationによるSQL(非手続き型言語)を手続き型言語に拡張させるために開発されたプログラミング言語です。

0グッド

0クリップ

投稿2018/10/04 06:47

編集2018/10/04 07:15

Postgre SQLからEXEファイルなどの外部ファイルを呼び出ししたい。
PL/pgSQLからの呼び出し方法を教えて頂けると助かります。

宜しくお願いいたします。

PL/pgSQLのプログラム

PL/pgSQL

1CREATE OR REPLACE FUNCTION public.test() 2 RETURNS integer 3 LANGUAGE plpgsql 4AS $function$ 5 6BEGIN 7 8COPY empty_table FROM PROGRAM 'C:/WINDOWS/system32/notepad.exe'; 9 10END ; 11$function$ 12; 13

このプログラムを実行しても、動作がフリーズした状態になります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/10/04 07:01

何のために呼び出したいのでしょうか。また自身で調べて何か試したことがあればそれも記載してください。
Sato_y

2018/10/04 07:04

Javaプログラム(形式はexe)を実行させるために呼び出したいです。一度このサイトの書いている通りに実行してみたのですが、上手く動作しなかったです。https://www.ecomott.co.jp/tech_blog/?p=1419
m.ts10806

2018/10/04 07:07

質問は編集できるので追記してください。「うまくいかなかった」部分は具体的な手順やコードと起きた現象を。
Sato_y

2018/10/04 07:26

ご確認して頂けると有難いです。
guest

回答2

0

ベストアンサー

おそらくですが、フリーズしているのではなくnotepad.exeが起動していて、notepad.exeが終了するのを待っているのではないかと思います。
フリーズしていると思われる状態でタスクマネージャーからプロセスを確認してみてください。

また、下記のbatファイルでCOPYコマンドの動作を確認することができるのでお試しください。
{ ... }の部分はご自身の環境に合わせて書き換えてください。
このbatを実行するとnotepad.exeが起動し、notepad.exeを閉じるとbatに制御が戻りbatが終了すると思います。

bat

1@echo off 2cd /d %~dp0 3 4set PGHOST={ホスト名} 5set PGDATABASE={データベース名} 6set PGUSER={ユーザー名} 7set PGPASSWORD={パスワード} 8set PSQL_COMMAND="{path\to\}psql.exe" 9 10%PSQL_COMMAND% -c "COPY empty_table FROM PROGRAM 'notepad.exe'" 11 12pause

ちなみにPROGRAMの部分を下記のように'dir /b'とすると、その結果がempty_tableに書き込まれ、batに制御が戻ってくると思います。

bat

1"COPY empty_table FROM PROGRAM 'dir /b'"

同様にechoでも確認できます。

bat

1"COPY empty_table FROM PROGRAM 'echo hello world!'"

empty_tableは下記のddlで作成しています。

sql

1CREATE TABLE empty_table ( 2 data varchar(516) 3);

最後にPL/pgSQLからの実行したい外部プログラムが入力待ちにならない種類のプログラムであれば上記の方法で対応できるかもしれませんのでご確認ください。
しかし、notepad.exeのような入力待ちになる種類のプログラムや、常駐型のプログラムということであれば、申し訳ないですがわからないです。

投稿2018/10/05 18:41

rubytomato

総合スコア1752

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

SQLから外部プログラムを実行する方法はないと先の回答には書きましたが、
ご指摘の通りCOPY文で起動することが出来るようです。

COPY

PROGRAMが指定された場合、サーバは指定したコマンドを実行しその標準出力を読み取る、または、プログラムの標準入力に書き出します。 コマンドはサーバからの視点で指定しなければならず、また、PostgreSQLユーザによって実行できなければなりません。 STDINやSTDOUTが指定された場合、データはクライアントとサーバ間を流れます。

って話からすると、起動したプログラムの標準入力に与えてその結果を待つのではないかと思われます。
notepad.exeごときが標準入出力を処理できたかどうかはわかりませんが、
javaで書いたプログラムに引き渡すのであれば標準入出力を意識して組むとよいかと。

投稿2018/10/04 07:01

編集2018/10/08 01:06
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問