citext question

Started by Heine Ferreiraover 13 years ago4 messagesgeneral
Jump to latest
#1Heine Ferreira
heine.ferreira@gmail.com

Hi

I have played around a bit with the citext
extention. It looks like it is a lot like the
text data type - allmost like a memo
field. Is there any way to restrict the
length of citext fields, like char and
varchar fields?

Thanks

H.F.

#2David G. Johnston
david.g.johnston@gmail.com
In reply to: Heine Ferreira (#1)
Re: citext question

On Oct 13, 2012, at 17:48, Heine Ferreira <heine.ferreira@gmail.com> wrote:

Hi

I have played around a bit with the citext
extention. It looks like it is a lot like the
text data type - allmost like a memo
field. Is there any way to restrict the
length of citext fields, like char and
varchar fields?

Thanks

H.F.

Try "citext(25)"...if it works then "yes" otherwise "no"...

David J.

#3Vibhor Kumar
vibhor.kumar@enterprisedb.com
In reply to: David G. Johnston (#2)
Re: citext question

On Oct 13, 2012, at 6:34 PM, David Johnston <polobo@yahoo.com> wrote:

Hi

I have played around a bit with the citext
extention. It looks like it is a lot like the
text data type - allmost like a memo
field. Is there any way to restrict the
length of citext fields, like char and
varchar fields?

Thanks

H.F.

Try "citext(25)"...if it works then "yes" otherwise "no"...

No, citext(length) not supported.

However, you can define check constraint, if that fulfill your requirement as given below:
create table test2(col citext check(length(col) < 3));
Or
you can create a domain which you can use in CREATE TABLE command as given below:
CREATE domain citext_char as CITEXT CHECK(length(value) <= 3);

Thanks & Regards,
Vibhor Kumar
EnterpriseDB Corporation
The Enterprise PostgreSQL Company
Blog: http://vibhork.blogspot.com

#4Craig Ringer
craig@2ndquadrant.com
In reply to: Heine Ferreira (#1)
Re: citext question

On 10/14/2012 05:48 AM, Heine Ferreira wrote:

Hi

I have played around a bit with the citext
extention. It looks like it is a lot like the
text data type - allmost like a memo
field. Is there any way to restrict the
length of citext fields, like char and
varchar fields?

First, don't use "char(n)" or plain "char". Neither do what you (as a
sane and sensible person) probably expect them to do.

In PostgreSQL, "varchar(n)" is effectively the same as "text" with a
"length(col_name) <= n" CHECK constraint. There is no difference in how
they are stored, and there's no advantage to using "varchar" over "text".

It's similar with citext. While citext doesn't accept a typmod to
constrain its length, you can and should use CHECK constraints as
appropriate in your data definitions.

--
Craig Ringer