Schema variables - new implementation for Postgres 15

Started by Pavel Stehulealmost 5 years ago365 messages
Jump to latest
#1Pavel Stehule
pavel.stehule@gmail.com

Hi,

I am returning back to implementation of schema variables. The schema
variables can be used as an alternative to package variables (Oracle's
PL/SQL or ADA). The schema variables can be used as fast and safe storage
of session information for RLS too.

The previous implementation had not cleanly implemented execution of the
LET statement. It was something between query and utility, and although it
was working - it was out of Postgres concept (with different implementation
of queries and utilities).

I totally rewrote the implementation of the LET statement. I prepared two
variants:

First variant is based on the introduction of the new command type CMD_LET
and new very small executor node SetVariable (this is a very very reduced
analogy of ModifyTable node). The code is consistent and what is important
- the LET statement can be prepared. The execution is relatively fast from
PLpgSQL too. Without any special support the execution has the same speed
like non simple queries. The statement reuses an execution plan, but
simple execution is not supported.

Second variant is implemented like a classic utility command. There is not
any surprise. It is shorter, simple, but the LET statement cannot be
prepared (this is the limit of all utility statements). Without special
support in PLpgSQL the execution is about 10x slower than the execution of
the first variant. But there is a new possibility of using the main parser
from PLpgSQL (implemented by Tom for new implementation of assign statement
in pg 14), and then this support in plpgsql requires only a few lines).
When the statement LET is explicitly supported by PLpgSQL, then execution
is very fast (the speed is comparable with the speed of the assign
statement) - it is about 10x faster than the first variant.

I tested code

do $$
declare x int ;
begin
for i in 1..1000000
loop
let ooo = i;
end loop;
end;
$$;

variant 1 .. 1500 ms
variant 2 with PLpgSQL support .. 140 ms
variant 2 without PLpgSQL support 9000 ms

The slower speed of the first variant from PLpgSQL can be fixed. But for
this moment, the speed is good enough. This is the worst case, because in
the first variant LET statement cannot use optimization for simple query
evaluation (now).

Now I think so implementation is significantly cleaner, and I hope so it
will be more acceptable for committers.

I am starting a new thread, because this is a new implementation, and
because I am sending two alternative implementations of one functionality.

Comments, notes, objections?

Regards

Pavel

Attachments:

schema-variables-v-execnode-2021-01.patchtext/x-patch; charset=UTF-8; name=schema-variables-v-execnode-2021-01.patchDownload+6475-66
schema-variables-v-utility-2021-01.patchtext/x-patch; charset=UTF-8; name=schema-variables-v-utility-2021-01.patchDownload+6334-67
#2tsunakawa.takay@fujitsu.com
tsunakawa.takay@fujitsu.com
In reply to: Pavel Stehule (#1)
RE: Schema variables - new implementation for Postgres 15

From: Pavel Stehule <pavel.stehule@gmail.com>
--------------------------------------------------
do $$
declare x int ;
begin
for i in 1..1000000
loop
let ooo = i;
end loop;
end;
$$;

variant 1 .. 1500 ms
variant 2 with PLpgSQL support .. 140 ms
variant 2 without PLpgSQL support 9000 ms
--------------------------------------------------

That's impressive! But 1 million times of variable assignment took only 140 ms? It's that one assignment took only 140 nanosecond, which is near one DRAM access? Can PL/pgSQL processing be really so fast?

Regards
Takayuki Tsunakawa

#3Pavel Stehule
pavel.stehule@gmail.com
In reply to: tsunakawa.takay@fujitsu.com (#2)
Re: Schema variables - new implementation for Postgres 15

čt 15. 4. 2021 v 18:02 odesílatel tsunakawa.takay@fujitsu.com <
tsunakawa.takay@fujitsu.com> napsal:

From: Pavel Stehule <pavel.stehule@gmail.com>

--------------------------------------------------

do $$

declare x int ;

begin

for i in 1..1000000

loop

let ooo = i;

end loop;

end;

$$;

variant 1 .. 1500 ms

variant 2 with PLpgSQL support .. 140 ms

variant 2 without PLpgSQL support 9000 ms

--------------------------------------------------

That's impressive! But 1 million times of variable assignment took only
140 ms? It's that one assignment took only 140 nanosecond, which is near
one DRAM access? Can PL/pgSQL processing be really so fast?

In this case the PLpgSQL can be very fast - and after changes in pg 13, the
PLpgSQL is not significantly slower than Lua or than PHP.

Every body can repeat these tests - I did it on my Lenovo T520 notebook

Pavel

Show quoted text

Regards

Takayuki Tsunakawa

#4Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#1)
Re: Schema variables - new implementation for Postgres 15

čt 15. 4. 2021 v 10:42 odesílatel Pavel Stehule <pavel.stehule@gmail.com>
napsal:

Hi,

I am returning back to implementation of schema variables. The schema
variables can be used as an alternative to package variables (Oracle's
PL/SQL or ADA). The schema variables can be used as fast and safe storage
of session information for RLS too.

The previous implementation had not cleanly implemented execution of the
LET statement. It was something between query and utility, and although it
was working - it was out of Postgres concept (with different implementation
of queries and utilities).

I totally rewrote the implementation of the LET statement. I prepared two
variants:

First variant is based on the introduction of the new command type CMD_LET
and new very small executor node SetVariable (this is a very very reduced
analogy of ModifyTable node). The code is consistent and what is important
- the LET statement can be prepared. The execution is relatively fast from
PLpgSQL too. Without any special support the execution has the same speed
like non simple queries. The statement reuses an execution plan, but
simple execution is not supported.

Second variant is implemented like a classic utility command. There is not
any surprise. It is shorter, simple, but the LET statement cannot be
prepared (this is the limit of all utility statements). Without special
support in PLpgSQL the execution is about 10x slower than the execution of
the first variant. But there is a new possibility of using the main parser
from PLpgSQL (implemented by Tom for new implementation of assign statement
in pg 14), and then this support in plpgsql requires only a few lines).
When the statement LET is explicitly supported by PLpgSQL, then execution
is very fast (the speed is comparable with the speed of the assign
statement) - it is about 10x faster than the first variant.

I tested code

do $$
declare x int ;
begin
for i in 1..1000000
loop
let ooo = i;
end loop;
end;
$$;

variant 1 .. 1500 ms
variant 2 with PLpgSQL support .. 140 ms
variant 2 without PLpgSQL support 9000 ms

The slower speed of the first variant from PLpgSQL can be fixed. But for
this moment, the speed is good enough. This is the worst case, because in
the first variant LET statement cannot use optimization for simple query
evaluation (now).

Now I think so implementation is significantly cleaner, and I hope so it
will be more acceptable for committers.

I am starting a new thread, because this is a new implementation, and
because I am sending two alternative implementations of one functionality.

Comments, notes, objections?

I am sending only one patch and I assign this thread to commitfest
application

Regards

Pavel

Show quoted text

Regards

Pavel

Attachments:

schema-variables-v-utility-2021-01.patchtext/x-patch; charset=UTF-8; name=schema-variables-v-utility-2021-01.patchDownload+6334-67
#5Joel Jacobson
joel@compiler.org
In reply to: Pavel Stehule (#1)
Re: Schema variables - new implementation for Postgres 15

On Thu, Apr 15, 2021, at 10:42, Pavel Stehule wrote:

*Attachments:*
* schema-variables-v-execnode-2021-01.patch
* schema-variables-v-utility-2021-01.patch

Applications are currently know to be misusing set_config()+current_setting() to pass information in a session or transaction.

Such users might be interested in using Schema variables as a better replacement.

However, since set_config() is transactional, it can't be used as a drop-in replacement:

+   <para>
+    The value of a schema variable is local to the current session. Retrieving
+    a variable's value returns either a NULL or a default value, unless its value
+    is set to something else in the current session with a LET command. The content
+    of a variable is not transactional. This is the same as in regular variables
+    in PL languages.
+   </para>

I think the "The content of a variable is not transactional." part is therefore a bad idea.

Another pattern is to use TEMP TABLEs to pass around information in a session or transaction.
If the LET command would be transactional, it could be used as a drop-in replacement for such use-cases as well.

Furthermore, I think a non-transactional LET command would be insidious,
since it looks like any other SQL command, all of which are transactional.
(The ones that aren't such as REINDEX CONCURRENTLY will properly throw an error if run inside a transaction block.)

A non-transactional LET command IMO would be non-SQL-idiomatic and non-intuitive.

/Joel

#6Pavel Stehule
pavel.stehule@gmail.com
In reply to: Joel Jacobson (#5)
Re: Schema variables - new implementation for Postgres 15

pá 16. 4. 2021 v 8:07 odesílatel Joel Jacobson <joel@compiler.org> napsal:

On Thu, Apr 15, 2021, at 10:42, Pavel Stehule wrote:

*Attachments:*

- schema-variables-v-execnode-2021-01.patch
- schema-variables-v-utility-2021-01.patch

Applications are currently know to be misusing
set_config()+current_setting() to pass information in a session or
transaction.

Such users might be interested in using Schema variables as a better
replacement.

However, since set_config() is transactional, it can't be used as a
drop-in replacement:

+   <para>
+    The value of a schema variable is local to the current session.
Retrieving
+    a variable's value returns either a NULL or a default value, unless
its value
+    is set to something else in the current session with a LET command.
The content
+    of a variable is not transactional. This is the same as in regular
variables
+    in PL languages.
+   </para>

I think the "The content of a variable is not transactional." part is
therefore a bad idea.

Another pattern is to use TEMP TABLEs to pass around information in a
session or transaction.
If the LET command would be transactional, it could be used as a drop-in
replacement for such use-cases as well.

Furthermore, I think a non-transactional LET command would be insidious,
since it looks like any other SQL command, all of which are transactional.
(The ones that aren't such as REINDEX CONCURRENTLY will properly throw an
error if run inside a transaction block.)

A non-transactional LET command IMO would be non-SQL-idiomatic and
non-intuitive.

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.

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.

Regards

Pavel

Show quoted text

/Joel

#7tsunakawa.takay@fujitsu.com
tsunakawa.takay@fujitsu.com
In reply to: Pavel Stehule (#6)
RE: Schema variables - new implementation for Postgres 15

From: Pavel Stehule <pavel.stehule@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

#8Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#4)
Re: Schema variables - new implementation for Postgres 15

Hi

only rebase

Regards

Pavel

Attachments:

schema-variables-2021-05-12.patch.gzapplication/gzip; name=schema-variables-2021-05-12.patch.gzDownload+1-1
#9Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#8)
Re: Schema variables - new implementation for Postgres 15

st 12. 5. 2021 v 6:17 odesílatel Pavel Stehule <pavel.stehule@gmail.com>
napsal:

Hi

only rebase

second try - rebase after serial_scheduler remove

Regards

Pavel

Show quoted text

Regards

Pavel

Attachments:

schema-variables-2021-05-12-2.patch.gzapplication/gzip; name=schema-variables-2021-05-12-2.patch.gzDownload
#10Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#9)
Re: Schema variables - new implementation for Postgres 15

st 12. 5. 2021 v 7:37 odesílatel Pavel Stehule <pavel.stehule@gmail.com>
napsal:

st 12. 5. 2021 v 6:17 odesílatel Pavel Stehule <pavel.stehule@gmail.com>
napsal:

Hi

only rebase

second try - rebase after serial_scheduler remove

only rebase

Regards

Pavel

Show quoted text

Regards

Pavel

Regards

Pavel

Attachments:

schema-variables-20210517.patch.gzapplication/gzip; name=schema-variables-20210517.patch.gzDownload+2-1
#11Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#10)
Re: Schema variables - new implementation for Postgres 15

Hi

rebase

Regards

Pavel

Attachments:

schema-variables-20210612.patch.gzapplication/gzip; name=schema-variables-20210612.patch.gzDownload
#12Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#11)
Re: Schema variables - new implementation for Postgres 15

so 12. 6. 2021 v 8:00 odesílatel Pavel Stehule <pavel.stehule@gmail.com>
napsal:

Hi

rebase

rebase only

Regards

Pavel

Regards

Show quoted text

Pavel

Attachments:

schema-variables-20210702.patch.gzapplication/gzip; name=schema-variables-20210702.patch.gzDownload+3-2
#13Gilles Darold
gilles.darold@dalibo.com
In reply to: Pavel Stehule (#12)
Re: Schema variables - new implementation for Postgres 15

Hi,

Review resume:

This patch implements Schema Variables that are database objects that
can hold a single or composite value following the data type used at
variable declaration. Schema variables, like relations, exist within a
schema and their access is controlled via GRANT and REVOKE commands. The
schema variable can be created by the CREATE VARIABLE command, altered
using ALTER VARIABLE and removed using DROP VARIABLE.

The value of a schema variable is local to the current session.
Retrieving a variable's value returns either a NULL or a default value,
unless its value is set to something else in the current session with a
LET command. The content of a variable is not transactional. This is the
same as in regular variables in PL languages.

Schema variables are retrieved by the SELECT SQL command. Their value is
set with the LET SQL command. While schema variables share properties
with tables, their value cannot be updated with an UPDATE command.

The patch apply with the patch command without problem and compilation
reports no warning or errors. Regression tests pass successfully using
make check or make installcheck
It also includes all documentation and regression tests.

Performances are near the set of plpgsql variable settings which is
impressive:

do $$
declare var1 int ; i int;
begin
  for i in 1..1000000
  loop
    var1 := i;
  end loop;
end;
$$;
DO
Time: 71,515 ms

CREATE VARIABLE var1 AS integer;
do $$
declare i int ;
begin
  for i in 1..1000000
  loop
    let var1 = i;
  end loop;
end;
$$;
DO
Time: 94,658 ms

There is just one thing that puzzles me.We can use :

    CREATE VARIABLE var1 AS date NOT NULL;
    postgres=# SELECT var1;
    ERROR:  null value is not allowed for NOT NULL schema variable "var1"

which I understand and is the right behavior. But if we use:

    CREATE IMMUTABLE VARIABLE var1 AS date NOT NULL;
    postgres=# SELECT var1;
    ERROR:  null value is not allowed for NOT NULL schema variable "var1"
    DETAIL:  The schema variable was not initialized yet.
    postgres=# LET var1=current_date;
    ERROR:  schema variable "var1" is declared IMMUTABLE

It should probably be better to not allow NOT NULL when IMMUTABLE is
used because the variable can not be used at all.  Also probably
IMMUTABLE without a DEFAULT value should also be restricted as it makes
no sens. If the user wants the variable to be NULL he must use DEFAULT
NULL. This is just a though, the above error messages are explicit and
the user can understand what wrong declaration he have done.

Except that I think this patch is ready for committers, so if there is
no other opinion in favor of restricting the use of IMMUTABLE with NOT
NULL and DEFAULT I will change the status to ready for committers.

--
Gilles Darold
http://www.darold.net/

#14Pavel Stehule
pavel.stehule@gmail.com
In reply to: Gilles Darold (#13)
Re: Schema variables - new implementation for Postgres 15

so 28. 8. 2021 v 11:57 odesílatel Gilles Darold <gilles@darold.net> napsal:

Hi,

Review resume:

This patch implements Schema Variables that are database objects that can
hold a single or composite value following the data type used at variable
declaration. Schema variables, like relations, exist within a schema and
their access is controlled via GRANT and REVOKE commands. The schema
variable can be created by the CREATE VARIABLE command, altered using ALTER
VARIABLE and removed using DROP VARIABLE.

The value of a schema variable is local to the current session. Retrieving
a variable's value returns either a NULL or a default value, unless its
value is set to something else in the current session with a LET command.
The content of a variable is not transactional. This is the same as in
regular variables in PL languages.

Schema variables are retrieved by the SELECT SQL command. Their value is
set with the LET SQL command. While schema variables share properties with
tables, their value cannot be updated with an UPDATE command.

The patch apply with the patch command without problem and compilation
reports no warning or errors. Regression tests pass successfully using make
check or make installcheck
It also includes all documentation and regression tests.

Performances are near the set of plpgsql variable settings which is
impressive:

do $$
declare var1 int ; i int;
begin
for i in 1..1000000
loop
var1 := i;
end loop;
end;
$$;
DO
Time: 71,515 ms

CREATE VARIABLE var1 AS integer;
do $$
declare i int ;
begin
for i in 1..1000000
loop
let var1 = i;
end loop;
end;
$$;
DO
Time: 94,658 ms

There is just one thing that puzzles me. We can use :

CREATE VARIABLE var1 AS date NOT NULL;
postgres=# SELECT var1;
ERROR: null value is not allowed for NOT NULL schema variable "var1"

which I understand and is the right behavior. But if we use:

CREATE IMMUTABLE VARIABLE var1 AS date NOT NULL;
postgres=# SELECT var1;
ERROR: null value is not allowed for NOT NULL schema variable "var1"
DETAIL: The schema variable was not initialized yet.
postgres=# LET var1=current_date;
ERROR: schema variable "var1" is declared IMMUTABLE

It should probably be better to not allow NOT NULL when IMMUTABLE is used
because the variable can not be used at all. Also probably IMMUTABLE
without a DEFAULT value should also be restricted as it makes no sens. If
the user wants the variable to be NULL he must use DEFAULT NULL. This is
just a though, the above error messages are explicit and the user can
understand what wrong declaration he have done.

I thought about this case, and I have one scenario, where this behaviour
can be useful. When the variable is declared as IMMUTABLE NOT NULL without
not null default, then any access to the content of the variable has to
fail. I think it can be used for detection, where and when the variable is
first used. So this behavior is allowed just because I think, so this
feature can be interesting for debugging. If this idea is too strange, I
have no problem to disable this case.

Regards

Pavel

Show quoted text

Except that I think this patch is ready for committers, so if there is no
other opinion in favor of restricting the use of IMMUTABLE with NOT NULL
and DEFAULT I will change the status to ready for committers.

--
Gilles Daroldhttp://www.darold.net/

#15Pavel Stehule
pavel.stehule@gmail.com
In reply to: Gilles Darold (#13)
Re: Schema variables - new implementation for Postgres 15

Hi

so 28. 8. 2021 v 11:57 odesílatel Gilles Darold <gilles@darold.net> napsal:

Hi,

Review resume:

This patch implements Schema Variables that are database objects that can
hold a single or composite value following the data type used at variable
declaration. Schema variables, like relations, exist within a schema and
their access is controlled via GRANT and REVOKE commands. The schema
variable can be created by the CREATE VARIABLE command, altered using ALTER
VARIABLE and removed using DROP VARIABLE.

The value of a schema variable is local to the current session. Retrieving
a variable's value returns either a NULL or a default value, unless its
value is set to something else in the current session with a LET command.
The content of a variable is not transactional. This is the same as in
regular variables in PL languages.

Schema variables are retrieved by the SELECT SQL command. Their value is
set with the LET SQL command. While schema variables share properties with
tables, their value cannot be updated with an UPDATE command.

The patch apply with the patch command without problem and compilation
reports no warning or errors. Regression tests pass successfully using make
check or make installcheck
It also includes all documentation and regression tests.

Performances are near the set of plpgsql variable settings which is
impressive:

do $$
declare var1 int ; i int;
begin
for i in 1..1000000
loop
var1 := i;
end loop;
end;
$$;
DO
Time: 71,515 ms

CREATE VARIABLE var1 AS integer;
do $$
declare i int ;
begin
for i in 1..1000000
loop
let var1 = i;
end loop;
end;
$$;
DO
Time: 94,658 ms

There is just one thing that puzzles me. We can use :

CREATE VARIABLE var1 AS date NOT NULL;
postgres=# SELECT var1;
ERROR: null value is not allowed for NOT NULL schema variable "var1"

which I understand and is the right behavior. But if we use:

CREATE IMMUTABLE VARIABLE var1 AS date NOT NULL;
postgres=# SELECT var1;
ERROR: null value is not allowed for NOT NULL schema variable "var1"
DETAIL: The schema variable was not initialized yet.
postgres=# LET var1=current_date;
ERROR: schema variable "var1" is declared IMMUTABLE

It should probably be better to not allow NOT NULL when IMMUTABLE is used
because the variable can not be used at all. Also probably IMMUTABLE
without a DEFAULT value should also be restricted as it makes no sens. If
the user wants the variable to be NULL he must use DEFAULT NULL. This is
just a though, the above error messages are explicit and the user can
understand what wrong declaration he have done.

I wrote a check that disables this case. Please, see the attached patch. I
agree, so this case is confusing, and it is better to disable it.

Regards

Pavel

Show quoted text

Except that I think this patch is ready for committers, so if there is no
other opinion in favor of restricting the use of IMMUTABLE with NOT NULL
and DEFAULT I will change the status to ready for committers.

--
Gilles Daroldhttp://www.darold.net/

Attachments:

schema-variables-20210908.patch.gzapplication/gzip; name=schema-variables-20210908.patch.gzDownload+2-0
#16Gilles Darold
gilles.darold@dalibo.com
In reply to: Pavel Stehule (#15)
Re: Schema variables - new implementation for Postgres 15

Le 08/09/2021 à 13:41, Pavel Stehule a écrit :

Hi

so 28. 8. 2021 v 11:57 odesílatel Gilles Darold <gilles@darold.net
<mailto:gilles@darold.net>> napsal:

Hi,

Review resume:

This patch implements Schema Variables that are database objects
that can hold a single or composite value following the data type
used at variable declaration. Schema variables, like relations,
exist within a schema and their access is controlled via GRANT and
REVOKE commands. The schema variable can be created by the CREATE
VARIABLE command, altered using ALTER VARIABLE and removed using
DROP VARIABLE.

The value of a schema variable is local to the current session.
Retrieving a variable's value returns either a NULL or a default
value, unless its value is set to something else in the current
session with a LET command. The content of a variable is not
transactional. This is the same as in regular variables in PL
languages.

Schema variables are retrieved by the SELECT SQL command. Their
value is set with the LET SQL command. While schema variables
share properties with tables, their value cannot be updated with
an UPDATE command.

The patch apply with the patch command without problem and
compilation reports no warning or errors. Regression tests pass
successfully using make check or make installcheck
It also includes all documentation and regression tests.

Performances are near the set of plpgsql variable settings which
is impressive:

do $$
declare var1 int ; i int;
begin
  for i in 1..1000000
  loop
    var1 := i;
  end loop;
end;
$$;
DO
Time: 71,515 ms

CREATE VARIABLE var1 AS integer;
do $$
declare i int ;
begin
  for i in 1..1000000
  loop
    let var1 = i;
  end loop;
end;
$$;
DO
Time: 94,658 ms

There is just one thing that puzzles me.We can use :

    CREATE VARIABLE var1 AS date NOT NULL;
    postgres=# SELECT var1;
    ERROR:  null value is not allowed for NOT NULL schema variable
"var1"

which I understand and is the right behavior. But if we use:

    CREATE IMMUTABLE VARIABLE var1 AS date NOT NULL;
    postgres=# SELECT var1;
    ERROR:  null value is not allowed for NOT NULL schema variable
"var1"
    DETAIL:  The schema variable was not initialized yet.
    postgres=# LET var1=current_date;
    ERROR:  schema variable "var1" is declared IMMUTABLE

It should probably be better to not allow NOT NULL when IMMUTABLE
is used because the variable can not be used at all.  Also
probably IMMUTABLE without a DEFAULT value should also be
restricted as it makes no sens. If the user wants the variable to
be NULL he must use DEFAULT NULL. This is just a though, the above
error messages are explicit and the user can understand what wrong
declaration he have done.

I wrote a check that disables this case.  Please, see the attached
patch. I agree, so this case is confusing, and it is better to disable it.

Great, I also think that this is better to not confuse the user.

    postgres=# CREATE IMMUTABLE VARIABLE var1 AS date NOT NULL;
    ERROR:  IMMUTABLE NOT NULL variable requires default expression

Working as expected. I have moved the patch to "Ready for committers".
Thanks for this feature.

--
Gilles Darold
http://www.darold.net/

#17Pavel Stehule
pavel.stehule@gmail.com
In reply to: Gilles Darold (#16)
Re: Schema variables - new implementation for Postgres 15

Hi

Great, I also think that this is better to not confuse the user.

postgres=# CREATE IMMUTABLE VARIABLE var1 AS date NOT NULL;
ERROR: IMMUTABLE NOT NULL variable requires default expression

Working as expected. I have moved the patch to "Ready for committers".
Thanks for this feature.

Thank you very much

Pavel

Show quoted text

--
Gilles Daroldhttp://www.darold.net/

#18Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#15)
Re: Schema variables - new implementation for Postgres 15

Hi

fresh rebase

Regards

Pavel

Attachments:

schema-variables-20210909.patch.gzapplication/gzip; name=schema-variables-20210909.patch.gzDownload+2-0
#19Erik Rijkers
er@xs4all.nl
In reply to: Pavel Stehule (#18)
Re: Schema variables - new implementation for Postgres 15

[schema-variables-20210909.patch]

Hi Pavel,

The patch applies and compiles fine but 'make check' for the
assert-enabled fails on 131 out of 210 tests.

(while compiling HEAD checks run without errors for both assert-disabled
and assert-enabled)

Erik Rijkers

test tablespace ... ok 303 ms
parallel group (20 tests): oid char pg_lsn int2 varchar txid int4
regproc uuid float4 text name money boolean bit float8 int8 enum numeric
rangetypes
boolean ... ok 112 ms
char ... ok 57 ms
name ... ok 106 ms
varchar ... ok 74 ms
text ... ok 106 ms
int2 ... ok 73 ms
int4 ... ok 92 ms
int8 ... ok 130 ms
oid ... ok 55 ms
float4 ... ok 102 ms
float8 ... ok 126 ms
bit ... ok 124 ms
numeric ... ok 362 ms
txid ... ok 87 ms
uuid ... ok 100 ms
enum ... ok 142 ms
money ... ok 109 ms
rangetypes ... ok 433 ms
pg_lsn ... ok 64 ms
regproc ... ok 91 ms
parallel group (20 tests): lseg path circle time macaddr
create_function_0 timetz line macaddr8 numerology point interval inet
date strings polygon box multirangetypes timestamp timestamptz
strings ... ok 166 ms
numerology ... ok 89 ms
point ... ok 96 ms
lseg ... ok 35 ms
line ... ok 70 ms
box ... ok 255 ms
path ... ok 50 ms
polygon ... ok 237 ms
circle ... ok 53 ms
date ... ok 127 ms
time ... ok 60 ms
timetz ... ok 67 ms
timestamp ... ok 379 ms
timestamptz ... ok 413 ms
interval ... ok 97 ms
inet ... ok 118 ms
macaddr ... ok 60 ms
macaddr8 ... ok 80 ms
multirangetypes ... ok 307 ms
create_function_0 ... ok 63 ms
parallel group (12 tests): comments unicode misc_sanity tstypes xid
expressions horology geometry mvcc type_sanity regex opr_sanity
geometry ... ok 140 ms
horology ... ok 120 ms
tstypes ... ok 53 ms
regex ... ok 335 ms
type_sanity ... ok 155 ms
opr_sanity ... ok 355 ms
misc_sanity ... ok 43 ms
comments ... ok 20 ms
expressions ... ok 100 ms
unicode ... ok 25 ms
xid ... ok 56 ms
mvcc ... ok 146 ms
test create_function_1 ... ok 10 ms
test create_type ... ok 30 ms
test create_table ... ok 333 ms
test create_function_2 ... ok 11 ms
parallel group (5 tests): copydml copyselect insert_conflict insert copy
copy ... ok 336 ms
copyselect ... ok 34 ms
copydml ... ok 28 ms
insert ... ok 291 ms
insert_conflict ... FAILED (test process exited with
exit code 2) 239 ms
parallel group (3 tests): create_operator create_procedure create_misc
create_misc ... ok 131 ms
create_operator ... ok 29 ms
create_procedure ... ok 52 ms
parallel group (5 tests): create_view create_index_spgist
index_including create_index index_including_gist
create_index ... FAILED (test process exited with
exit code 2) 3801 ms
create_index_spgist ... ok 523 ms
create_view ... FAILED (test process exited with
exit code 2) 339 ms
index_including ... FAILED (test process exited with
exit code 2) 3801 ms
index_including_gist ... FAILED (test process exited with
exit code 2) 3801 ms
parallel group (16 tests): create_aggregate create_cast typed_table
drop_if_exists roleattributes create_am hash_func updatable_views errors
infinite_recurse create_function_3 triggers constraints select inherit
vacuum
create_aggregate ... FAILED (test process exited with
exit code 2) 164 ms
create_function_3 ... FAILED (test process exited with
exit code 2) 164 ms
create_cast ... FAILED (test process exited with
exit code 2) 164 ms
constraints ... FAILED (test process exited with
exit code 2) 181 ms
triggers ... FAILED (test process exited with
exit code 2) 181 ms
select ... FAILED (test process exited with
exit code 2) 181 ms
inherit ... FAILED (test process exited with
exit code 2) 181 ms
typed_table ... FAILED (test process exited with
exit code 2) 163 ms
vacuum ... FAILED (test process exited with
exit code 2) 180 ms
drop_if_exists ... FAILED (test process exited with
exit code 2) 163 ms
updatable_views ... FAILED (test process exited with
exit code 2) 163 ms
roleattributes ... FAILED (test process exited with
exit code 2) 163 ms
create_am ... FAILED (test process exited with
exit code 2) 163 ms
hash_func ... FAILED (test process exited with
exit code 2) 162 ms
errors ... FAILED (test process exited with
exit code 2) 162 ms
infinite_recurse ... FAILED (test process exited with
exit code 2) 162 ms
test sanity_check ... FAILED (test process exited with
exit code 2) 26 ms
parallel group (20 tests): select_into subselect select_distinct arrays
join namespace hash_index select_having portals transactions aggregates
random update delete union btree_index select_implicit
select_distinct_on prepared_xacts case
select_into ... FAILED (test process exited with
exit code 2) 20 ms
select_distinct ... FAILED (test process exited with
exit code 2) 21 ms
select_distinct_on ... FAILED (test process exited with
exit code 2) 26 ms
select_implicit ... FAILED (test process exited with
exit code 2) 26 ms
select_having ... FAILED (test process exited with
exit code 2) 23 ms
subselect ... FAILED (test process exited with
exit code 2) 20 ms
union ... FAILED (test process exited with
exit code 2) 25 ms
case ... FAILED (test process exited with
exit code 2) 27 ms
join ... FAILED (test process exited with
exit code 2) 22 ms
aggregates ... FAILED (test process exited with
exit code 2) 24 ms
transactions ... FAILED (test process exited with
exit code 2) 24 ms
random ... failed (ignored) (test process
exited with exit code 2) 24 ms
portals ... FAILED (test process exited with
exit code 2) 23 ms
arrays ... FAILED (test process exited with
exit code 2) 20 ms
btree_index ... FAILED (test process exited with
exit code 2) 25 ms
hash_index ... FAILED (test process exited with
exit code 2) 22 ms
update ... FAILED (test process exited with
exit code 2) 23 ms
delete ... FAILED (test process exited with
exit code 2) 24 ms
namespace ... FAILED (test process exited with
exit code 2) 21 ms
prepared_xacts ... FAILED (test process exited with
exit code 2) 25 ms
parallel group (20 tests): gist brin identity generated password
tablesample lock matview replica_identity rowsecurity security_label
object_address drop_operator groupingsets join_hash privileges collate
init_privs spgist gin
brin ... FAILED (test process exited with
exit code 2) 15 ms
gin ... FAILED (test process exited with
exit code 2) 22 ms
gist ... FAILED (test process exited with
exit code 2) 13 ms
spgist ... FAILED (test process exited with
exit code 2) 22 ms
privileges ... FAILED (test process exited with
exit code 2) 19 ms
init_privs ... FAILED (test process exited with
exit code 2) 21 ms
security_label ... FAILED (test process exited with
exit code 2) 17 ms
collate ... FAILED (test process exited with
exit code 2) 20 ms
matview ... FAILED (test process exited with
exit code 2) 17 ms
lock ... FAILED (test process exited with
exit code 2) 15 ms
replica_identity ... FAILED (test process exited with
exit code 2) 17 ms
rowsecurity ... FAILED (test process exited with
exit code 2) 17 ms
object_address ... FAILED (test process exited with
exit code 2) 17 ms
tablesample ... FAILED (test process exited with
exit code 2) 15 ms
groupingsets ... FAILED (test process exited with
exit code 2) 17 ms
drop_operator ... FAILED (test process exited with
exit code 2) 17 ms
password ... FAILED (test process exited with
exit code 2) 14 ms
identity ... FAILED (test process exited with
exit code 2) 13 ms
generated ... FAILED (test process exited with
exit code 2) 14 ms
join_hash ... FAILED (test process exited with
exit code 2) 18 ms
parallel group (2 tests): brin_multi brin_bloom
brin_bloom ... FAILED (test process exited with
exit code 2) 4 ms
brin_multi ... FAILED (test process exited with
exit code 2) 4 ms
parallel group (14 tests): async create_table_like collate.icu.utf8
misc sysviews alter_operator tidscan tidrangescan alter_generic tsrf
incremental_sort misc_functions tid dbsize
create_table_like ... FAILED (test process exited with
exit code 2) 10 ms
alter_generic ... FAILED (test process exited with
exit code 2) 15 ms
alter_operator ... FAILED (test process exited with
exit code 2) 13 ms
misc ... FAILED (test process exited with
exit code 2) 11 ms
async ... FAILED (test process exited with
exit code 2) 9 ms
dbsize ... FAILED (test process exited with
exit code 2) 17 ms
misc_functions ... FAILED (test process exited with
exit code 2) 14 ms
sysviews ... FAILED (test process exited with
exit code 2) 12 ms
tsrf ... FAILED (test process exited with
exit code 2) 14 ms
tid ... FAILED (test process exited with
exit code 2) 16 ms
tidscan ... FAILED (test process exited with
exit code 2) 13 ms
tidrangescan ... FAILED (test process exited with
exit code 2) 13 ms
collate.icu.utf8 ... FAILED (test process exited with
exit code 2) 9 ms
incremental_sort ... FAILED (test process exited with
exit code 2) 13 ms
parallel group (6 tests): amutils psql_crosstab collate.linux.utf8 psql
stats_ext rules
rules ... FAILED (test process exited with
exit code 2) 8 ms
psql ... FAILED (test process exited with
exit code 2) 7 ms
psql_crosstab ... FAILED (test process exited with
exit code 2) 7 ms
amutils ... FAILED (test process exited with
exit code 2) 7 ms
stats_ext ... FAILED (test process exited with
exit code 2) 8 ms
collate.linux.utf8 ... FAILED (test process exited with
exit code 2) 7 ms
test select_parallel ... FAILED (test process exited with
exit code 2) 3 ms
test write_parallel ... FAILED (test process exited with
exit code 2) 3 ms
parallel group (2 tests): publication subscription
publication ... FAILED (test process exited with
exit code 2) 4 ms
subscription ... FAILED (test process exited with
exit code 2) 4 ms
parallel group (17 tests): select_views foreign_key xmlmap window
functional_deps tsearch cluster combocid bitmapops tsdicts equivclass
guc indirect_toast advisory_lock foreign_data dependency portals_p2
select_views ... FAILED (test process exited with
exit code 2) 11 ms
portals_p2 ... FAILED (test process exited with
exit code 2) 20 ms
foreign_key ... FAILED (test process exited with
exit code 2) 11 ms
cluster ... FAILED (test process exited with
exit code 2) 15 ms
dependency ... FAILED (test process exited with
exit code 2) 19 ms
guc ... FAILED (test process exited with
exit code 2) 16 ms
bitmapops ... FAILED (test process exited with
exit code 2) 16 ms
combocid ... FAILED (test process exited with
exit code 2) 15 ms
tsearch ... FAILED (test process exited with
exit code 2) 14 ms
tsdicts ... FAILED (test process exited with
exit code 2) 16 ms
foreign_data ... FAILED (test process exited with
exit code 2) 17 ms
window ... FAILED (test process exited with
exit code 2) 12 ms
xmlmap ... FAILED (test process exited with
exit code 2) 12 ms
functional_deps ... FAILED (test process exited with
exit code 2) 13 ms
advisory_lock ... FAILED (test process exited with
exit code 2) 16 ms
indirect_toast ... FAILED (test process exited with
exit code 2) 16 ms
equivclass ... FAILED (test process exited with
exit code 2) 15 ms
parallel group (6 tests): json json_encoding jsonb jsonpath_encoding
jsonb_jsonpath jsonpath
json ... FAILED (test process exited with
exit code 2) 4 ms
jsonb ... FAILED (test process exited with
exit code 2) 6 ms
json_encoding ... FAILED (test process exited with
exit code 2) 5 ms
jsonpath ... FAILED (test process exited with
exit code 2) 10 ms
jsonpath_encoding ... FAILED (test process exited with
exit code 2) 6 ms
jsonb_jsonpath ... FAILED (test process exited with
exit code 2) 7 ms
parallel group (19 tests): plpgsql limit rowtypes sequence largeobject
returning domain polymorphism plancache prepare alter_table truncate
temp rangefuncs with copy2 conversion schema_variables xml
plancache ... FAILED (test process exited with
exit code 2) 16 ms
limit ... FAILED (test process exited with
exit code 2) 10 ms
plpgsql ... FAILED (test process exited with
exit code 2) 7 ms
copy2 ... FAILED (test process exited with
exit code 2) 25 ms
temp ... FAILED (test process exited with
exit code 2) 21 ms
domain ... FAILED (test process exited with
exit code 2) 13 ms
rangefuncs ... FAILED (test process exited with
exit code 2) 22 ms
prepare ... FAILED (test process exited with
exit code 2) 19 ms
conversion ... FAILED (test process exited with
exit code 2) 24 ms
truncate ... FAILED (test process exited with
exit code 2) 19 ms
alter_table ... FAILED (test process exited with
exit code 2) 18 ms
sequence ... FAILED (test process exited with
exit code 2) 11 ms
polymorphism ... FAILED (test process exited with
exit code 2) 13 ms
rowtypes ... FAILED (test process exited with
exit code 2) 10 ms
returning ... FAILED (test process exited with
exit code 2) 11 ms
largeobject ... FAILED (test process exited with
exit code 2) 10 ms
with ... FAILED (test process exited with
exit code 2) 22 ms
xml ... FAILED (test process exited with
exit code 2) 23 ms
schema_variables ... FAILED (test process exited with
exit code 2) 23 ms
parallel group (11 tests): explain hash_part partition_info reloptions
memoize compression partition_aggregate partition_join indexing
partition_prune tuplesort
partition_join ... FAILED 902 ms
partition_prune ... ok 1006 ms
reloptions ... ok 106 ms
hash_part ... ok 99 ms
indexing ... ok 929 ms
partition_aggregate ... ok 791 ms
partition_info ... ok 104 ms
tuplesort ... ok 1099 ms
explain ... ok 90 ms
compression ... ok 214 ms
memoize ... ok 109 ms
parallel group (2 tests): event_trigger oidjoins
event_trigger ... ok 107 ms
oidjoins ... ok 157 ms
test fast_default ... ok 138 ms
test stats ... ok 617 ms

Show quoted text

On 9/9/21 6:59 AM, Pavel Stehule wrote:

Hi

fresh rebase

Regards

Pavel

#20Pavel Stehule
pavel.stehule@gmail.com
In reply to: Erik Rijkers (#19)
Re: Schema variables - new implementation for Postgres 15

Hi

čt 9. 9. 2021 v 12:21 odesílatel Erik Rijkers <er@xs4all.nl> napsal:

[schema-variables-20210909.patch]

Hi Pavel,

The patch applies and compiles fine but 'make check' for the
assert-enabled fails on 131 out of 210 tests.

This morning I tested it. I'll recheck it.

Pavel

Show quoted text

(while compiling HEAD checks run without errors for both assert-disabled
and assert-enabled)

Erik Rijkers

test tablespace ... ok 303 ms
parallel group (20 tests): oid char pg_lsn int2 varchar txid int4
regproc uuid float4 text name money boolean bit float8 int8 enum numeric
rangetypes
boolean ... ok 112 ms
char ... ok 57 ms
name ... ok 106 ms
varchar ... ok 74 ms
text ... ok 106 ms
int2 ... ok 73 ms
int4 ... ok 92 ms
int8 ... ok 130 ms
oid ... ok 55 ms
float4 ... ok 102 ms
float8 ... ok 126 ms
bit ... ok 124 ms
numeric ... ok 362 ms
txid ... ok 87 ms
uuid ... ok 100 ms
enum ... ok 142 ms
money ... ok 109 ms
rangetypes ... ok 433 ms
pg_lsn ... ok 64 ms
regproc ... ok 91 ms
parallel group (20 tests): lseg path circle time macaddr
create_function_0 timetz line macaddr8 numerology point interval inet
date strings polygon box multirangetypes timestamp timestamptz
strings ... ok 166 ms
numerology ... ok 89 ms
point ... ok 96 ms
lseg ... ok 35 ms
line ... ok 70 ms
box ... ok 255 ms
path ... ok 50 ms
polygon ... ok 237 ms
circle ... ok 53 ms
date ... ok 127 ms
time ... ok 60 ms
timetz ... ok 67 ms
timestamp ... ok 379 ms
timestamptz ... ok 413 ms
interval ... ok 97 ms
inet ... ok 118 ms
macaddr ... ok 60 ms
macaddr8 ... ok 80 ms
multirangetypes ... ok 307 ms
create_function_0 ... ok 63 ms
parallel group (12 tests): comments unicode misc_sanity tstypes xid
expressions horology geometry mvcc type_sanity regex opr_sanity
geometry ... ok 140 ms
horology ... ok 120 ms
tstypes ... ok 53 ms
regex ... ok 335 ms
type_sanity ... ok 155 ms
opr_sanity ... ok 355 ms
misc_sanity ... ok 43 ms
comments ... ok 20 ms
expressions ... ok 100 ms
unicode ... ok 25 ms
xid ... ok 56 ms
mvcc ... ok 146 ms
test create_function_1 ... ok 10 ms
test create_type ... ok 30 ms
test create_table ... ok 333 ms
test create_function_2 ... ok 11 ms
parallel group (5 tests): copydml copyselect insert_conflict insert copy
copy ... ok 336 ms
copyselect ... ok 34 ms
copydml ... ok 28 ms
insert ... ok 291 ms
insert_conflict ... FAILED (test process exited with
exit code 2) 239 ms
parallel group (3 tests): create_operator create_procedure create_misc
create_misc ... ok 131 ms
create_operator ... ok 29 ms
create_procedure ... ok 52 ms
parallel group (5 tests): create_view create_index_spgist
index_including create_index index_including_gist
create_index ... FAILED (test process exited with
exit code 2) 3801 ms
create_index_spgist ... ok 523 ms
create_view ... FAILED (test process exited with
exit code 2) 339 ms
index_including ... FAILED (test process exited with
exit code 2) 3801 ms
index_including_gist ... FAILED (test process exited with
exit code 2) 3801 ms
parallel group (16 tests): create_aggregate create_cast typed_table
drop_if_exists roleattributes create_am hash_func updatable_views errors
infinite_recurse create_function_3 triggers constraints select inherit
vacuum
create_aggregate ... FAILED (test process exited with
exit code 2) 164 ms
create_function_3 ... FAILED (test process exited with
exit code 2) 164 ms
create_cast ... FAILED (test process exited with
exit code 2) 164 ms
constraints ... FAILED (test process exited with
exit code 2) 181 ms
triggers ... FAILED (test process exited with
exit code 2) 181 ms
select ... FAILED (test process exited with
exit code 2) 181 ms
inherit ... FAILED (test process exited with
exit code 2) 181 ms
typed_table ... FAILED (test process exited with
exit code 2) 163 ms
vacuum ... FAILED (test process exited with
exit code 2) 180 ms
drop_if_exists ... FAILED (test process exited with
exit code 2) 163 ms
updatable_views ... FAILED (test process exited with
exit code 2) 163 ms
roleattributes ... FAILED (test process exited with
exit code 2) 163 ms
create_am ... FAILED (test process exited with
exit code 2) 163 ms
hash_func ... FAILED (test process exited with
exit code 2) 162 ms
errors ... FAILED (test process exited with
exit code 2) 162 ms
infinite_recurse ... FAILED (test process exited with
exit code 2) 162 ms
test sanity_check ... FAILED (test process exited with
exit code 2) 26 ms
parallel group (20 tests): select_into subselect select_distinct arrays
join namespace hash_index select_having portals transactions aggregates
random update delete union btree_index select_implicit
select_distinct_on prepared_xacts case
select_into ... FAILED (test process exited with
exit code 2) 20 ms
select_distinct ... FAILED (test process exited with
exit code 2) 21 ms
select_distinct_on ... FAILED (test process exited with
exit code 2) 26 ms
select_implicit ... FAILED (test process exited with
exit code 2) 26 ms
select_having ... FAILED (test process exited with
exit code 2) 23 ms
subselect ... FAILED (test process exited with
exit code 2) 20 ms
union ... FAILED (test process exited with
exit code 2) 25 ms
case ... FAILED (test process exited with
exit code 2) 27 ms
join ... FAILED (test process exited with
exit code 2) 22 ms
aggregates ... FAILED (test process exited with
exit code 2) 24 ms
transactions ... FAILED (test process exited with
exit code 2) 24 ms
random ... failed (ignored) (test process
exited with exit code 2) 24 ms
portals ... FAILED (test process exited with
exit code 2) 23 ms
arrays ... FAILED (test process exited with
exit code 2) 20 ms
btree_index ... FAILED (test process exited with
exit code 2) 25 ms
hash_index ... FAILED (test process exited with
exit code 2) 22 ms
update ... FAILED (test process exited with
exit code 2) 23 ms
delete ... FAILED (test process exited with
exit code 2) 24 ms
namespace ... FAILED (test process exited with
exit code 2) 21 ms
prepared_xacts ... FAILED (test process exited with
exit code 2) 25 ms
parallel group (20 tests): gist brin identity generated password
tablesample lock matview replica_identity rowsecurity security_label
object_address drop_operator groupingsets join_hash privileges collate
init_privs spgist gin
brin ... FAILED (test process exited with
exit code 2) 15 ms
gin ... FAILED (test process exited with
exit code 2) 22 ms
gist ... FAILED (test process exited with
exit code 2) 13 ms
spgist ... FAILED (test process exited with
exit code 2) 22 ms
privileges ... FAILED (test process exited with
exit code 2) 19 ms
init_privs ... FAILED (test process exited with
exit code 2) 21 ms
security_label ... FAILED (test process exited with
exit code 2) 17 ms
collate ... FAILED (test process exited with
exit code 2) 20 ms
matview ... FAILED (test process exited with
exit code 2) 17 ms
lock ... FAILED (test process exited with
exit code 2) 15 ms
replica_identity ... FAILED (test process exited with
exit code 2) 17 ms
rowsecurity ... FAILED (test process exited with
exit code 2) 17 ms
object_address ... FAILED (test process exited with
exit code 2) 17 ms
tablesample ... FAILED (test process exited with
exit code 2) 15 ms
groupingsets ... FAILED (test process exited with
exit code 2) 17 ms
drop_operator ... FAILED (test process exited with
exit code 2) 17 ms
password ... FAILED (test process exited with
exit code 2) 14 ms
identity ... FAILED (test process exited with
exit code 2) 13 ms
generated ... FAILED (test process exited with
exit code 2) 14 ms
join_hash ... FAILED (test process exited with
exit code 2) 18 ms
parallel group (2 tests): brin_multi brin_bloom
brin_bloom ... FAILED (test process exited with
exit code 2) 4 ms
brin_multi ... FAILED (test process exited with
exit code 2) 4 ms
parallel group (14 tests): async create_table_like collate.icu.utf8
misc sysviews alter_operator tidscan tidrangescan alter_generic tsrf
incremental_sort misc_functions tid dbsize
create_table_like ... FAILED (test process exited with
exit code 2) 10 ms
alter_generic ... FAILED (test process exited with
exit code 2) 15 ms
alter_operator ... FAILED (test process exited with
exit code 2) 13 ms
misc ... FAILED (test process exited with
exit code 2) 11 ms
async ... FAILED (test process exited with
exit code 2) 9 ms
dbsize ... FAILED (test process exited with
exit code 2) 17 ms
misc_functions ... FAILED (test process exited with
exit code 2) 14 ms
sysviews ... FAILED (test process exited with
exit code 2) 12 ms
tsrf ... FAILED (test process exited with
exit code 2) 14 ms
tid ... FAILED (test process exited with
exit code 2) 16 ms
tidscan ... FAILED (test process exited with
exit code 2) 13 ms
tidrangescan ... FAILED (test process exited with
exit code 2) 13 ms
collate.icu.utf8 ... FAILED (test process exited with
exit code 2) 9 ms
incremental_sort ... FAILED (test process exited with
exit code 2) 13 ms
parallel group (6 tests): amutils psql_crosstab collate.linux.utf8 psql
stats_ext rules
rules ... FAILED (test process exited with
exit code 2) 8 ms
psql ... FAILED (test process exited with
exit code 2) 7 ms
psql_crosstab ... FAILED (test process exited with
exit code 2) 7 ms
amutils ... FAILED (test process exited with
exit code 2) 7 ms
stats_ext ... FAILED (test process exited with
exit code 2) 8 ms
collate.linux.utf8 ... FAILED (test process exited with
exit code 2) 7 ms
test select_parallel ... FAILED (test process exited with
exit code 2) 3 ms
test write_parallel ... FAILED (test process exited with
exit code 2) 3 ms
parallel group (2 tests): publication subscription
publication ... FAILED (test process exited with
exit code 2) 4 ms
subscription ... FAILED (test process exited with
exit code 2) 4 ms
parallel group (17 tests): select_views foreign_key xmlmap window
functional_deps tsearch cluster combocid bitmapops tsdicts equivclass
guc indirect_toast advisory_lock foreign_data dependency portals_p2
select_views ... FAILED (test process exited with
exit code 2) 11 ms
portals_p2 ... FAILED (test process exited with
exit code 2) 20 ms
foreign_key ... FAILED (test process exited with
exit code 2) 11 ms
cluster ... FAILED (test process exited with
exit code 2) 15 ms
dependency ... FAILED (test process exited with
exit code 2) 19 ms
guc ... FAILED (test process exited with
exit code 2) 16 ms
bitmapops ... FAILED (test process exited with
exit code 2) 16 ms
combocid ... FAILED (test process exited with
exit code 2) 15 ms
tsearch ... FAILED (test process exited with
exit code 2) 14 ms
tsdicts ... FAILED (test process exited with
exit code 2) 16 ms
foreign_data ... FAILED (test process exited with
exit code 2) 17 ms
window ... FAILED (test process exited with
exit code 2) 12 ms
xmlmap ... FAILED (test process exited with
exit code 2) 12 ms
functional_deps ... FAILED (test process exited with
exit code 2) 13 ms
advisory_lock ... FAILED (test process exited with
exit code 2) 16 ms
indirect_toast ... FAILED (test process exited with
exit code 2) 16 ms
equivclass ... FAILED (test process exited with
exit code 2) 15 ms
parallel group (6 tests): json json_encoding jsonb jsonpath_encoding
jsonb_jsonpath jsonpath
json ... FAILED (test process exited with
exit code 2) 4 ms
jsonb ... FAILED (test process exited with
exit code 2) 6 ms
json_encoding ... FAILED (test process exited with
exit code 2) 5 ms
jsonpath ... FAILED (test process exited with
exit code 2) 10 ms
jsonpath_encoding ... FAILED (test process exited with
exit code 2) 6 ms
jsonb_jsonpath ... FAILED (test process exited with
exit code 2) 7 ms
parallel group (19 tests): plpgsql limit rowtypes sequence largeobject
returning domain polymorphism plancache prepare alter_table truncate
temp rangefuncs with copy2 conversion schema_variables xml
plancache ... FAILED (test process exited with
exit code 2) 16 ms
limit ... FAILED (test process exited with
exit code 2) 10 ms
plpgsql ... FAILED (test process exited with
exit code 2) 7 ms
copy2 ... FAILED (test process exited with
exit code 2) 25 ms
temp ... FAILED (test process exited with
exit code 2) 21 ms
domain ... FAILED (test process exited with
exit code 2) 13 ms
rangefuncs ... FAILED (test process exited with
exit code 2) 22 ms
prepare ... FAILED (test process exited with
exit code 2) 19 ms
conversion ... FAILED (test process exited with
exit code 2) 24 ms
truncate ... FAILED (test process exited with
exit code 2) 19 ms
alter_table ... FAILED (test process exited with
exit code 2) 18 ms
sequence ... FAILED (test process exited with
exit code 2) 11 ms
polymorphism ... FAILED (test process exited with
exit code 2) 13 ms
rowtypes ... FAILED (test process exited with
exit code 2) 10 ms
returning ... FAILED (test process exited with
exit code 2) 11 ms
largeobject ... FAILED (test process exited with
exit code 2) 10 ms
with ... FAILED (test process exited with
exit code 2) 22 ms
xml ... FAILED (test process exited with
exit code 2) 23 ms
schema_variables ... FAILED (test process exited with
exit code 2) 23 ms
parallel group (11 tests): explain hash_part partition_info reloptions
memoize compression partition_aggregate partition_join indexing
partition_prune tuplesort
partition_join ... FAILED 902 ms
partition_prune ... ok 1006 ms
reloptions ... ok 106 ms
hash_part ... ok 99 ms
indexing ... ok 929 ms
partition_aggregate ... ok 791 ms
partition_info ... ok 104 ms
tuplesort ... ok 1099 ms
explain ... ok 90 ms
compression ... ok 214 ms
memoize ... ok 109 ms
parallel group (2 tests): event_trigger oidjoins
event_trigger ... ok 107 ms
oidjoins ... ok 157 ms
test fast_default ... ok 138 ms
test stats ... ok 617 ms

On 9/9/21 6:59 AM, Pavel Stehule wrote:

Hi

fresh rebase

Regards

Pavel

#21Gilles Darold
gilles.darold@dalibo.com
In reply to: Pavel Stehule (#20)
#22Pavel Stehule
pavel.stehule@gmail.com
In reply to: Gilles Darold (#21)
#23Pavel Stehule
pavel.stehule@gmail.com
In reply to: Erik Rijkers (#19)
#24Erik Rijkers
er@xs4all.nl
In reply to: Pavel Stehule (#23)
#25Pavel Stehule
pavel.stehule@gmail.com
In reply to: Erik Rijkers (#24)
#26Jaime Casanova
jcasanov@systemguards.com.ec
In reply to: Pavel Stehule (#23)
#27Pavel Stehule
pavel.stehule@gmail.com
In reply to: Jaime Casanova (#26)
#28Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#27)
#29Jaime Casanova
jcasanov@systemguards.com.ec
In reply to: Pavel Stehule (#27)
#30Pavel Stehule
pavel.stehule@gmail.com
In reply to: Jaime Casanova (#29)
#31Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#27)
#32Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#31)
#33Tomas Vondra
tomas.vondra@2ndquadrant.com
In reply to: Pavel Stehule (#32)
#34Tomas Vondra
tomas.vondra@2ndquadrant.com
In reply to: Tomas Vondra (#33)
#35Justin Pryzby
pryzby@telsasoft.com
In reply to: Tomas Vondra (#33)
#36Pavel Stehule
pavel.stehule@gmail.com
In reply to: Tomas Vondra (#33)
#37Justin Pryzby
pryzby@telsasoft.com
In reply to: Pavel Stehule (#36)
#38Pavel Stehule
pavel.stehule@gmail.com
In reply to: Justin Pryzby (#37)
#39Tomas Vondra
tomas.vondra@2ndquadrant.com
In reply to: Pavel Stehule (#38)
#40Tomas Vondra
tomas.vondra@2ndquadrant.com
In reply to: Pavel Stehule (#36)
#41Pavel Stehule
pavel.stehule@gmail.com
In reply to: Tomas Vondra (#40)
#42Justin Pryzby
pryzby@telsasoft.com
In reply to: Tomas Vondra (#39)
#43Pavel Stehule
pavel.stehule@gmail.com
In reply to: Justin Pryzby (#35)
#44Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#43)
#45Justin Pryzby
pryzby@telsasoft.com
In reply to: Pavel Stehule (#44)
#46Pavel Stehule
pavel.stehule@gmail.com
In reply to: Justin Pryzby (#45)
#47Pavel Stehule
pavel.stehule@gmail.com
In reply to: Tomas Vondra (#33)
#48Pavel Stehule
pavel.stehule@gmail.com
In reply to: Justin Pryzby (#45)
#49Erik Rijkers
er@xs4all.nl
In reply to: Pavel Stehule (#48)
#50Pavel Stehule
pavel.stehule@gmail.com
In reply to: Erik Rijkers (#49)
#51Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#50)
#52Erik Rijkers
er@xs4all.nl
In reply to: Pavel Stehule (#50)
#53Pavel Stehule
pavel.stehule@gmail.com
In reply to: Erik Rijkers (#52)
#54Erik Rijkers
er@xs4all.nl
In reply to: Pavel Stehule (#53)
#55Pavel Stehule
pavel.stehule@gmail.com
In reply to: Erik Rijkers (#54)
#56Justin Pryzby
pryzby@telsasoft.com
In reply to: Pavel Stehule (#48)
#57Pavel Stehule
pavel.stehule@gmail.com
In reply to: Justin Pryzby (#56)
#58Justin Pryzby
pryzby@telsasoft.com
In reply to: Pavel Stehule (#57)
#59Pavel Stehule
pavel.stehule@gmail.com
In reply to: Justin Pryzby (#58)
#60Pavel Stehule
pavel.stehule@gmail.com
In reply to: Justin Pryzby (#56)
#61Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#60)
#62Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#31)
#63Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#61)
#64Dean Rasheed
dean.a.rasheed@gmail.com
In reply to: Tomas Vondra (#33)
#65Pavel Stehule
pavel.stehule@gmail.com
In reply to: Dean Rasheed (#64)
#66Joel Jacobson
joel@compiler.org
In reply to: Dean Rasheed (#64)
#67Pavel Stehule
pavel.stehule@gmail.com
In reply to: Joel Jacobson (#66)
#68Joel Jacobson
joel@compiler.org
In reply to: Pavel Stehule (#67)
#69Pavel Stehule
pavel.stehule@gmail.com
In reply to: Joel Jacobson (#68)
#70Dean Rasheed
dean.a.rasheed@gmail.com
In reply to: Pavel Stehule (#69)
#71Pavel Stehule
pavel.stehule@gmail.com
In reply to: Dean Rasheed (#70)
#72Julien Rouhaud
rjuju123@gmail.com
In reply to: Pavel Stehule (#71)
#73Pavel Stehule
pavel.stehule@gmail.com
In reply to: Julien Rouhaud (#72)
#74Marcos Pegoraro
marcos@f10.com.br
In reply to: Dean Rasheed (#64)
#75Julien Rouhaud
rjuju123@gmail.com
In reply to: Marcos Pegoraro (#74)
#76Pavel Stehule
pavel.stehule@gmail.com
In reply to: Marcos Pegoraro (#74)
#77Pavel Stehule
pavel.stehule@gmail.com
In reply to: Julien Rouhaud (#72)
#78Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#77)
#79Julien Rouhaud
rjuju123@gmail.com
In reply to: Pavel Stehule (#77)
#80Pavel Stehule
pavel.stehule@gmail.com
In reply to: Julien Rouhaud (#79)
#81Julien Rouhaud
rjuju123@gmail.com
In reply to: Pavel Stehule (#80)
#82Pavel Stehule
pavel.stehule@gmail.com
In reply to: Julien Rouhaud (#79)
#83Julien Rouhaud
rjuju123@gmail.com
In reply to: Pavel Stehule (#82)
#84Julien Rouhaud
rjuju123@gmail.com
In reply to: Pavel Stehule (#82)
#85Pavel Stehule
pavel.stehule@gmail.com
In reply to: Julien Rouhaud (#84)
#86Julien Rouhaud
rjuju123@gmail.com
In reply to: Pavel Stehule (#85)
#87Pavel Stehule
pavel.stehule@gmail.com
In reply to: Julien Rouhaud (#86)
#88Julien Rouhaud
rjuju123@gmail.com
In reply to: Pavel Stehule (#87)
#89Pavel Stehule
pavel.stehule@gmail.com
In reply to: Julien Rouhaud (#88)
#90Julien Rouhaud
rjuju123@gmail.com
In reply to: Pavel Stehule (#89)
#91Pavel Stehule
pavel.stehule@gmail.com
In reply to: Julien Rouhaud (#90)
#92Julien Rouhaud
rjuju123@gmail.com
In reply to: Pavel Stehule (#91)
#93Pavel Stehule
pavel.stehule@gmail.com
In reply to: Julien Rouhaud (#92)
#94Pavel Stehule
pavel.stehule@gmail.com
In reply to: Julien Rouhaud (#90)
#95Julien Rouhaud
rjuju123@gmail.com
In reply to: Pavel Stehule (#94)
#96Pavel Stehule
pavel.stehule@gmail.com
In reply to: Julien Rouhaud (#95)
#97Julien Rouhaud
rjuju123@gmail.com
In reply to: Pavel Stehule (#96)
#98Pavel Stehule
pavel.stehule@gmail.com
In reply to: Julien Rouhaud (#95)
#99Julien Rouhaud
rjuju123@gmail.com
In reply to: Pavel Stehule (#98)
#100Pavel Stehule
pavel.stehule@gmail.com
In reply to: Julien Rouhaud (#99)
#101Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#100)
#102Julien Rouhaud
rjuju123@gmail.com
In reply to: Pavel Stehule (#101)
#103Pavel Stehule
pavel.stehule@gmail.com
In reply to: Julien Rouhaud (#102)
#104Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#103)
#105Julien Rouhaud
rjuju123@gmail.com
In reply to: Pavel Stehule (#104)
#106Julien Rouhaud
rjuju123@gmail.com
In reply to: Julien Rouhaud (#105)
#107Justin Pryzby
pryzby@telsasoft.com
In reply to: Julien Rouhaud (#105)
#108Julien Rouhaud
rjuju123@gmail.com
In reply to: Justin Pryzby (#107)
#109Pavel Stehule
pavel.stehule@gmail.com
In reply to: Julien Rouhaud (#105)
#110Julien Rouhaud
rjuju123@gmail.com
In reply to: Pavel Stehule (#109)
#111Pavel Stehule
pavel.stehule@gmail.com
In reply to: Julien Rouhaud (#106)
#112Justin Pryzby
pryzby@telsasoft.com
In reply to: Pavel Stehule (#111)
#113Julien Rouhaud
rjuju123@gmail.com
In reply to: Justin Pryzby (#112)
#114Pavel Stehule
pavel.stehule@gmail.com
In reply to: Justin Pryzby (#112)
#115Pavel Stehule
pavel.stehule@gmail.com
In reply to: Julien Rouhaud (#105)
#116Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#115)
#117Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#116)
#118Julien Rouhaud
rjuju123@gmail.com
In reply to: Pavel Stehule (#117)
#119Pavel Stehule
pavel.stehule@gmail.com
In reply to: Julien Rouhaud (#118)
#120Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#117)
#121Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#120)
#122Justin Pryzby
pryzby@telsasoft.com
In reply to: Pavel Stehule (#120)
#123Pavel Stehule
pavel.stehule@gmail.com
In reply to: Justin Pryzby (#122)
#124Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#121)
#125Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#124)
#126Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#125)
#127Erik Rijkers
er@xs4all.nl
In reply to: Pavel Stehule (#126)
#128Julien Rouhaud
rjuju123@gmail.com
In reply to: Erik Rijkers (#127)
#129Pavel Stehule
pavel.stehule@gmail.com
In reply to: Julien Rouhaud (#128)
#130Julien Rouhaud
rjuju123@gmail.com
In reply to: Pavel Stehule (#129)
#131Erik Rijkers
er@xs4all.nl
In reply to: Pavel Stehule (#129)
#132Justin Pryzby
pryzby@telsasoft.com
In reply to: Erik Rijkers (#131)
#133Pavel Stehule
pavel.stehule@gmail.com
In reply to: Julien Rouhaud (#130)
#134Julien Rouhaud
rjuju123@gmail.com
In reply to: Pavel Stehule (#133)
#135Pavel Stehule
pavel.stehule@gmail.com
In reply to: Julien Rouhaud (#134)
#136Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#135)
#137Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#136)
#138Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Pavel Stehule (#137)
#139Erik Rijkers
er@xs4all.nl
In reply to: Pavel Stehule (#137)
#140Erik Rijkers
er@xs4all.nl
In reply to: Erik Rijkers (#139)
#141Pavel Stehule
pavel.stehule@gmail.com
In reply to: Erik Rijkers (#140)
#142Erik Rijkers
er@xs4all.nl
In reply to: Pavel Stehule (#141)
#143Julien Rouhaud
rjuju123@gmail.com
In reply to: Erik Rijkers (#142)
#144Pavel Stehule
pavel.stehule@gmail.com
In reply to: Julien Rouhaud (#143)
#145Pavel Stehule
pavel.stehule@gmail.com
In reply to: Alvaro Herrera (#138)
#146Erik Rijkers
er@xs4all.nl
In reply to: Pavel Stehule (#144)
#147Julien Rouhaud
rjuju123@gmail.com
In reply to: Erik Rijkers (#146)
#148Pavel Stehule
pavel.stehule@gmail.com
In reply to: Julien Rouhaud (#147)
#149Pavel Stehule
pavel.stehule@gmail.com
In reply to: Julien Rouhaud (#147)
#150Erik Rijkers
er@xs4all.nl
In reply to: Pavel Stehule (#149)
#151Julien Rouhaud
rjuju123@gmail.com
In reply to: Pavel Stehule (#149)
#152Justin Pryzby
pryzby@telsasoft.com
In reply to: Pavel Stehule (#149)
#153Pavel Stehule
pavel.stehule@gmail.com
In reply to: Justin Pryzby (#152)
#154Pavel Stehule
pavel.stehule@gmail.com
In reply to: Julien Rouhaud (#151)
#155Julien Rouhaud
rjuju123@gmail.com
In reply to: Pavel Stehule (#154)
#156Julien Rouhaud
rjuju123@gmail.com
In reply to: Pavel Stehule (#77)
#157Pavel Stehule
pavel.stehule@gmail.com
In reply to: Julien Rouhaud (#156)
#158Pavel Stehule
pavel.stehule@gmail.com
In reply to: Julien Rouhaud (#155)
#159Julien Rouhaud
rjuju123@gmail.com
In reply to: Pavel Stehule (#157)
#160Pavel Stehule
pavel.stehule@gmail.com
In reply to: Julien Rouhaud (#151)
#161Pavel Stehule
pavel.stehule@gmail.com
In reply to: Julien Rouhaud (#159)
#162Erik Rijkers
er@xs4all.nl
In reply to: Pavel Stehule (#160)
#163Pavel Stehule
pavel.stehule@gmail.com
In reply to: Erik Rijkers (#162)
#164Pavel Stehule
pavel.stehule@gmail.com
In reply to: Julien Rouhaud (#151)
#165Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#164)
#166Julien Rouhaud
rjuju123@gmail.com
In reply to: Pavel Stehule (#165)
#167Pavel Stehule
pavel.stehule@gmail.com
In reply to: Erik Rijkers (#162)
#168Pavel Stehule
pavel.stehule@gmail.com
In reply to: Julien Rouhaud (#166)
#169Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#168)
#170Julien Rouhaud
rjuju123@gmail.com
In reply to: Pavel Stehule (#169)
#171Julien Rouhaud
rjuju123@gmail.com
In reply to: Julien Rouhaud (#170)
#172Pavel Stehule
pavel.stehule@gmail.com
In reply to: Julien Rouhaud (#171)
#173Julien Rouhaud
rjuju123@gmail.com
In reply to: Julien Rouhaud (#151)
#174Julien Rouhaud
rjuju123@gmail.com
In reply to: Julien Rouhaud (#173)
#175Pavel Stehule
pavel.stehule@gmail.com
In reply to: Julien Rouhaud (#174)
#176Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#175)
#177Julien Rouhaud
rjuju123@gmail.com
In reply to: Pavel Stehule (#176)
#178Julien Rouhaud
rjuju123@gmail.com
In reply to: Julien Rouhaud (#177)
#179Julien Rouhaud
rjuju123@gmail.com
In reply to: Julien Rouhaud (#178)
#180Pavel Stehule
pavel.stehule@gmail.com
In reply to: Julien Rouhaud (#179)
#181Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#180)
#182Julien Rouhaud
rjuju123@gmail.com
In reply to: Pavel Stehule (#181)
#183Dmitry Dolgov
9erthalion6@gmail.com
In reply to: Pavel Stehule (#181)
#184Pavel Stehule
pavel.stehule@gmail.com
In reply to: Dmitry Dolgov (#183)
#185Pavel Stehule
pavel.stehule@gmail.com
In reply to: Julien Rouhaud (#182)
#186Pavel Stehule
pavel.stehule@gmail.com
In reply to: Julien Rouhaud (#182)
#187Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#186)
#188Dmitry Dolgov
9erthalion6@gmail.com
In reply to: Pavel Stehule (#187)
#189Julien Rouhaud
rjuju123@gmail.com
In reply to: Dmitry Dolgov (#188)
#190Pavel Stehule
pavel.stehule@gmail.com
In reply to: Dmitry Dolgov (#188)
#191Dmitry Dolgov
9erthalion6@gmail.com
In reply to: Pavel Stehule (#190)
#192Tomas Vondra
tomas.vondra@2ndquadrant.com
In reply to: Pavel Stehule (#187)
#193Julien Rouhaud
rjuju123@gmail.com
In reply to: Tomas Vondra (#192)
#194Pavel Stehule
pavel.stehule@gmail.com
In reply to: Dmitry Dolgov (#191)
#195Pavel Stehule
pavel.stehule@gmail.com
In reply to: Tomas Vondra (#192)
#196Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#195)
#197Sergey Shinderuk
s.shinderuk@postgrespro.ru
In reply to: Pavel Stehule (#196)
#198Pavel Stehule
pavel.stehule@gmail.com
In reply to: Sergey Shinderuk (#197)
#199Pavel Stehule
pavel.stehule@gmail.com
In reply to: Sergey Shinderuk (#197)
#200Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#199)
#201Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#200)
#202Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#201)
#203Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#202)
#204Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#203)
#205Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#204)
#206Erik Rijkers
er@xs4all.nl
In reply to: Pavel Stehule (#205)
#207Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#205)
#208Pavel Stehule
pavel.stehule@gmail.com
In reply to: Erik Rijkers (#206)
#209Dmitry Dolgov
9erthalion6@gmail.com
In reply to: Pavel Stehule (#208)
#210Pavel Stehule
pavel.stehule@gmail.com
In reply to: Dmitry Dolgov (#209)
#211Dmitry Dolgov
9erthalion6@gmail.com
In reply to: Pavel Stehule (#210)
#212Pavel Stehule
pavel.stehule@gmail.com
In reply to: Dmitry Dolgov (#211)
#213Julien Rouhaud
rjuju123@gmail.com
In reply to: Pavel Stehule (#212)
#214Pavel Stehule
pavel.stehule@gmail.com
In reply to: Julien Rouhaud (#213)
#215Julien Rouhaud
rjuju123@gmail.com
In reply to: Pavel Stehule (#214)
#216Pavel Stehule
pavel.stehule@gmail.com
In reply to: Julien Rouhaud (#215)
#217Julien Rouhaud
rjuju123@gmail.com
In reply to: Pavel Stehule (#216)
#218Pavel Stehule
pavel.stehule@gmail.com
In reply to: Julien Rouhaud (#217)
#219Julien Rouhaud
rjuju123@gmail.com
In reply to: Pavel Stehule (#218)
#220Pavel Stehule
pavel.stehule@gmail.com
In reply to: Julien Rouhaud (#219)
#221Dmitry Dolgov
9erthalion6@gmail.com
In reply to: Pavel Stehule (#220)
#222Pavel Stehule
pavel.stehule@gmail.com
In reply to: Dmitry Dolgov (#221)
#223Dmitry Dolgov
9erthalion6@gmail.com
In reply to: Pavel Stehule (#222)
#224Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#222)
#225Pavel Stehule
pavel.stehule@gmail.com
In reply to: Dmitry Dolgov (#223)
#226Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#224)
#227Dmitry Dolgov
9erthalion6@gmail.com
In reply to: Pavel Stehule (#225)
#228Pavel Stehule
pavel.stehule@gmail.com
In reply to: Dmitry Dolgov (#227)
#229Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#226)
#230Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#229)
#231Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#229)
#232Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#207)
#233Dmitry Dolgov
9erthalion6@gmail.com
In reply to: Pavel Stehule (#232)
#234Pavel Stehule
pavel.stehule@gmail.com
In reply to: Dmitry Dolgov (#233)
#235Dmitry Dolgov
9erthalion6@gmail.com
In reply to: Pavel Stehule (#234)
#236Pavel Stehule
pavel.stehule@gmail.com
In reply to: Dmitry Dolgov (#235)
#237Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#236)
#238Peter Eisentraut
peter_e@gmx.net
In reply to: Pavel Stehule (#237)
#239Peter Eisentraut
peter_e@gmx.net
In reply to: Pavel Stehule (#237)
#240Pavel Stehule
pavel.stehule@gmail.com
In reply to: Peter Eisentraut (#239)
#241Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#240)
#242Pavel Stehule
pavel.stehule@gmail.com
In reply to: Peter Eisentraut (#238)
#243Julien Rouhaud
rjuju123@gmail.com
In reply to: Pavel Stehule (#242)
#244Dmitry Dolgov
9erthalion6@gmail.com
In reply to: Pavel Stehule (#241)
#245Dmitry Dolgov
9erthalion6@gmail.com
In reply to: Julien Rouhaud (#243)
#246Pavel Stehule
pavel.stehule@gmail.com
In reply to: Julien Rouhaud (#243)
#247Pavel Stehule
pavel.stehule@gmail.com
In reply to: Dmitry Dolgov (#245)
#248Pavel Stehule
pavel.stehule@gmail.com
In reply to: Julien Rouhaud (#243)
#249Peter Eisentraut
peter_e@gmx.net
In reply to: Pavel Stehule (#241)
#250Pavel Stehule
pavel.stehule@gmail.com
In reply to: Dmitry Dolgov (#244)
#251Pavel Stehule
pavel.stehule@gmail.com
In reply to: Peter Eisentraut (#249)
#252Peter Eisentraut
peter_e@gmx.net
In reply to: Pavel Stehule (#251)
#253Dmitry Dolgov
9erthalion6@gmail.com
In reply to: Pavel Stehule (#247)
#254Pavel Stehule
pavel.stehule@gmail.com
In reply to: Dmitry Dolgov (#253)
#255Bruce Momjian
bruce@momjian.us
In reply to: Julien Rouhaud (#243)
#256Pavel Stehule
pavel.stehule@gmail.com
In reply to: Bruce Momjian (#255)
#257Julien Rouhaud
rjuju123@gmail.com
In reply to: Pavel Stehule (#256)
#258Kirk Wolak
wolakk@gmail.com
In reply to: Pavel Stehule (#256)
#259Pavel Stehule
pavel.stehule@gmail.com
In reply to: Kirk Wolak (#258)
#260Kirk Wolak
wolakk@gmail.com
In reply to: Pavel Stehule (#250)
#261Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#237)
#262Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#261)
#263Pavel Stehule
pavel.stehule@gmail.com
In reply to: Peter Eisentraut (#252)
#264Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#263)
#265Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#264)
#266Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#265)
#267Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#266)
#268Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#267)
#269Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#268)
#270Dmitry Dolgov
9erthalion6@gmail.com
In reply to: Pavel Stehule (#269)
#271Julien Rouhaud
rjuju123@gmail.com
In reply to: Dmitry Dolgov (#270)
#272Dmitry Dolgov
9erthalion6@gmail.com
In reply to: Julien Rouhaud (#271)
#273Julien Rouhaud
rjuju123@gmail.com
In reply to: Dmitry Dolgov (#272)
#274Pavel Stehule
pavel.stehule@gmail.com
In reply to: Dmitry Dolgov (#270)
#275Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#274)
#276Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#275)
#277Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#276)
#278Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#277)
#279Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#277)
#280Dmitry Dolgov
9erthalion6@gmail.com
In reply to: Pavel Stehule (#279)
#281Pavel Stehule
pavel.stehule@gmail.com
In reply to: Dmitry Dolgov (#280)
#282Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#281)
#283Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#282)
#284Dmitry Dolgov
9erthalion6@gmail.com
In reply to: Pavel Stehule (#281)
#285Pavel Stehule
pavel.stehule@gmail.com
In reply to: Dmitry Dolgov (#284)
#286Julien Rouhaud
rjuju123@gmail.com
In reply to: Pavel Stehule (#278)
#287Dmitry Dolgov
9erthalion6@gmail.com
In reply to: Pavel Stehule (#285)
#288Pavel Stehule
pavel.stehule@gmail.com
In reply to: Julien Rouhaud (#286)
#289Pavel Stehule
pavel.stehule@gmail.com
In reply to: Dmitry Dolgov (#287)
#290Dmitry Dolgov
9erthalion6@gmail.com
In reply to: Pavel Stehule (#289)
#291Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#283)
#292Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#291)
#293Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#292)
#294Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#293)
#295Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#294)
#296Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#295)
#297Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#296)
#298Dmitry Dolgov
9erthalion6@gmail.com
In reply to: Pavel Stehule (#297)
#299Pavel Stehule
pavel.stehule@gmail.com
In reply to: Dmitry Dolgov (#298)
#300Dmitry Dolgov
9erthalion6@gmail.com
In reply to: Pavel Stehule (#299)
#301Pavel Stehule
pavel.stehule@gmail.com
In reply to: Dmitry Dolgov (#298)
#302Dmitry Dolgov
9erthalion6@gmail.com
In reply to: Pavel Stehule (#301)
#303Pavel Stehule
pavel.stehule@gmail.com
In reply to: Dmitry Dolgov (#302)
#304Pavel Stehule
pavel.stehule@gmail.com
In reply to: Dmitry Dolgov (#302)
#305Dmitry Dolgov
9erthalion6@gmail.com
In reply to: Pavel Stehule (#304)
#306Pavel Stehule
pavel.stehule@gmail.com
In reply to: Dmitry Dolgov (#305)
#307Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#306)
#308Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#307)
#309Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#308)
#310Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#309)
#311Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#310)
#312Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#311)
#313Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#312)
#314Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#313)
#315Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#314)
#316Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#315)
#317Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#316)
#318Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#317)
#319Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#318)
#320Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#319)
#321Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#320)
#322Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#321)
#323Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#322)
#324Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Dmitry Dolgov (#305)
#325Pavel Stehule
pavel.stehule@gmail.com
In reply to: Alvaro Herrera (#324)
#326Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#325)
#327Peter Eisentraut
peter_e@gmx.net
In reply to: Alvaro Herrera (#324)
#328Dmitry Dolgov
9erthalion6@gmail.com
In reply to: Peter Eisentraut (#327)
#329Tom Lane
tgl@sss.pgh.pa.us
In reply to: Peter Eisentraut (#327)
#330Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Dmitry Dolgov (#328)
#331Wolfgang Walther
walther@technowledgy.de
In reply to: Alvaro Herrera (#330)
#332Pavel Stehule
pavel.stehule@gmail.com
In reply to: Peter Eisentraut (#327)
#333Pavel Stehule
pavel.stehule@gmail.com
In reply to: Tom Lane (#329)
#334Pavel Stehule
pavel.stehule@gmail.com
In reply to: Wolfgang Walther (#331)
#335Pavel Stehule
pavel.stehule@gmail.com
In reply to: Peter Eisentraut (#327)
#336Pavel Stehule
pavel.stehule@gmail.com
In reply to: Dmitry Dolgov (#328)
#337Dmitry Dolgov
9erthalion6@gmail.com
In reply to: Pavel Stehule (#333)
#338Pavel Stehule
pavel.stehule@gmail.com
In reply to: Dmitry Dolgov (#337)
#339Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#338)
#340Pavel Stehule
pavel.stehule@gmail.com
In reply to: Tom Lane (#329)
#341Tom Lane
tgl@sss.pgh.pa.us
In reply to: Pavel Stehule (#340)
#342Pavel Stehule
pavel.stehule@gmail.com
In reply to: Tom Lane (#341)
#343Wolfgang Walther
walther@technowledgy.de
In reply to: Pavel Stehule (#342)
#344Pavel Stehule
pavel.stehule@gmail.com
In reply to: Wolfgang Walther (#343)
#345Pavel Stehule
pavel.stehule@gmail.com
In reply to: Tom Lane (#341)
#346Dmitry Dolgov
9erthalion6@gmail.com
In reply to: Pavel Stehule (#345)
#347Pavel Stehule
pavel.stehule@gmail.com
In reply to: Dmitry Dolgov (#346)
#348Wolfgang Walther
walther@technowledgy.de
In reply to: Pavel Stehule (#347)
#349Pavel Stehule
pavel.stehule@gmail.com
In reply to: Wolfgang Walther (#348)
#350Wolfgang Walther
walther@technowledgy.de
In reply to: Pavel Stehule (#349)
#351Pavel Stehule
pavel.stehule@gmail.com
In reply to: Wolfgang Walther (#350)
#352Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#351)
#353Wolfgang Walther
walther@technowledgy.de
In reply to: Pavel Stehule (#352)
#354Pavel Stehule
pavel.stehule@gmail.com
In reply to: Wolfgang Walther (#353)
#355Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#354)
#356Wolfgang Walther
walther@technowledgy.de
In reply to: Pavel Stehule (#355)
#357Pavel Stehule
pavel.stehule@gmail.com
In reply to: Wolfgang Walther (#356)
#358Peter Eisentraut
peter_e@gmx.net
In reply to: Pavel Stehule (#344)
#359Pavel Stehule
pavel.stehule@gmail.com
In reply to: Peter Eisentraut (#358)
#360Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#359)
#361Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#359)
#362Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#326)
#363Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#362)
#364Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#363)
#365Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#364)