Re: jsonb_array_length: ERROR: 22023: cannot get array length of a scalar - Mailing list pgsql-general

From David G. Johnston
Subject Re: jsonb_array_length: ERROR: 22023: cannot get array length of a scalar
Date
Msg-id CAKFQuwb9Tym+QoRqr2nWLzbX_Q0uzxH3yds9rwF5gVBwkZHeAA@mail.gmail.com
Whole thread Raw
In response to Re: jsonb_array_length: ERROR: 22023: cannot get array length of a scalar  (Alexander Farber <alexander.farber@gmail.com>)
List pgsql-general
On Fri, Mar 2, 2018 at 11:58 AM, Alexander Farber <alexander.farber@gmail.com> wrote:
I see, thank you for your comments, David and Adrian.

In the "tiles" column actually save either the JSON array of tiles - when the user plays them

Or a string (which is jsonb too) concatenated of letters - when the user swaps the letters.

Maybe I should rethink my table structure (I just want to "log" all plays, swaps, skips, resigns in the words_moves table)...

Or maybe I should always check for the "action" column first (acts as enum) - before accessing "tiles" column....


​A table constraint like:

CASE WHEN action = 'Play'
           THEN lengh < 0
           WHEN action = 'Swap'
           THEN ...
           ELSE false
END

Is perfectly fine - though having actual non-null values take on different meanings based upon the enum is generally not a good idea.  I've been using the above to enforce conditional not null constraints when I don't want to implement explicit inheritance​.

David J.

pgsql-general by date:

Previous
From: Alexander Farber
Date:
Subject: Re: jsonb_array_length: ERROR: 22023: cannot get array length of a scalar
Next
From: "Joshua D. Drake"
Date:
Subject: Re: Is there a continuous backup for pg ?