Обсуждение: Recursive queries?

Поиск
Список
Период
Сортировка

Recursive queries?

От
Michael Meskes
Дата:
I know that postgres originally was able to do recursive queries like

retrieve* into a from a ...

Is this still possible with PostgreSQL? If so, is it just for one statement
or even as a block?

This happens to be the area I worked on for several years.

Michael
--
Dr. Michael Meskes, Project-Manager    | topsystem Systemhaus GmbH
meskes@topsystem.de                    | Europark A2, Adenauerstr. 20
meskes@debian.org                      | 52146 Wuerselen
Go SF49ers! Go Rhein Fire!             | Tel: (+49) 2405/4670-44
Use Debian GNU/Linux!                  | Fax: (+49) 2405/4670-10

Re: [HACKERS] Recursive queries?

От
"Vadim B. Mikheev"
Дата:
Michael Meskes wrote:
>
> I know that postgres originally was able to do recursive queries like
>
> retrieve* into a from a ...
>
> Is this still possible with PostgreSQL? If so, is it just for one statement
> or even as a block?

Yes, it's possible. This is from spi.txt:
---
                         Data changes visibility

   PostgreSQL data changes visibility rule: during a query execution, data
changes made by the query itself (via SQL-function, SPI-function, triggers)
are invisible to the query scan.  For example, in query

   INSERT INTO a SELECT * FROM a

   tuples inserted are invisible for SELECT' scan.  In effect, this
duplicates the database table within itself (subject to unique index
rules, of course) without recursing.

   Changes made by query Q are visible by queries which are started after
query Q, no matter whether they are started inside Q (during the execution
of Q) or after Q is done.
---

Second query 'INSERT INTO a SELECT * FROM a' inside BEGIN/END
will see tuples inserted by first one. Pg uses special CommandCounter
to distinguish changes made in the same transaction.

> This happens to be the area I worked on for several years.

I also like such areas :)

Vadim