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

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

新規登録して質問してみよう
ただいま回答率
85.50%
シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

PostgreSQL

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

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

シェル

シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

Q&A

解決済

1回答

4552閲覧

シェルでデータベースに接続している間の処理とデータベースに接続していない間の処理の連携について

merci_children

総合スコア44

シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

PostgreSQL

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

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

シェル

シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

0グッド

0クリップ

投稿2018/12/15 08:08

【困っていること】
下記のようなことをやりたいのですが、
データベースに接続して、ログアウト、再度接続する。みたいな処理をしたいときに、
一般的にどのような方法でやるのか知りたいです。
接続を何度も繰り返すのはあまりよいコードではないのかなと思いまして。。。
(※最悪動くので良いかなとは考えているのですが。)

データベースに接続する前の処理で取得した変数をデータベースに接続中に使用する。
データベースに接続後の処理で取得した変数をデータベースに接続していない間に使用する。
みたいなことができればよいなと考えたのですが、調べても出てこないので
良い方法があれば教えていただきたいです。

1.データベースに接続。(psql)
2.データベースにデータを挿入する。
3. 挿入したデータをファイル出力する。
4.データベースからログアウトする。
5.シェルで出力したデータを使用し、SQL文を作成する。
6. データベースに接続する。
7.5で作成したSQL文を実行。
8.ログアウトする。

下記のような処理を良くしたいです。 #!/bin/bash pass=/tmp/input/ psql -U postgres # 変数passを使用したい。 \COPY testDB(test1, test2, REG_DATE) FROM $pass WITH CSV; # ファイル出力 \COPY (SELECT * FROM testDB WHERE REG_DATE > zikan) TO $pass WITH CSV DELIMITER ','; # ログアウト \q exit # SQL分を作成する。(CSVファイル) ~ # 再度ログイン psql -U postgres # 作成したSQLを実行。 ~

文章が長くすいませんが、アドバイスいただけると助かります。

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

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

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

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

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

cateye

2018/12/15 08:58

4.と6.の処理が本当に必要かどうか考えましたか?・・・最近DB触ってないので、無意味な質問なら無視して下さい。
guest

回答1

0

ベストアンサー

データベースに接続して、ログアウト、再度接続する。みたいな処理をしたいときに、
一般的にどのような方法でやるのか知りたいです。

一連の処理としたいのなら、ログアウトせずに同一トランザクション内で行う必要があります。

また、行う操作がDB寄りなら、ストアドや無名ブロックのスクリプト(pl/pgsql)の方が、変数も使用できますし、if文やループも使えますので、連携を考えずに纏まった処理にできます。

但し、pl/pgsqlではトランザクションの分割はできないので、そこは呼び出しを分割してコントロールする必要があります。

投稿2018/12/15 09:44

sazi

総合スコア25138

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問