データベースをバックアップするための「ダンピング」ユティリティ pg_dumpall を sudo する場合の注意点。

ほんとは postgres のデータベース・スーパー・ユーザーとして pg_dumpall を実行するのが筋です。

to connect as a database superuser 'dbsuperman'
% su -l dbsuperman
% pg_dumpall -c > db.out
% exit

これを sudo -u 使って同じ事が出来ないか。

% sudo -u dbsuperman sh -c "pg_dumpall -c > db.out"
これではまずい。dbsuperman の権限でサブシェルを起動していますが、dbsuperman へログインはしていないので環境変数がそのままです。 特に $HOME が dbsperuser のホームディレクトリを指していないことがまずい。
% sudo -u dbsuperman sh -c "cd /home/dbsuperman; pg_dumpall -c > db.out"
とすれば大丈夫。

なんでこんなことするのか

すべてをバックアップする「スーパー・バックアップ・ユティリティ」を書くときに必要になってくるのです。 スーパー・バックアップ・ユティリティの名前が backup だとして Terminal から
% backup
このコマンドいっぱつですべてをバックアップしてしまうシェル・スクリプトなのですよこれは。 タイムマシンなんかいりません。 32GB の SDカードがあれば、 動画編集とかしない普通のビジネスのドキュメントやデータのバックアップなら、 外付けハードディスクさえいりません。

仕事の区切りのいいところでこのコマンドを一発実行するだけでいいんですから。 しかし SD カードへ書くのに時間がとてもかかります。1時間くらいかかるかもしれない。 時間さえ我慢できるなら Air ユーザーとしては All-flash storage design を貫きたい。

All-flash strorage.
Big step. Small footprint.
It's designed around all-flash storage
for better responsiveness and reliability. 

Out-of-the-box flash storage.

MacBook Air continues its legacy of firsts with something entirely new for any Mac: flash storage. Standard. In fact, the new MacBook Air is designed completely around flash storage. But in a totally different way. Typically, flash storage is housed in a package that’s the same size as a conventional hard drive. Yet the flash chips themselves occupy a very small portion of that housing. Getting rid of the hard drive enclosure and using only the parts that matter — the actual flash chips — frees up about 90 percent more space. And just like that, there’s room for other important things, like a bigger battery. Now you have a notebook that weighs practically nothing and runs for hours on a single charge. That’s mobility mastered.

時間が気になるならハードディスクの Western Digital 500GB My Passport for Mac なんか1万円だし。静かだし。 これでいいんじゃないかなと。

めんどくさがりやさんは、 pg_dumpall の -c オプションをつけたほうがあとでなにかと都合がいいので、 -c を付けてダンプすることをおすすめします。

% man pg_dumpall
NAME
       pg_dumpall - extract a PostgreSQL database cluster into a script file


SYNOPSIS
       pg_dumpall [ option... ]

DESCRIPTION
       pg_dumpall  is  a  utility for writing out (``dumping'') all PostgreSQL
       databases of a cluster into one script file. The script  file  contains
       SQL  commands that can be used as input to psql(1) to restore the data-
       bases. It does this by calling pg_dump(1) for each database in a  clus-
       ter.  pg_dumpall also dumps global objects that are common to all data-
       bases.  (pg_dump does not save these objects.)  This currently includes
       information  about  database  users  and groups, and access permissions
       that apply to databases as a whole.

       Since pg_dumpall reads tables from all databases you will  most  likely
       have  to connect as a database superuser in order to produce a complete
       dump. Also you will need superuser  privileges  to  execute  the  saved
       script  in  order  to be allowed to add users and groups, and to create
       databases.

       The SQL script will be written to the standard output. Shell  operators
       should be used to redirect it into a file.

       pg_dumpall  needs  to  connect  several  times to the PostgreSQL server
       (once per database). If you use password authentication it will ask for
       a password each time. It is convenient to have a ~/.pgpass file in such
       cases. See in the documentation for more information.

OPTIONS
       The following command-line options control the content  and  format  of
       the output.

       -c

       --clean
              Include SQL commands to clean (drop) databases before recreating
              them. DROP commands for roles and tablespaces are added as well.

topic:
first posted: 2011-06-17 10:08:55
last modified: 2011-06-18 13:09:39