Re: [ADMIN] pg_upgrade from 9.1.3 to 9.2 failed - Mailing list pgsql-hackers
From | Rural Hunter |
---|---|
Subject | Re: [ADMIN] pg_upgrade from 9.1.3 to 9.2 failed |
Date | |
Msg-id | 50606726.3050802@gmail.com Whole thread Raw |
In response to | Re: [ADMIN] pg_upgrade from 9.1.3 to 9.2 failed (Bruce Momjian <bruce@momjian.us>) |
Responses |
Re: [ADMIN] pg_upgrade from 9.1.3 to 9.2 failed
(Bruce Momjian <bruce@momjian.us>)
|
List | pgsql-hackers |
于 2012/9/24 20:55, Bruce Momjian 写道: > On Sun, Sep 23, 2012 at 06:46:33PM -0400, Peter Eisentraut wrote: >> On Sun, 2012-09-23 at 22:20 +0800, Rural Hunter wrote: >>> Ah yes, seems I used a wrong parameter. The --locale='zh_CN.utf8' >>> works. --locale='zh_CN.UTF8' also works. But still the question is, >>> should the encoding name be case sensitive? >> PostgreSQL treats encoding names as case insensitive. >> >> But it depends on the operating system whether locale names are case >> sensitive. > I can confirm that pg_upgrade does case-insensitive comparisons of > encoding/locale names: > > static void > check_locale_and_encoding(ControlData *oldctrl, > ControlData *newctrl) > { > /* These are often defined with inconsistent case, so use pg_strcasecmp(). */ > if (pg_strcasecmp(oldctrl->lc_collate, newctrl->lc_collate) != 0) > pg_log(PG_FATAL, > "old and new cluster lc_collate values do not match\n"); > if (pg_strcasecmp(oldctrl->lc_ctype, newctrl->lc_ctype) != 0) > pg_log(PG_FATAL, > "old and new cluster lc_ctype values do not match\n"); > if (pg_strcasecmp(oldctrl->encoding, newctrl->encoding) != 0) > pg_log(PG_FATAL, > "old and new cluster encoding values do not match\n"); > } > strange. not sure what happened. I reviewed the log and here is what I did: 1. initdb without encoding/locale parameter: $ initdb The files belonging to this database system will be owned by user "postgres". This user must also own the server process. The database cluster will be initialized with locale "zh_CN.UTF-8". The default database encoding has accordingly been set to "UTF8". initdb: could not find suitable text search configuration for locale "zh_CN.UTF-8" The default text search configuration will be set to "simple". 2. Run pg_upgrade: $ /opt/PostgreSQL/9.2/bin/pg_upgrade -b /opt/PostgreSQL/9.1/bin -B /opt/PostgreSQL/9.2/bin -d /raid/pgsql -D /raid/pg92data -c Performing Consistency Checks ----------------------------- Checking current, bin, and data directories ok Checking cluster versions ok Checking database user is a superuser ok Checking for prepared transactions ok Checking for reg* system OID user data types ok Checking for contrib/isn with bigint-passing mismatch ok old and new cluster lc_collate values do not match Failure, exiting 3. initdb with --lc-collate: $ initdb --lc-collate=zh_CN.utf8 The files belonging to this database system will be owned by user "postgres". This user must also own the server process. The database cluster will be initialized with locales COLLATE: zh_CN.utf8 CTYPE: zh_CN.UTF-8 MESSAGES: zh_CN.UTF-8 MONETARY: zh_CN.UTF-8 NUMERIC: zh_CN.UTF-8 TIME: zh_CN.UTF-8 The default database encoding has accordingly been set to "UTF8". initdb: could not find suitable text search configuration for locale "zh_CN.UTF-8" The default text search configuration will be set to "simple". 4. try pg_upgrade again: $ /opt/PostgreSQL/9.2/bin/pg_upgrade -b /opt/PostgreSQL/9.1/bin -B /opt/PostgreSQL/9.2/bin -d /raid/pgsql -D /raid/pg92data -c Performing Consistency Checks ----------------------------- Checking current, bin, and data directories ok Checking cluster versions ok Checking database user is a superuser ok Checking for prepared transactions ok Checking for reg* system OID user data types ok Checking for contrib/isn with bigint-passing mismatch ok old and new cluster lc_ctype values do not match Failure, exiting 5. Run initdb with all those locale settings: $ initdb --lc-collate=zh_CN.utf8 --lc-ctype=zh_CN.utf8 --lc-messages=zh_CN.utf8 --lc-monetary=zh_CN.utf8 --lc-numeric=zh_CN.utf8 --lc-time=zh_CN.utf8 The files belonging to this database system will be owned by user "postgres". This user must also own the server process. The database cluster will be initialized with locale "zh_CN.utf8". The default database encoding has accordingly been set to "UTF8". initdb: could not find suitable text search configuration for locale "zh_CN.utf8" The default text search configuration will be set to "simple". 6. Run pg_upgrade. this time it worked.
pgsql-hackers by date: