On 6/18/24 06:32, Karsten Hilbert wrote:
Am Tue, Jun 18, 2024 at 03:02:56PM +0200 schrieb Karsten Hilbert:
I see, and since any database can be used as a template for
more databases, which can be create with an encoding
different from the template,
Proving myself wrong:
root@hermes:~/tmp# sudo -u postgres psql -e -f /tmp/db.sql
Output format is wrapped.
drop database if exists new_tmpl;
DROP DATABASE
create database new_tmpl with encoding = 'utf8';
CREATE DATABASE
You are now connected to database "new_tmpl" as user "postgres".
select current_database();
current_database
------------------
new_tmpl
(1 row)
drop database if exists new_latin1;
psql:/tmp/db.sql:8: HINWEIS: Datenbank »new_latin1« existiert nicht, wird übersprungen
DROP DATABASE
create database new_latin1 with template = new_tmpl encoding = 'latin1' locale = 'de_DE@latin1';
psql:/tmp/db.sql:9: FEHLER: neue Kodierung (LATIN1) ist inkompatibel mit der Kodierung der Template-Datenbank (UTF8)
TIP: Verwenden Sie die gleiche Kodierung wie die Template-Datenbank oder verwenden Sie template0 als Template.
That is covered here:
https://www.postgresql.org/docs/16/manage-ag-templatedbs.html
"Another common reason for copying template0 instead of template1 is
that new encoding and locale settings can be specified when copying
template0, whereas a copy of template1 must use the same settings it
does. This is because template1 might contain encoding-specific or
locale-specific data, while template0 is known not to."
Substitute <db_name other then template0> for template1 and you can get
the error you received.
Karsten
--
GPG 40BE 5B0E C98E 1713 AFA6 5BC0 3BEA AC80 7D4F C89B
--
Adrian Klaver
adrian.klaver@xxxxxxxxxxx