Postgres'teki diğer oturumların geçici tablolarına erişmenin bir yolu var mı?


17

(Yerel) postgres Veritabanı kullanan ve geçici bir tabloda bazı bilgileri depolayan bir Windows uygulaması ile çalışıyorum. Geçici tabloya bakmak istiyorum, ama pgadmin ve dbVis söyle: ERROR: cannot access temporary tables of other sessionsverileri sorgulamaya çalışırken. Şema ve tablonun izinlerini değiştirmeyi denedim, ancak programın kendisi ile aynı kullanıcıyla (en azından dbVis'te) veritabanına erişmeme rağmen bu yardımcı olmadı. Veritabanımda değiştirebileceğim, veri tabanımdaki tüm oturumlara "kök" erişimine izin veren bir ayar var mı?

Yanıtlar:


14

Diğer oturumlarda geçici tablolara erişim eksikliği bir izin meselesi değildir, tasarımın teknik bir sınırlamasıdır. Bir PostgreSQL arka ucu , başka bir arka ucun geçici tablolarına erişemez, çünkü geçici tablolar için eşzamanlı erişime izin verecek olağan temizlik işlemlerinin hiçbiri yapılmaz.

9.2'de UNLOGGEDbunun yerine bir tablo kullanmak isteyeceksiniz ; bu diğer oturumlardan görülebilir, ancak geçici bir tablonun performans avantajlarının çoğunu korur.


11

Kısa cevap "Hayır" dır. Geçici tablolarDiğer oturumlardaki tasarım gereği görünmezdir . İki oturumun aynı kullanıcıya sahip olması fark etmez. Hatta:

Otovakum arka plan programı geçici tablolara erişemez ve bu nedenle geçici tabloları vakumlayamaz veya analiz edemez


Geçici tablolar düşürüldüğünde, herhangi bir bellek veya disk kaynağını temizlemek için bir boşluğa ihtiyaçları var mı? Bu sorunu çözmeye çalışıyorum ve autovacuum geçici tabloları göremiyorum bu gerçeği bellek sızıntısı nedeni olup olmadığından emin değilim . Manuel vakum uygulamam gerekir mi?
poshest

"Temp tabloları düşürüldüğünde, bir vakuma ihtiyaçları var mı?" Hayır, buraya bakın . Aynı şey sadece geçici tablolar için değil, herhangi bir tablo için geçerlidir.
Jack Douglas

3

Bunun size yardımcı olup olamayacağını bilmiyorum, ama deneyebilirsiniz.

Aşağıdaki sistem kataloğu tablosu sorgusu, veritabanındaki diğer oturumlarda oluşturulan tüm geçici tabloları listeleyebilmelidir:

pg_class pc'den pn.nspname, pc.relname, pg_namespace pn'yi seçin; burada pc.relnamespace = pn.oid ve pc.relname ilike 'your_temp_table_name';

PostgreSQL Başına doc , Temporary tables exist in a special schemave genellikle adıyla oluşturulur pg_temp_xxx. Yani, kullanarak schemaname. relationnameYukarıdaki sorgudan geçici tablonuzu sorgulayabilirsiniz. Burada görebileceğiniz gibi, geçici tablo şema nitelemeli adla başvurulur.

Misal: select * from pg_temp_20.your_temp_table_name


1
Bahşiş için teşekkürler. Geçici tablo için adı ve şemasını (muhtemelen bahsettiğiniz ilk sorguyu kullanır) kullanarak bulabildim, ancak sorun, oluşturuldukları dışında bir oturumdan onlara erişemememdi.
newenglander
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.