Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Tabele tymczasowe
who?
post
Post #1





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 4.05.2005

Ostrzeżenie: (0%)
-----


Witam ponownie:)
Jak to jest z tymi tabelami tymczasowymi w postgresie, bo zacząłem sie tym bawić, ale nie bardzo kumam co i jak. Problem jest taki, że tworzę taką tabelę w funkcji, przeprowadzam na tabeli kilka opracji i zwracam później zawartość tej tabeli przez funkcję. Wydawało mi się logiczne, że jak wychodzę z funkcji, to tabela powinna się usunąć, ale kiedy drugi raz wywołuje tę funckję, to wywala błąd, że taka tabela już istnieje. Wyczytałem, że tabela tymczasowa pozostaje na czas trwania sesji, ale przecież jak chce w czasie trwania jednej sesji kilka razy wywołać tę funkcję (a niestety mam taką konieczność), to mam error. Czy ktoś bardziej zorientowany w temacie może mi to wyjaśnić jak stosować te tabele, bo dla mnie to jest trochę bez sensu.

POZDRAWIAM
who?
Go to the top of the page
+Quote Post
MStaniszczak
post
Post #2





Grupa: Zarejestrowani
Postów: 71
Pomógł: 1
Dołączył: 3.10.2004

Ostrzeżenie: (0%)
-----


Polecam czasami zajrzeć do manuala;-)

Cytat
TEMPORARY or TEMP

    If specified, the table is created as a temporary table. Temporary tables are automatically dropped at the end of a session, or optionally at the end of the current transaction (see ON COMMIT below). Existing permanent tables with the same name are not visible to the current session while the temporary table exists, unless they are referenced with schema-qualified names. Any indexes created on a temporary table are automatically temporary as well.

    Optionally, GLOBAL or LOCAL can be written before TEMPORARY or TEMP. This makes no difference in PostgreSQL, but see Compatibility.

...

ON COMMIT

    The behavior of temporary tables at the end of a transaction block can be controlled using ON COMMIT. The three options are:

    PRESERVE ROWS

        No special action is taken at the ends of transactions. This is the default behavior.
    DELETE ROWS

        All rows in the temporary table will be deleted at the end of each transaction block. Essentially, an automatic TRUNCATE is done at each commit.
    DROP

        The temporary table will be dropped at the end of the current transaction block.


http://www.postgresql.org/docs/8.0/interac...reatetable.html

Pozdrawiam
Marcin Staniszczak
Go to the top of the page
+Quote Post
who?
post
Post #3





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 4.05.2005

Ostrzeżenie: (0%)
-----


Niestety tego również próbowałem. Kiedy umieszczam klauzulę ON COMMIT DROP, to faktycznie tabela jest usuwana, ale znowu wywala mi błąd
Kod
ERROR:  relation with OID 62555 does not exist

Próbowałem nawet z opcją WITHOUT OIDS, ale też nie pomaga. Nie mam już pomysłów jak do tego podejść.

POZDRAWIAM
who?
Go to the top of the page
+Quote Post
SongoQ
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

Ostrzeżenie: (0%)
-----


Tak sie zastanawiam, moze da sie jakos wykluczyc ta tabele tymczasowa? Albo w funkcji drop tej tabelki?
Go to the top of the page
+Quote Post
Jabol
post
Post #5





Grupa: Przyjaciele php.pl
Postów: 1 467
Pomógł: 13
Dołączył: 22.02.2003

Ostrzeżenie: (0%)
-----


a może by tak ją sobie na początku funkcji wyczyścić? (DELETE * FROM tmp_table).
Go to the top of the page
+Quote Post
who?
post
Post #6





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 4.05.2005

Ostrzeżenie: (0%)
-----


Wyczyszczenie tutaj nic nie da, bo on się czepia o to, że tabela już istnieje. Póki co udało mi się problem rozwiązać inaczej i nie muszę korzystać z tabeli tymczasowej, ale ogólnie chciałbym wiedzieć jak to działa, bo może się przydać w przyszłości. Postaram się coś pokombinować i ewentualnie jak na coś wpadne to dam znać.

POZDRAWIAM
who?
Go to the top of the page
+Quote Post
Jabol
post
Post #7





Grupa: Przyjaciele php.pl
Postów: 1 467
Pomógł: 13
Dołączył: 22.02.2003

Ostrzeżenie: (0%)
-----


To może by tak np. sprawdzić, czy tabela istnieje? Jeżeli nie to stworzyć, jeżeli tak to wyczyścić.
Go to the top of the page
+Quote Post
SongoQ
post
Post #8





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

Ostrzeżenie: (0%)
-----


@Jabol Wydaje mi sie ze to powinno tworzyc i usuwac tebele w danej sesji, a nie korzystac z jednej i tej samej w roznych sesjach.
Go to the top of the page
+Quote Post
Jabol
post
Post #9





Grupa: Przyjaciele php.pl
Postów: 1 467
Pomógł: 13
Dołączył: 22.02.2003

Ostrzeżenie: (0%)
-----


@SongoQ: Dokładnie, racja, ale zauważ w czym problem: Tabela powinna sama się usunąć i stworzyć od nowa w ciągu JEDNEJ sesji. Tutaj chodzi o to, by używać różnych tabel w tej samej sesji. A tak swoją drogą to właśnie dałeś rozwiązanie i tego problemu. Można przecież usunąć tą tabelę jak funkcja skończy swoją robotę i będzie po problemie. Czyli, że funkcja sama robi sobie środowisko (CREATE) i sama po sobie sprząta (DROP). To chyba rozwiązuje problem? To w zasadzie tylko jedna instrukcja więcej do funkcji.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 04:25