メモの日々


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は、その起動時に他の接続が存在する場合失敗します。 コピー操作中は元のデータベースへの新しい接続を許しません。


2025年11月27日(木) [長年日記]

[python] datetimeオブジェクトへ明示的にタイムゾーンを付与する

以前にシステムローカルのタイムゾーンを付与する方法をメモした。

明示的にタイムゾーンを指定したい場合はどうしたらいいか。datetime.astimezone()だとうまくいかない。

>>> import datetime
>>> dt = datetime.datetime(2023, 1, 1)
>>> dt.isoformat()
'2023-01-01T00:00:00'
>>> dt.astimezone(datetime.timezone.utc).isoformat()
'2022-12-31T15:00:00+00:00'

日付が変わってしまった。datetime.replace()を使うとうまくいく。

>>> dt.replace(tzinfo=datetime.timezone.utc).isoformat()
'2023-01-01T00:00:00+00:00'