Skip to content
Advertisement

How to make sure only one column is not null in postgresql table

I’m trying to setup a table and add some constraints to it. I was planning on using partial indexes to add constraints to create some composite keys, but ran into the problem of handling NULL values. We have a situation where we want to make sure that in a table only one of two columns is populated for a given row, and that the populated value is unique. I’m trying to figure out how to do this, but I’m having a tough time. Perhaps something like this:

Would this work? Additionally, is there a good way to expand this to a larger number of columns?

Advertisement

Answer

You can use the following check:

If there are more columns, you can use the trick with casting boolean to integer:

In this example only one column can be not null (it simply counts not null columns), but you can make it any number.

User contributions licensed under: CC BY-SA
1 People found this is helpful
Advertisement