Ubuntu 14.04 LTS本番マシンにPostreSQL 9.xデータベースがあります。私の開発マシンはWindows 7ベースで、PostreSQL 9.yを提供しています。
開発マシンでUbuntu PostreSQLデータベースを復元したい。
Ubuntuデータベースは次のロケール設定を使用していることに気付きました。
UTF8
en_US.UTF-8
en_US.UTF-8
ロケールを指定せずにWindowsマシンでデータベースを復元すると、次のように設定されます
UTF8
German_Germany.1252
German_Germany.1252
私の計画では、開発マシンのデータベースを、Ubuntuマシンのデータベースと可能な限り同じにすることです。したがって、私の考えは、まずWindowsマシン上にプロダクションが一致するロケールでデータベースを作成し、次にUbuntuデータベースprod-db.backup
バックアップファイルをその作成されたデータベースに復元することでした。
createdb --Host=localhost --username=postgres --encoding=Unicode --lc-collate=en_US.UTF-8 --lc-ctype=en_US.UTF-8 --owner=prod prod-db
pg_restore --Host=localhost --username=postgres --format=custom prod-db.backup --dbname=prod-db
Windowsのcreatedb
がエラーinvalid locale name en_US.UTF-8で不平を言うので、このアイデアは機能しません。
Windowsロケール名 を含むUbuntuロケール名と一致する template0テンプレートデータベース 、en_US.UTF-8
やen_us_utf8
などのさまざまなロケール識別子を試してみると、インターネットに散在していることがわかりましたが、解決策は機能しません。
en_US.UTF-8
と一致するWindowsのロケール識別子はありますか?German_Germany.1252
はen_US.UTF-8
と同じ(十分)なので、ロケールを気にせず、ロケールを気にする必要はありません。クエリ結果などの側面に関して、データベースクエリが同じように動作することを確認したいセット注文。これらは、PostgreSQL 9.5データベース(en_US.UTF-8
エンコーディングを使用してLinuxにエクスポートされた)のコピーをWindows 7上のPostgreSQL 9.3またはWindows 8.1上のPostgreSQL 9.5にインポートするための正確な手順です。 SQLファイルをロードする前に、適切なエンコーディングでデータベースを作成する必要があります。そうしないと、Linuxからのエンコーディング(en_US.UTF-8
)により、デフォルトのエンコーディングを使用するようにWindowsに要求されます。
REM WARNING: Console code page (65001) differs from Windows code page (1252) 8-bit characters might not work correctly. See psql reference page "Notes for Windows users" for details.
chcp 1252
C:\PostgreSQL\9.5\bin\psql.exe -U postgres -d postgres_password -c "CREATE DATABASE my_db WITH TEMPLATE=template0 ENCODING='UTF-8' LC_COLLATE='american_usa' LC_CTYPE='american_usa'"
REM Grant privileges to the appropriate database user.
C:\PostgreSQL\9.5\bin\psql.exe -U postgres -d postgres_password -c "GRANT ALL PRIVILEGES ON DATABASE my_db TO myuser"
REM Import my_db.sql. Ignore the following error (it comes from a line in the SQL file, but we have already created the database with the correct locale, so we are ok):
REM psql:my_db.sql:22: ERROR: invalid locale name: "en_US.UTF-8"
C:\PostgreSQL\9.5\bin\psql.exe -o nul --quiet -U postgres -d postgres_password -f my_db.sql
ここ で説明したように、Windowsのロケールはamerican_usa
(Windows 7)である必要があります。 Windows 8.1では、american_usa
またはen-US
(UNIXのen_US
ではなく)のいずれかが機能します。