it-swarm.asia

Apakah ada cara untuk mengakses tabel sementara dari sesi lain di postgres?

Saya bekerja dengan aplikasi Windows yang menggunakan Database postgres (lokal) dan menyimpan beberapa informasi dalam tabel sementara. Saya ingin melihat tabel sementara, tetapi pgadmin dan dbV memberi tahu saya: ERROR: cannot access temporary tables of other sessions ketika mencoba untuk meminta data. Saya mencoba mengubah izin skema dan tabel, tetapi ini sepertinya tidak membantu, meskipun saya mengakses database dengan pengguna yang sama dengan program itu sendiri (setidaknya dalam dbVis). Apakah ada pengaturan yang dapat saya ubah di basis data yang memungkinkan saya memiliki akses "root" ke semua sesi di basis data saya?

19
newenglander

Kurangnya akses ke tabel sementara di sesi lain bukan masalah izin, ini adalah batasan teknis dari desain. Backend PostgreSQL tidak bisa mengakses tabel sementara dari backend lain karena tidak ada Housekeeping biasa yang memungkinkan akses bersamaan dilakukan untuk tabel sementara.

Di 9.2 Anda ingin menggunakan tabel UNLOGGED sebagai gantinya; ini dapat terlihat dari sesi lain, tetapi mempertahankan sebagian besar manfaat kinerja dari tabel sementara.

15
Craig Ringer

Jawaban singkatnya adalah "Tidak". Tabel sementara di sesi lain tidak terlihat oleh desain. Tidak ada bedanya jika dua sesi memiliki pengguna yang sama. Bahkan:

Daemon autovacuum tidak dapat mengakses dan karenanya tidak dapat menyedot debu atau menganalisis tabel sementara

Saya tidak tahu apakah ini bisa membantu Anda, tetapi Anda bisa mencobanya.

Kueri tabel katalog sistem berikut ini dapat membuat daftar semua tabel sementara yang dibuat di sesi lain di database:

pilih pn.nspname, pc.relname dari pg_class pc, pg_namespace pn di mana pc.relnamespace = pn.oid dan pc.relname ilike 'your_temp_table_name';

Per PostgreSQL doc , Temporary tables exist in a special schema dan biasanya dibuat dengan nama pg_temp_xxx. Jadi, dengan menggunakan schemaname.relationname dari kueri di atas, Anda harus dapat meng-query tabel sementara Anda. Seperti yang Anda lihat di sini, tabel sementara direferensikan dengan nama yang memenuhi syarat skema.

Contoh: select * from pg_temp_20.your_temp_table_name

3
Gnanam