On Fri, Mar 4, 2016 at 6:59 AM, Alexander Farber <alexander.far...@gmail.com
> wrote:

> Hello,
>
> for a Scrabble-like word game using PostgreSQL 9.5 as backend
> I am trying to add CHECK constraints to the VARCHAR arrays:
>
> CREATE TABLE words_games (
>         gid SERIAL PRIMARY KEY,
>         created timestamptz NOT NULL,
>
>         player1 integer REFERENCES words_users(uid) ON DELETE CASCADE NOT
> NULL,
>         player2 integer REFERENCES words_users(uid) ON DELETE CASCADE,
>
>         played1 timestamptz,
>         played2 timestamptz,
>
>         hand1 varchar[7] NOT NULL CHECK (ALL(hand1) ~ '^[*A-Z]$'),
>         hand2 varchar[7] NOT NULL CHECK (ALL(hand2) ~ '^[*A-Z]$'),
>         pile  varchar[116] NOT NULL CHECK (ALL(pile) ~ '^[*A-Z]$'),
>
>         board varchar[15][15] NOT NULL CHECK (ALL(board) ~ '^[.A-Z]$'),
>         style integer NOT NULL CHECK (1 <= style AND style <= 4)
> );
>
> but get syntax errors near "ALL"
>
> ERROR:  syntax error at or near "ALL"
> LINE 8:         hand1 varchar[7] NOT NULL CHECK (ALL(hand1) ~ '^[A-Z...
>                                                  ^
> - probably because that keyword is supposed to be on the right side?
>
> Could anyone please recommend a way to implement check constraints here?
>
>
​Google'd: postgresql regexp array matching
Found:
http://stackoverflow.com/questions/22098706/how-to-use-regular-expression-with-any-array-operator

The custom operator is the most direct solution - and meets this need quite
well - the array-taking function is overkill for this though has the
benefit of being more explicit and it can expanded upon to do things a
simple operator cannot.

David J.
​

Reply via email to