忍者ブログ
  ちゃんとカテゴリ分けされておりませんので、 記事をお探しならブログ内検索が便利です。 ご活用くださいませー+.(≧∀≦)゚+.゚
Admin*Write*Comment
[688]  [687]  [686]  [685]  [684]  [683]  [681]  [680]  [679]  [678]  [677

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。




先日ちゃんとテストもしないで公開したら、バグがひどかったので修正します。
先日のは非公開にしまーす。

PostgreSQLのpg_dumpを
pg_dump db_name > db_name.dmp
見たく取得したはいいものの、実際にリストアするときに特定のテーブルだけ、リストアしたいねー
なんてことはよくあります。
と、いうことで、あまり大きいファイルには向かないけど、ファイルを分割するスクリプトをPythonで書いてみました。

python
import os
dump_file_path = './db_name.dmp'
dump_path = os.path.dirname(dump_file_path)
dump_file = os.path.basename(dump_file_path)

## define
# 処理を止める行数(0で最後まで)
break_point = 0
line_no = 0
file_no = 0
delimiter_flg = 0
prefix = u's'
init_file = True
log_file = '%s_log_%s' % (prefix, dump_file)

# main

# initialyze outputo file
if init_file:
  old = filter(lambda x: x.startswith(prefix), os.listdir(dump_path))
  for _file in old: os.unlink(os.path.join(dump_path, _file))

# splitting
f = open(dump_file_path, 'rb')
for line in f:
  line_no += 1
  if line.strip() == '--':
    if delimiter_flg == 2:
      delimiter_flg = 1
      file_no += 1
      print '次のセクションに移動しました。 処理行数[%s], 処理セクション[%s]' % (line_no, file_no)
    else:
      delimiter_flg += 1
  elif line.startswith('--'):
    open(log_file, 'ab').write('\t'.join([str(line_no), str(file_no), line]))
  open('%s%03d_%s' % (prefix, file_no, dump_file), 'ab').write(line)
  # print (file_no, delimiter_flg, line.strip())
  if 0 < break_point < line_no:
    break

f.close()

これでカレントディレクトリに分割されたファイルが出来上がるので
中身を確認しつつ、目的のテーブルのデータをダンプしてください。
INDEXとかは面倒だと思います。
そんな書き方はナンセンス!
なんてFBは随時受け付けますが、理解できないかもです(-_-;)

確認環境
Python2.7.3
PostgreSQL 9.3.3

拍手

PR



COMMENT
Name
Title
Color
Mail
URL
Text
Pass   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
secret
ブログ内検索
カレンダー
08 2017/09 10
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
カウンター
最新コメント
最新トラックバック
プロフィール
+ハンドル+
y_ayamori(purple)
+職業+
IT系エンジニア
+すまい+
さいたま
バーコード
ブログパーツ
アバター
Copyright © アナログを愛するデジタル生活館 All Rights Reserved.
photo by Kun material by Atelier Black/White Template by Kaie
忍者ブログ [PR]