2010-04-05 34 views
32

Làm cách nào để tìm thời gian tạo bảng trong Postgresql.PostgreSQL: Thời gian tạo bảng

Ví dụ,

Nếu tôi tạo tệp, tôi có thể tìm thời gian tạo tệp như tôi muốn biết thời gian tạo bảng.

Trả lời

14

Tôi đã xem qua các bảng pg_ * và tôi không thể tìm thấy bất kỳ thời gian tạo nào trong đó. Có thể định vị các tệp bảng, nhưng sau đó trên Linux bạn không thể nhận được thời gian tạo tệp. Vì vậy, tôi nghĩ câu trả lời là bạn chỉ có thể tìm thấy thông tin này trên Windows, sử dụng các bước sau:

  • nhận được id cơ sở dữ liệu với select datname, datdba from pg_database;
  • nhận được id bảng filenode với select relname, relfilenode from pg_class;
  • tìm tập tin bảng và tìm kiếm thời gian tạo của nó; Tôi nghĩ rằng vị trí phải là một cái gì đó như <PostgreSQL folder>/main/base/<database id>/<table filenode id> (không chắc chắn nó là gì trên Windows).
+3

Có một số hoạt động trên một bảng, chẳng hạn như CLUSTER, mà sẽ tạo ra một tập tin mới và không tái sử dụng cũ. Vì vậy, đây không phải là một phương pháp đáng tin cậy. –

+0

@Alex Korban: Hoàn toàn tự động hóa tại đây: http://stackoverflow.com/questions/18849756/automatically-drop-tables-and-indexes-older-than-90-days/18852752#18852752 –

+0

@Quandary: Thú vị, cảm ơn . Có vẻ như vẫn không có phương pháp chống đạn để làm điều đó, ngoài việc lưu trữ thời gian tạo bản thân. –

2

Tôi không nghĩ rằng nó có thể từ bên trong PostgreSQL, nhưng có thể bạn sẽ tìm thấy nó trong thời gian tạo tệp của bảng bên dưới.

17

Bạn không thể - thông tin không được ghi ở bất kỳ đâu. Nhìn vào các tệp bảng sẽ không nhất thiết cung cấp cho bạn thông tin phù hợp - có các thao tác bảng sẽ tạo một tệp mới cho bạn, trong trường hợp đó ngày sẽ đặt lại.

-3

Bạn có thể lấy từ pg_stat_last_operation. Dưới đây là làm thế nào để làm điều đó:

select * from pg_stat_last_operation where objid = 'table_name'::regclass order by statime; 

cửa hàng bảng này hoạt động sau đây:

select distinct staactionname from pg_stat_last_operation; 

staactionname 
--------------- 
ALTER 

ANALYZE 

CREATE 

PARTITION 

PRIVILEGE 

VACUUM 
(6 rows) 
+5

LRI: "pg_stat_last_operation không tồn tại", tôi đang sử dụng pg9.2.4. –

+3

pg_stat_last_operation là Greenplum. –

+0

Bảng 'pg_stat_all_tables' cũng có thể hữu ích. –

-3

--query

select pslo.stasubtype, pc.relname, pslo.statime 
from pg_stat_last_operation pslo 
join pg_class pc on(pc.relfilenode = pslo.objid) 
and pslo.staactionname = 'CREATE' 
Order By pslo.statime desc 

sẽ giúp đạt được kết quả mong muốn

(thử nó trên greenplum)

+0

Đây là câu trả lời tương tự như của Manoj và greenplum cụ thể. – dezso

+0

Tôi đang sử dụng hai bảng –

+1

tính năng này không hoạt động trong PostgreSQL – a1an

0

Suggested here:

SELECT oid FROM pg_database WHERE datname = 'mydb'; 

Sau đó (giả sử các oid là 12345):

ls -l $PGDATA/base/12345/PG_VERSION 

workaround này giả định rằng PG_VERSION là ít có khả năng được sửa đổi sau khi tạo.

NB: Nếu PGDATA không được định nghĩa, kiểm tra Where does PostgreSQL store the database?

Các vấn đề liên quan