Có cách nào để truy cập các bảng tạm thời của các phiên khác trong postgres không?


17

Tôi đang làm việc với một ứng dụng Windows sử dụng Cơ sở dữ liệu postgres (cục bộ) và lưu trữ một số thông tin trong một bảng tạm thời. Tôi muốn xem bảng tạm thời, nhưng pgadmin và dbVis cho tôi biết: ERROR: cannot access temporary tables of other sessionskhi cố gắng truy vấn dữ liệu. Tôi đã thử thay đổi các quyền của lược đồ và bảng, nhưng điều này dường như không có ích, mặc dù tôi đang truy cập cơ sở dữ liệu với cùng một người dùng như chính chương trình (ít nhất là trong dbVis). Có cài đặt nào tôi có thể thay đổi trong cơ sở dữ liệu của mình cho phép tôi có quyền truy cập "root" vào tất cả các phiên trong cơ sở dữ liệu của mình không?

Câu trả lời:


14

Việc thiếu quyền truy cập vào các bảng tạm thời trong các phiên khác không phải là vấn đề của quyền, đó là một hạn chế kỹ thuật của thiết kế. Một phụ trợ PostgreQuery không thể truy cập các bảng tạm thời của một phụ trợ khác bởi vì không có công việc vệ sinh thông thường nào cho phép truy cập đồng thời được thực hiện cho các bảng tạm thời.

Trong 9.2 bạn sẽ muốn sử dụng một UNLOGGEDbảng thay thế; điều này có thể được nhìn thấy từ các phiên khác, nhưng vẫn giữ lại hầu hết các lợi ích hiệu suất của một bảng tạm thời.


11

Câu trả lời ngắn gọn là không". Các bảng tạm thời trong các phiên khác là vô hình theo thiết kế. Sẽ không có gì khác biệt nếu hai phiên có cùng một người dùng. Cũng:

Trình nền tự động không thể truy cập và do đó không thể hút bụi hoặc phân tích các bảng tạm thời


Khi các bảng tạm thời bị hủy, chúng có cần chân không để dọn sạch bất kỳ tài nguyên bộ nhớ hoặc đĩa nào không? Tôi đang cố gắng giải quyết vấn đề này và không chắc liệu thực tế này có thể tự động tìm thấy các bảng tạm thời là lý do cho việc rò rỉ bộ nhớ hay không. Tôi có cần hút bụi bằng tay không?
chắc chắn nhất

"Khi bảng tạm thời bị rơi, họ có cần chân không" không, xem tại đây . Điều này cũng đúng với bất kỳ bảng nào, không chỉ các bảng tạm thời.
Jack Douglas

3

Tôi không biết liệu điều này có thể giúp bạn không, nhưng bạn có thể thử.

Theo dõi truy vấn bảng danh mục hệ thống nên có thể liệt kê tất cả các bảng tạm thời được tạo trong các phiên khác trong cơ sở dữ liệu:

chọn pn.nspname, pc.relname từ pg_group pc, pg_namespace pn trong đó pc.relnamespace = pn.oid và pc.relname ilike 'your_temp_table_name';

Mỗi PostgreSQL doc , Temporary tables exist in a special schemavà thường được tạo ra với tên như pg_temp_xxx. Vì vậy, sử dụng schemaname. relationnametừ truy vấn trên, bạn sẽ có thể truy vấn bảng tạm thời của bạn. Như bạn có thể thấy ở đây, bảng tạm thời được tham chiếu với tên đủ điều kiện lược đồ.

Thí dụ: select * from pg_temp_20.your_temp_table_name


1
Cảm ơn vì tiền hỗ trợ. Tôi đã có thể tìm ra tên và lược đồ cho bảng tạm thời bằng dbvis (có thể sử dụng truy vấn đầu tiên bạn đã đề cập), nhưng vấn đề là tôi không thể truy cập chúng từ một phiên khác với phiên mà chúng được tạo.
newenglander
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.