debugsqlMinor
How do I resolve Postgresql error, 'no collation was derived for column "foo" with collatable type citext'?
Viewed 0 times
postgresqlerrorhowfoocolumnwithcitexttyperesolvefor
Problem
Just recently I upgraded from Postgresql 8.4.11 to 9.1.3. I used pg_dump in the process. Now I'm getting an error:
ERROR: no collation was derived for column "vin" with collatable type citext
HINT: Use the COLLATE clause to set the collation explicitly.
This is a continuation of the problem that I had earlier. It seems the fix suggested in the Release Notes did not catch custom domains. It seems as if the CREATE DOMAIN statement in 8.4 didn't even support the
This is how I created the
ERROR: no collation was derived for column "vin" with collatable type citext
HINT: Use the COLLATE clause to set the collation explicitly.
This is a continuation of the problem that I had earlier. It seems the fix suggested in the Release Notes did not catch custom domains. It seems as if the CREATE DOMAIN statement in 8.4 didn't even support the
COLLATE clause.This is how I created the
vin type,CREATE DOMAIN inventory.valid_vin AS citext
CHECK ( inventory.valid_vin( VALUE ) );Solution
For more information on this find our correspondence on this thread:
Problem
The problem comes right from the horses mouth, Tom Lane,
Well, if that's how you're creating citext *, then yeah it's broken.
As of 9.1 the citext type needs to be created with the attribute
"COLLATABLE = true". The suggested UPDATE statements are a means
of correcting a failure to do that after-the-fact, but they don't
cover any domains that have already been created on top of citext.
Source: http://archives.postgresql.org/pgsql-general/2012-05/msg00262.php
So a dump/restore from 8.3 -> 9.1 is not supported if you've got a domain over citext.
Solution
You can get around this problem by first doing:
- Thread: http://archives.postgresql.org/pgsql-general/2012-05/msg00262.php
Problem
The problem comes right from the horses mouth, Tom Lane,
Well, if that's how you're creating citext *, then yeah it's broken.
As of 9.1 the citext type needs to be created with the attribute
"COLLATABLE = true". The suggested UPDATE statements are a means
of correcting a failure to do that after-the-fact, but they don't
cover any domains that have already been created on top of citext.
Source: http://archives.postgresql.org/pgsql-general/2012-05/msg00262.php
* I was creating citext however my specific dump had it created, there was nothing special.So a dump/restore from 8.3 -> 9.1 is not supported if you've got a domain over citext.
Solution
You can get around this problem by first doing:
CREATE EXTENSION citextbefore you load the dump.
- or, by hacking the patch to operate on
DOMAINSover citext.
Context
StackExchange Database Administrators Q#17609, answer score: 2
Revisions (0)
No revisions yet.