public inbox for [email protected]
help / color / mirror / Atom feedRe: Domains vs data types
3+ messages / 3 participants
[nested] [flat]
* Re: Domains vs data types
@ 2025-08-20 17:36 Florents Tselai <[email protected]>
0 siblings, 1 reply; 3+ messages in thread
From: Florents Tselai @ 2025-08-20 17:36 UTC (permalink / raw)
To: Ertan Küçükoglu <[email protected]>; +Cc: [email protected]
> On 20 Aug 2025, at 7:47 AM, Ertan Küçükoglu <[email protected]> wrote:
>
> Hello,
>
> I am using PostgreSQL 17.6.
> I would like to learn if there is any benefit of using domains over data types for table column definitions in terms of performance gain/loss.
>
I know that this doesn’t answer your question, but before exploring custom types / domains,
and based on experience, I’d strongly recommend exploring jsonb instead as an alternative.
Also note that using custom types can lead to some confusion initially for basic stuff
you can’t do things like SELECT mytype.f1 and instead you have to do (mytype).f1
Things like this can get annoying pretty quickly.
^ permalink raw reply [nested|flat] 3+ messages in thread
* Re: Domains vs data types
@ 2025-08-21 08:11 Dominique Devienne <[email protected]>
parent: Florents Tselai <[email protected]>
0 siblings, 1 reply; 3+ messages in thread
From: Dominique Devienne @ 2025-08-21 08:11 UTC (permalink / raw)
To: Florents Tselai <[email protected]>; +Cc: Ertan Küçükoglu <[email protected]>; [email protected]
On Wed, Aug 20, 2025 at 7:37 PM Florents Tselai
<[email protected]> wrote:
> > On 20 Aug 2025, at 7:47 AM, Ertan Küçükoglu <[email protected]> wrote:
> > I would like to learn if there is any benefit of using domains over data types for table column definitions in terms of performance gain/loss.
> I know that this doesn’t answer your question, but before exploring custom types / domains,
> and based on experience, I’d strongly recommend exploring jsonb instead as an alternative.
I stayed out of that thread, but this makes me step out and react.
domains are typically out constraining the value space of a type.
I.e. a type with a CHECK constraint. W/o one, it's pretty useless IMHO.
While json/jsonb is about denormalizing and stuffing unconstrained data,
of arbitrary (and often evolving) content. No need for complex relational
modeling and its associated constraints and "rigidity". I.e. easy evolution
of the data tier, at the cost of applications having to deal with the complexity
themselves of constrained data (must expect anything). Your SQL also becomes
less expressive or more complex, although PostgreSQL has excellent JSON support.
> Also note that using custom types can lead to some confusion initially for basic stuff
> you can’t do things like SELECT mytype.f1 and instead you have to do (mytype).f1
I guess you're talking about composite types? Not sure OP had that in mind.
But that's still a good point. Thanks for sharing.
Yes, using a custom type/domain is more metadata, since a new row in pg_type.
But that's mostly negligeable.
There's always an (integral) OID associated to columns, so only its value
changes if you start using a custom type, be it i memory or on disk. So no,
using a custom type is unlikely to make things bigger or slower.
That said, in my case, because I use the BINARY mode of LIBPQ and COPY,
it does matter, as my code knows about built-in OIDs, but not of custom OIDs
for custom types. But few people care about such things.
FWIW, --DD
^ permalink raw reply [nested|flat] 3+ messages in thread
* Re: Domains vs data types
@ 2025-08-21 17:03 Merlin Moncure <[email protected]>
parent: Dominique Devienne <[email protected]>
0 siblings, 0 replies; 3+ messages in thread
From: Merlin Moncure @ 2025-08-21 17:03 UTC (permalink / raw)
To: Dominique Devienne <[email protected]>; +Cc: Florents Tselai <[email protected]>; Ertan Küçükoglu <[email protected]>; [email protected]
On Thu, Aug 21, 2025 at 2:11 AM Dominique Devienne <[email protected]> wrote:
> On Wed, Aug 20, 2025 at 7:37 PM Florents Tselai
> <[email protected]> wrote:
> > > On 20 Aug 2025, at 7:47 AM, Ertan Küçükoglu <[email protected]> wrote:
> > > I would like to learn if there is any benefit of using domains over data types for table column definitions in terms of performance gain/loss.
>
> > I know that this doesn’t answer your question, but before exploring custom types / domains,
> > and based on experience, I’d strongly recommend exploring jsonb instead as an alternative.
>
> I stayed out of that thread, but this makes me step out and react.
> domains are typically out constraining the value space of a type.
> I.e. a type with a CHECK constraint. W/o one, it's pretty useless IMHO.
+1 this.
The main use for domains is to allow for standard constraints. If
you find yourself writing the same constraint over and over, that's
when you might consider using them.
For example, in the USA, vehicle identification numbers must be
exactly 17 characters long.
postgres@postgres=# create domain vin as text check (length(VALUE) = 17);
CREATE DOMAIN
postgres@postgres=# select 'abc'::TEXT::VIN;
ERROR: value for domain vin violates check constraint "vin_check"
The other use for domains I see is global sequences where you have
many tables pulling from the same sequence.
postgres@postgres=# create sequence global_id_seq;
CREATE SEQUENCE
postgres@postgres=# create domain global_id as bigint default
nextval('global_id_seq');
CREATE DOMAIN
Using domains is not really a performance thing, it's more regarding
establishing rigor around type rules. In general, I tend not to use
length constraints for tex columns anymore for most cases (just use
text!), but I could get behind setting some standard length
constraints, say, capped at 1k characters as a safety precaution.
merlin
merlin
^ permalink raw reply [nested|flat] 3+ messages in thread
end of thread, other threads:[~2025-08-21 17:03 UTC | newest]
Thread overview: 3+ messages (download: mbox mbox.gz follow: Atom feed)
-- links below jump to the message on this page --
2025-08-20 17:36 Re: Domains vs data types Florents Tselai <[email protected]>
2025-08-21 08:11 ` Dominique Devienne <[email protected]>
2025-08-21 17:03 ` Merlin Moncure <[email protected]>
This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox