Re: Can't find the right generated column syntax

Bzzzz <[email protected]> Tue, 26 Nov 2019 04:39:42 +0100
Newsgroups gmane.comp.db.postgresql.novice
Organization Anyone, anywhere BUT in banana demokratik republik of france and UERSS.
Message-ID <[email protected]>
On Mon, 25 Nov 2019 20:31:31 -0700
"David G. Johnston" <[email protected]> wrote:

> On Monday, November 25, 2019, Bzzzz <[email protected]> wrote:
>=20
> > On Mon, 25 Nov 2019 19:41:00 -0700
> > "David G. Johnston" <[email protected]> wrote:
> >
> > > On Monday, November 25, 2019, Bzzzz <[email protected]> wrote:
> > >
> > > > Hi list,
> > > >
> > > > I've got this table:
> > > >         date_start      timestamptz,
> > > >         date_end        temstamptz
> > > >
> > > > and I'd like to auto-generate a 3rd column with a tstzrange:
> > > >         date_start      timestamptz,
> > > >         date_end        temstamptz,
> > > >         duration        tstzrange GENERATED ALWAYS AS ( ? )
> > > > STORED
> > > >
> > > > but I can't find the right syntax to do so :/ (is it even
> > > > possible ?)
> > > >
> > > >
> > > You should provide actual SQL without typos
> >
> >
> [... lots of stuff many of which aren=E2=80=99t expressions]
>=20
> Probably should read the docs as to what an expression is and limit
> your random tests to just those...
>=20
> https://www.postgresql.org/docs/12/sql-expressions.html
>=20
>=20
> > CREATE TABLE tst_timerange(a timestamptz, b timestamptz, c tstzrange
> > generated always as ( ('['a,b'('::tstzrange) ) stored); ERROR:
> > syntax error at or near "a" LINE 1: ...imestamptz, c tstzrange
> > generated always as ( ('['a,b'('::ts...
> >
> >
> Use the closing symbol of the pair for the upper bound...

You obviously did not read about ts(tz)ranges.

> That=E2=80=99s an impressive amount of random input that you seem to be
> claiming you don=E2=80=99t understand why you were in error...your issue =
is a
> lot bigger than just not knowing how to read the syntax for the
> generated column feature ; for instance using learning technique
> whereby you demonstrate a correctly executed expression using a simple
> SELECT command first, before attempting to incorporate said working
> expression in the larger create table command (without SELECT since
> its presence turns an expression into a statement).
>=20
> I=E2=80=99m not running v12 but probably...as ( tstzrange(a,b,=E2=80=99[)=
=E2=80=99) )

That did the trick, thanks.

> using a function expression is the easiest.

Yeah, but I'm up for more than 48h now=E2=80=A6

JY