pretty_bool in pg_get_constraintdef has no effect since pg >= 9 - Mailing list pgsql-bugs

From eli.mach@mailbox.org
Subject pretty_bool in pg_get_constraintdef has no effect since pg >= 9
Date
Msg-id 490036036.13996.1582635382921@office.mailbox.org
Whole thread Raw
Responses Re: pretty_bool in pg_get_constraintdef has no effect since pg >= 9
List pgsql-bugs
Hello,

since postgres 9, `pg_get_constraintdef(cons.oid, pretty_bool)` does not work as expected. The result is always in
"pretty"-format(with newlines), regardless of whether `pretty_bool` is true or false. Calling
`pg_get_constraintdef(constraint_oid)`without `pretty_bool`, also returns "pretty"-format. 
 

Test with:

```
CREATE TABLE tbl (
   id int NOT NULL DEFAULT 0
  ,CHECK 
  (
    CASE
      WHEN id < 0 THEN false
      WHEN id >= 0 THEN true
    END
  )
);

SELECT cons.conname as name, pg_get_constraintdef(cons.oid, false) as src FROM pg_catalog.pg_constraint cons WHERE
cons.conrelidIN (SELECT oid from pg_class WHERE relname='tbl') AND cons.contype = 'c';
 
```

Result on postgres 8:
```
CHECK (CASE WHEN (id < 0) THEN false WHEN (id >= 0) THEN true ELSE NULL::boolean END)
```

Result on postgres >= 9:
```
CHECK (                     
CASE                        
    WHEN (id < 0) THEN false
    WHEN (id >= 0) THEN true
    ELSE NULL::boolean      
END)
```

I'm migrating from postgres 8 to 11 and a sqlalchemy script throws a warning "SAWarning: Could not parse CHECK
constrainttext" because there a no newlines expected in `re.match(r"^CHECK *\((.+)\)( NOT VALID)?$", src)`.
 

Greetings,
elim.



pgsql-bugs by date:

Previous
From: Daniel Gustafsson
Date:
Subject: Re: BUG #16274: Repeated Libraries in Mac
Next
From: Daniel Gustafsson
Date:
Subject: Re: pretty_bool in pg_get_constraintdef has no effect since pg >= 9