Czy istnieje sposób na dostęp do tymczasowych tabel innych sesji w postgresie?


17

Pracuję z aplikacją Windows, która korzysta z (lokalnej) bazy danych postgres i przechowuje pewne informacje w tabeli tymczasowej. Chciałbym rzucić okiem na tabelę tymczasową, ale pgadmin i dbVis mówią mi: ERROR: cannot access temporary tables of other sessionsprzy próbie zapytania danych. Próbowałem zmienić uprawnienia do schematu i tabeli, ale nie wydawało się to pomocne, mimo że uzyskuję dostęp do bazy danych z tym samym użytkownikiem co sam program (przynajmniej w dbVis). Czy istnieje ustawienie, które mogę zmienić w mojej bazie danych, które pozwala mi mieć dostęp „root” do wszystkich sesji w mojej bazie danych?

Odpowiedzi:


14

Brak dostępu do tabel tymczasowych w innych sesjach nie jest kwestią uprawnień, jest technicznym ograniczeniem projektu. Zaplecze PostgreSQL nie może uzyskać dostępu do tabel tymczasowych innego zaplecza, ponieważ w przypadku tabel tymczasowych nie jest wykonywane żadne zwykłe czynności porządkowe umożliwiające równoczesny dostęp.

W 9.2 będziesz chciał UNLOGGEDzamiast tego użyć tabeli; może to być widoczne z innych sesji, ale zachowuje większość zalet wydajności tabeli tymczasowej.


11

Krótka odpowiedź brzmi „nie”. Tymczasowe stoły w innych sesjach są niewidoczne z założenia. Nie ma znaczenia, czy dwie sesje mają tego samego użytkownika. Parzysty:

Demon autovacuum nie ma dostępu i dlatego nie może odkurzać ani analizować tabel tymczasowych


Czy po upuszczeniu tabel tymczasowych potrzebują próżni, aby usunąć niewykorzystane zasoby pamięci lub dysku? Próbuję rozwiązać ten problem i nie jestem pewien, czy przyczyną przecieku pamięci jest fakt, że autovacuum nie widzi tabel tymczasowych. Czy muszę ręcznie odkurzać?
najdalej

„Gdy spadną tabele temp, czy potrzebują próżni” nie, patrz tutaj . To samo dotyczy dowolnych tabel, nie tylko tabel tymczasowych.
Jack Douglas

3

Nie wiem, czy to może ci pomóc, ale możesz spróbować.

Poniższa kwerenda tabeli katalogu systemowego powinna zawierać listę wszystkich tabel tymczasowych utworzonych podczas innych sesji w bazie danych:

wybierz pn.nspname, pc.relname z pg_class pc, pg_namespace pn gdzie pc.relnamespace = pn.oid i pc.relname podobnie jak „twoja_temp_tabela_tabela”;

Za PostgreSQL doc , Temporary tables exist in a special schemai są zwykle tworzone z nazwą jak pg_temp_xxx. Tak, używając schemaname. relationnamez powyższego zapytania powinieneś mieć możliwość zapytania do tabeli tymczasowej. Jak widać tutaj, do tabeli tymczasowej odwołuje się nazwa kwalifikowana do schematu.

Przykład: select * from pg_temp_20.your_temp_table_name


1
Dzięki za wskazówkę. Byłem w stanie znaleźć nazwę i schemat tabeli tymczasowej za pomocą dbvis (która prawdopodobnie używa pierwszego zapytania, o którym wspomniałeś), ale problem polegał na tym, że nie mogłem uzyskać do nich dostępu z sesji innej niż ta, w której zostały utworzone.
newenglander
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.