ďťż
 
postgres numer transakcji ďťż
 
postgres numer transakcji
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

postgres numer transakcji



Herakles - 12-01-2007 00:29
postgres numer transakcji
  Witam,
BEGIN
potrzebny mi numer transakcji w jakim obecnie się znajduję aby trigery
wrzucały zadania do wykonania do tabelki razem z numerem transakcji, wiem
wiem temp tabela ale nie tu się nie sprawdzi. A na końcu transakcji zrobić
select * from do_my_works();
oczywiście numer jest mi potzrebny po to aby zadania wyznaczone przez
trigery można było wykonać kiedy indziej.
COMMIT;





hubert depesz lubaczewski - 12-01-2007 00:29

  On 2007-01-11, Herakles <herakles@buziaczek.pl> wrote:
> potrzebny mi numer transakcji w jakim obecnie się znajduję aby trigery
> wrzucały zadania do wykonania do tabelki razem z numerem transakcji, wiem
> wiem temp tabela ale nie tu się nie sprawdzi. A na końcu transakcji zrobić
> select * from do_my_works();
> oczywiście numer jest mi potzrebny po to aby zadania wyznaczone przez
> trigery można było wykonać kiedy indziej.

coś mi się tłucze po głowie, że jest taka funkcja, ale jakos nie mogę
jej teraz znaleźć. bez funkcji jednakże jest to i tak proste.

robisz sobie (raz) tabelkę.
nie temp-tabelkę.
np. taką:
create table x (i int4);
potem:
(w transakcji której id cię interesuje:
# insert into x (i) values (pg_backend_pid());
# select xmin from x where i = pg_backend_pid();
# delete from x where i = pg_backend_pid();

select zwróci ci id aktualnej transakcji.
nie jest to może ultra-ładne. ale działa.

depesz

--
http://www.depesz.com/ - blog dla ciebie




Herakles - 12-01-2007 00:29

  hubert depesz lubaczewski wrote:

> coś mi się tłucze po głowie, że jest taka funkcja, ale jakos nie mogę
> jej teraz znaleźć. bez funkcji jednakże jest to i tak proste.
>
> robisz sobie (raz) tabelkę.
> nie temp-tabelkę.
> np. taką:
> create table x (i int4);
> potem:
> (w transakcji której id cię interesuje:
> # insert into x (i) values (pg_backend_pid());
> # select xmin from x where i = pg_backend_pid();
> # delete from x where i = pg_backend_pid();
>
> select zwróci ci id aktualnej transakcji.
> nie jest to może ultra-ładne. ale działa.
>
> depesz

że też wcześniej na to nie wpadłem, chociaż faktycznie nieeleganckie, ale
naprowadziłeś mnie na odpowiedni tok myślenia, dzięki:

BEGIN
select transactionid from pg_locks where pid=pg_backend_pid() and
locktype='transactionid';
COMMIT

Każda transakcja zakłada lock na samą siebie, każde połączenie to jeden
proces, czyli w sumie jest to co chciałem.




hubert depesz lubaczewski - 13-01-2007 00:00

  On 2007-01-11, Herakles <herakles@buziaczek.pl> wrote:
> BEGIN
> select transactionid from pg_locks where pid=pg_backend_pid() and
> locktype='transactionid';
> COMMIT
> Każda transakcja zakłada lock na samą siebie, każde połączenie to jeden
> proces, czyli w sumie jest to co chciałem.

ekhem:
z dokumentacji:
" When the pg_locks view is accessed, the internal lock manager data structures
are momentarily locked, and a copy is made for the view to display. This
ensures that the view produces a consistent set of results, while not blocking
normal lock manager operations longer than necessary. Nonetheless there could
be some impact on database performance if this view is frequently accessed."

czli z pg_locks'ów bym raczej tego nie czytał.

depesz

--
http://www.depesz.com/ - blog dla ciebie





Herakles - 13-01-2007 00:01

  hubert depesz lubaczewski wrote:

> On 2007-01-11, Herakles <herakles@buziaczek.pl> wrote:
>> BEGIN
>> select transactionid from pg_locks where pid=pg_backend_pid() and
>> locktype='transactionid';
>> COMMIT
>> Każda transakcja zakłada lock na samą siebie, każde połączenie to jeden
>> proces, czyli w sumie jest to co chciałem.
>
> ekhem:
> z dokumentacji:
> " When the pg_locks view is accessed, the internal lock manager data
> structures are momentarily locked, and a copy is made for the view to
> display. This ensures that the view produces a consistent set of results,
> while not blocking normal lock manager operations longer than necessary.
> Nonetheless there could be some impact on database performance if this
> view is frequently accessed."
>
> czli z pg_locks'ów bym raczej tego nie czytał.
>
> depesz
>

Faktycznie, dobrze że mi zwróciłeś na to uwagę, bo to bedzie dość sporo razy
wywołane. Ale znalazłem w sieci eleganckie rozwiązanie dorobiłem żeby
działało w 8.2 jakby ktoś potzrebował w starszych wersjach też zadziała;

get_transaction_id.c:
#include "postgres.h"
#include "access/xact.h"

PG_MODULE_MAGIC;

Datum get_transaction_id(PG_FUNCTION_ARGS)
{
TransactionId xid = GetCurrentTransactionId();
PG_RETURN_INT32((int32) xid);
}

get_transaction_id.sql.in:
CREATE FUNCTION get_transaction_id() RETURNS integer
AS '$libdir/get_transaction_id.o' LANGUAGE 'c';

gcc -I/usr/local/pgsql/include/server -fPIC -shared -o get_transaction_id.o
get_transaction_id.c

cp /usr/src/get_transaction_id/get_transaction_id.o /usr/local/pgsql/lib/get_transaction_id.o
cp /usr/src/get_transaction_id/get_transaction_id.sql.in /usr/local/pgsql/share/contrib/get_transaction_id.sql.in

psql nazwa_bazy</usr/local/pgsql/share/contrib/get_transaction_id.sql.in
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    [PostgreSQL] - jak =?ISO-8859-2?Q?zabezpieczy=E6_interesy_tw?==?ISO-8859-2?Q?=F3rcy_systemu_=3F=3F=3F?= postgresql - int/int postgresql Select count(*) czy raczej Select count(ID) [PostgreSQL] jak =?ISO-8859-2?Q?pobra=E6_warto=B6=E6_zwracan?==?ISO-8859-2?Q?=B1_przez_funkcj=EA=3F?= [postgresql] INSERT OR UPDATE - jak =?ISO-8859-2?Q?b=EAdzie_na?==?ISO-8859-2?Q?jlepiej=3F?= [postgresql] kilka =?ISO-8859-2?Q?rekord=F3w_subquery_jako_?==?ISO-8859-2?Q?string?= [PostgreSQL] Jak =?ISO-8859-2?Q?po=B3=B1czy=E6_funkcje_z_w?==?ISO-8859-2?Q?idokiem?= Postgres - replikcja master-master Dopasowanie do "najlepszego" dopasowania :) [ PostgreSQL] Problemy z =?ISO-8859-2?Q?instalacj=B1_PostgreSQL_na_syste?==?ISO-8859-2?Q?mach_Windows?=
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nawschodzie.xlx.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com