標題についてご教授下さい。

シェル内でpsqlコマンドから オプション c にて
BEGIN

DELETE

COPY xxx FROM xxx.sql

COMMIT

の流れでシェルコマンドを実行したいのですが、
いい方法ありますでしょうか。

もちろんエラーハンドリングもしたいです。
COMMIT前に エラーがあったらROLLBACK したいです。

シェルだと難しいのでしょうか。

A 回答 (1件)

AUTOCOMMITをOFFにすればよさそうです。



http://heppoen.seesaa.net/article/147918073.html
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

AUTOCOMMITをoffにした場合、
シェルの一行で、
全てを簡潔させなければいけないんですよね。

psql -hlocalhost example DELETE FROM test | \copy test FROM test.sql

上記の様に記述したいです。

お礼日時:2013/07/03 10:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qシェルスクリプトでのmysqlコマンド実行

いつもお世話になっております。
MYSQLで、データベースの一覧を出力し
それを上から順にテーブル作成をしたいと考えています。
source コマンドで、ファイルを読み込んで実行したいのですが、
2つ目のfor文に上手く変数を渡せません。

'source $var_ファイル_$i.sql'`
↑これに変数が上手く渡りません。
そのままの値になってしまいます。

どうにか渡す方法はないでしょうか。

#!bin/bash
var=`hostname -a`
for i in `mysql -u root -p -e 'show databases'`
do
for (( cnt = 0; cnt < 11; cnt++ ))
do
echo $var
echo $i
`mysql -u root -p $i -e 'source $var_ファイル_$i.sql'` 1>> $var_ファイル_$i.log 2>&1
echo "$cnt 回目の処理"
done
done
exit 0

いつもお世話になっております。
MYSQLで、データベースの一覧を出力し
それを上から順にテーブル作成をしたいと考えています。
source コマンドで、ファイルを読み込んで実行したいのですが、
2つ目のfor文に上手く変数を渡せません。

'source $var_ファイル_$i.sql'`
↑これに変数が上手く渡りません。
そのままの値になってしまいます。

どうにか渡す方法はないでしょうか。

#!bin/bash
var=`hostname -a`
for i in `mysql -u root -p -e 'show databases'`
do
for (( cnt = 0; ...続きを読む

Aベストアンサー

こうしたらどうなりますか。

"source $var_ファイル_$i.sql"

QACCESS VBAでテーブル内の特定のフィールドを削除 .Fields.Delete ("*")

教えて下さい。
 倉庫テーブル
  フィールド:
   北海道倉庫1
   北海道倉庫2
   仙台倉庫1
   仙台倉庫2
   仙台倉庫3



とあります。仙台と付くフィールドを全て削除したく

CurrentDb().TableDefs("倉庫テーブル").Fields.Delete ("仙台倉庫1")

の”仙台倉庫1”の部分を
(”仙台”&”*”)にしたのですが、動きません。
どのように書けば良いのでしょうか?
宜しくお願い致します。

Aベストアンサー

さすがにそのワイルドカードは無理。
こんな風では?

Sub てすと()
Dim DB As Database
Dim Tdf As DAO.TableDef
Dim Fld As DAO.Field
Dim i As Integer
Set DB = Application.CurrentDb
Set Tdf = DB.TableDefs("倉庫テーブル")

For i = Tdf.Fields.Count - 1 To 0 Step -1
If Tdf.Fields(i).Name Like "仙台*" Then
Debug.Print Tdf.Fields(i).Name
'Tdf.Fields.Delete Tdf.Fields(i).Name
End If
Next
Set Tdf = Nothing: Set DB = Nothing
End Sub

確認のためイミディエイトウィンドウに出力してますので
OKだったら下のコメントを外して実行してください。
※念のためバックアップを取ってからに。

Qバッチファイルを用いてCOPY

バッチファイルを使用して、あるファイルAに入っているpdfファイルを別のファイルBにコピーする方法を教えて頂けませんか?(但し名称によっては2部だったり1部だったりです。)
Aファイル内の
PDF-1.pdfを1部
PDF-2.pdfを2部
PDF-3.pdfを3部
をBファイルにコピー
よろしくお願いします。

Aベストアンサー

テストしてませんが、こんな感じでしょうか。

pushd C:\folderA
set B=C:\folderB
for %%A in (PDF-*.pdf) do call :sub %%A
goto :EOF

:sub
set A=%1
set A=%A:.pdf=%
set N=%A:PDF-=%
for /L %%I in (1,1,%N%) do call :sub2
goto :EOF

:sub2
set C=%B%\%A%.pdf
if not exist %C% copy %A%.pdf %C% & goto :EOF
set C="%B%\%A% - コピー.pdf"
if not exist %C% copy %A%.pdf %C% & goto :EOF
set I=2
:loop
set C="%B%\%A% - コピー (%I%).pdf"
if not exist %C% copy %A%.pdf %C% & goto :EOF
set /a I+=1
goto loop

テストしてませんが、こんな感じでしょうか。

pushd C:\folderA
set B=C:\folderB
for %%A in (PDF-*.pdf) do call :sub %%A
goto :EOF

:sub
set A=%1
set A=%A:.pdf=%
set N=%A:PDF-=%
for /L %%I in (1,1,%N%) do call :sub2
goto :EOF

:sub2
set C=%B%\%A%.pdf
if not exist %C% copy %A%.pdf %C% & goto :EOF
set C="%B%\%A% - コピー.pdf"
if not exist %C% copy %A%.pdf %C% & goto :EOF
set I=2
:loop
set C="%B%\%A% - コピー (%I%).pdf"
if not exist %C% copy %A%.pdf %C% & g...続きを読む

Qシェル/grep 同名プロセスのカウント

例えば、ターミナルをいくつか起動して、bashが動いている数を調べるのに、
$ cnt=`ps ax | grep 'bash' | grep -v -c 'grep'`
$ echo $cnt
とすると、あるべき数より1つ多い数値がcntに入っています。
$ ps ax | grep 'bash' | grep -v -c 'grep'
で出力される数に1を足した数値です。

一方、lessをいくつか起動して、上記の'bash'を'less'に代えると正しい数値が返ります。

上記の'bash'を自作シェルスクリプト'mycmd'に代えると、cntにはあるべき数より1つ多い数値が入ります。

間違った操作をしているのかもしれませんが、これはどういう事情によるものでしょうか。
2014年8月7日

Aベストアンサー

>の場合、grepが検索しているのは'bash'ではなく'test.sh'ですが、サブシェルを表すpsコマンドの出力に'test.sh'という文字列が含まれているのでしょうか。

そうですね。含まれています。

パイプを流れる文字列を途中で見てみましょう。
cmd=`basename $0`
cnt=`ps ax | grep $cmd | tee /dev/tty | grep -v -c grep`
echo $cnt
のようにしてみてください。grep $cmd の結果が、端末(/dev/tty)に表示されます。
あるいは、grep 前の ps の出力を見た方が良いかもしれない。
cnt=`ps axf | tee /dev/tty | grep $cmd | grep -v -c grep`
とか。

サブシェルを使わなければ、数は増えません。
cmd=`basename $0`
ps axf | tee /dev/tty | grep $cmd | grep -v -c grep > /tmp/1
read cnt < /tmp/1
echo $cnt

>の場合、grepが検索しているのは'bash'ではなく'test.sh'ですが、サブシェルを表すpsコマンドの出力に'test.sh'という文字列が含まれているのでしょうか。

そうですね。含まれています。

パイプを流れる文字列を途中で見てみましょう。
cmd=`basename $0`
cnt=`ps ax | grep $cmd | tee /dev/tty | grep -v -c grep`
echo $cnt
のようにしてみてください。grep $cmd の結果が、端末(/dev/tty)に表示されます。
あるいは、grep 前の ps の出力を見た方が良いかもしれない。
cnt=`ps axf | tee /dev/tty | grep ...続きを読む

Qシェルで特定の文字が消える

シェルで
HOGE="/home/admin/top_file"
echo ${HOGE}
を実行すると
/home/admi / op_file
で表示されてしまいます。
それでechoの部分を
echo "${HOME}"
に書き直すと
/home/admin/top_file
と正しく表示されます。
なぜ、nとtの部分が空白になってしまうのか、わかりません。
特殊文字の改行かタブ扱いになっているのかと思って
ネットで調べてみたのですが、調べ方が悪いのか原因がわかりませんでした。

ご存知の方がいたら教えていただけますでしょうか。

Aベストアンサー

制御コード(コントロールコード)に対して置換、検索処理をおこなう方法
http://www.megasoft.co.jp/support/mifes/faq/miw7faq/faq006.html

>※改行文字、ハードタブ、半角スペースは、メタ文字で指定できます。

> 改行文字・・・・・・\n
> ハードタブ・・・・・・\t
> 半角スペース・・・\s

文字の中に制御コードを含める場合には
上記の様なメタ文字を使用します。
""で囲む事で、その中には制御コードが
含まれていない事を明示します。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報