Interesting things I've learned: Counting nulls and non-nulls in Postgres
The num_nonnulls and num_nulls functions in Postgres
num_nonnulls(...)
counts the number of provided arguments that are not null.
SELECT num_nonnulls('a', 'b', null);
-- Returns 2
num_nulls(...)
counts the number of provided arguments that are null.
SELECT num_nulls('a', 'b', null);
-- Returns 1
This is useful in a check constraint, if you need to ensure that exactly some number of columns are provided
CREATE TABLE purchase_order (
id UUID PRIMARY KEY,
contact_email TEXT NULL,
contact_phone TEXT NULL
);
-- If we want to ensure that at least one of email or phone is provided
-- when making a purchase order, we can add a check constraint using
-- `num_nonnulls`
ALTER TABLE purchase_order ADD CONSTRAINT contact_info_check CHECK (
num_nonnulls(contact_email, contact_phone) >= 1
);
num_nonnulls
and num_nulls
are available in Postgres 9.6+ (docs)
Like this article? Follow me on Bluesky or subscribe to the RSS feed to get notified about new articles.