From: Pavel Stehule <pavel.steh...@gmail.com>
--------------------------------------------------
I am sorry, but in this topic we have different opinions. The variables in 
PLpgSQL are not transactional too (same is true in Perl, Python, ...). Session 
variables in Oracle, MS SQL, DB2, MySQL are not transactional too. My primary 
focus is PLpgSQL - and I would like to use schema variables as global plpgsql 
variables (from PLpgSQL perspective) - that means in Postgres's perspective 
session variables. But in Postgres, I have to write features that will work 
with others PL too - PLPython, PLPerl, ... Statement SET in ANSI/SQL standard 
(SQL/PSM) doesn't expect transactional behaviour for variables too. 
Unfortunately SET keyword is used in Postgres for GUC, and isn't possible to 
reuse without a compatibility break.

The PostgreSQL configuration is transactional, but it is a different feature 
designed for different purposes. Using GUC like session variables is just a 
workaround. It can be useful for some cases, sure. But it is not usual 
behaviour. And for other cases the transactional behaviour is not practical. 
Schema variables are not replacement of GUC, schema variables are not 
replacement of temporal tables. There is a prepared patch for global temp 
tables. I hope so this patch can be committed to Postgres 15. Global temp 
tables fixes almost all disadvantages of temporary tables in Postgres. So the 
schema variable is not a one row table. It is a different creature - designed 
to support the server's side procedural features.
--------------------------------------------------

+1
I understand (and wish) this feature is intended to ease migration from Oracle 
PL/SQL, which will further increase the popularity of Postgres.  So, the 
transactional behavior is not necessary unless Oracle has such a feature.

Furthermore, Postgres already has some non-transactonal SQL commands.  So, I 
don't think we need to reject non-transactional LET.

* Sequence operation: SELECT nextval/setval
* SET [SESSION]
* SET ROLE
* SET SESSION AUTHORIZATION


--------------------------------------------------
I have prepared a patch that allows non default transactional behaviour (but 
this behaviour should not be default - I didn't design schema variables as temp 
tables replacement). This patch increases the length of the current patch about 
1/4, and I have enough work with rebasing with the current patch, so I didn't 
send it to commitfest now. If schema variables will be inside core, this day 
I'll send the patch that allows transactional behaviour for schema variables - 
I promise.
--------------------------------------------------

I prefer the simpler, targeted one without transactional behavior initially, 
because added complexity might prevent this feature from being committed in PG 
15.


Regards
Takayuki Tsunakawa

Reply via email to