メモの日々


2025年11月22日(土) [長年日記]

[db] PostgreSQLでデータベースをコピーする

久しぶりにPostgreSQLを使っている。バージョンは18.0。

CREATE TABLE文を使って手軽にデータベースをコピーできることを知ったのでメモ。次のようにすれば、src_dbのコピーとしてdst_dbを作れる。

create database dst_db template src_db;

ただし、別のユーザーが接続中だとエラーになってコピーできないので注意。

マニュアルには次のような説明があった。

また、実際のところCREATE DATABASEのテンプレートとして名前を指定することで、クラスタ内の任意のデータベースをコピーできます。 しかし、この機能は、(まだ)汎用目的の「COPY DATABASE」能力を意図したものではないことを理解しておいてください。 コピー操作の間、他のセッションから元のデータベースに接続することができないという点は大きな制限です。 CREATE DATABASEは、その起動時に他の接続が存在する場合失敗します。 コピー操作中は元のデータベースへの新しい接続を許しません。