Re: proposal: schema variables - Mailing list pgsql-hackers

From Pavel Stehule
Subject Re: proposal: schema variables
Date
Msg-id CAFj8pRARL4SpJQxsp4JS2t=WoZvbj7QOCgjM_mLbsv=+Qh2vxw@mail.gmail.com
Whole thread Raw
In response to RE: proposal: schema variables  (DUVAL REMI <REMI.DUVAL@CHEOPS.FR>)
List pgsql-hackers


čt 27. 2. 2020 v 15:59 odesílatel DUVAL REMI <REMI.DUVAL@cheops.fr> napsal:

Hello Pavel.

 

That looks pretty good to me !

 

I’m adding Philippe Beaudoin who was also interested in this topic.

 

Recap : We were looking for a way to separate variable from constants in the “Schema Variables” proposition from Pavel.

Pavel was saying that there are some limitations regarding the keywords we can use, as the community don’t want to introduce too much new keywords in Postgres SQL (PL/pgSQL is a different list of keywords).

“CONSTANT” is not a keyword in SQL for Now (though it is one in PL/pgSQL).

Pavel’s syntax allow to use it as a keyword in the “WITH OPTIONS” clause that is already supported.

… I think it’s a good idea.

 

The list of keywords is defined in : postgresql\src\include\parser\kwlist.h

 

Pavel, I saw that in DB2, those variables are called “Global Variables”, is it something we can consider changing, or do you prefer to keep using the “Schema Variable” name ?


It is most hard question. Global variables has sense, but when we will use it in plpgsql, then this name can be little bit confusing. Personally I prefer "schema variable" although my opinion is not too strong. This name more signalize so this is more generic, more database related than some special kind of plpgsql variables. Now, I think so maybe is better to use schema variables, because there is different syntax then global temp tables. Variables are global by design. So in this moment I prefer the name "schema variables". It can be used as global variables in plpgsql, but it is one case.

Pavel


 

 

De : Pavel Stehule [mailto:pavel.stehule@gmail.com]
Envoyé : jeudi 27 février 2020 15:38
À : DUVAL REMI <REMI.DUVAL@CHEOPS.FR>
Cc : PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Objet : Re: proposal: schema variables

 

 

Hi

 


3) Any way to define CONSTANTs ?
We already talked a bit about this subject and also Gilles Darold introduces it in this mailing-list topic but I'd like to insist on it.
I think it would be nice to have a way to say that a variable should not be changed once defined.
Maybe it's hard to implement and can be implemented later, but I just want to know if this concern is open.

 

I played little bit with it and I didn't find any nice solution, but maybe I found the solution. I had ideas about some variants, but almost all time I had a problem with parser's shifts because all potential keywords are not reserved.

 

last variant, but maybe best is using keyword WITH

 

So the syntax can looks like

 

CREATE [ TEMP ] VARIABLE varname [ AS ] type [ NOT NULL ] [ DEFAULT expression ] [ WITH [ OPTIONS ] '(' ... ')' ] ]

 

What do you think about this syntax? It doesn't need any new keyword, and it easy to enhance it.

 

CREATE VARIABLE foo AS int DEFAULT 10 WITH OPTIONS ( CONSTANT);

 

?

 

Regards

 

Pavel

 

 

pgsql-hackers by date:

Previous
From: DUVAL REMI
Date:
Subject: RE: proposal: schema variables
Next
From: Alexey Kondratov
Date:
Subject: Re: [Patch] pg_rewind: options to use restore_command fromrecovery.conf or command line