2017-05-22 15 views
-6

이것은 SQL 쿼리입니다. 포스트그레스 질의로 변환해야합니다.오라클의 DBA_FREE_SPACE 및 DBA_DATA_FILES에 해당하는 Postgres

SELECT a.tablespace_name, 
     a.maxbytes, 
     a.mbytes, 
     (a.maxbytes - a.mbytes), 
     ROUND(((a.maxbytes - a.mbytes)/a.maxbytes)*100,2) AS fieldvalues 
FROM (
    SELECT tablespace_name, 
     SUM(maxbytes/1024/1024) maxbytes, 
     SUM(bytes/1024/1024) mbytes 
    FROM dba_data_files 
    WHERE tablespace_name IN (SELECT tablespace_name 
          FROM dba_segments 
          WHERE OWNER = 'TEST') 
    GROUP BY tablespace_name 
) a, 
    (SELECT tablespace_name, 
     SUM(bytes/1024/1024) mbytes 
    FROM dba_free_space 
    WHERE tablespace_name IN (SELECT tablespace_name 
          FROM dba_segments 
          WHERE OWNER = 'TEST') 
    GROUP BY tablespace_name 
) b 
WHERE a.tablespace_name = b.tablespace_name 
ORDER BY a.tablespace_name 
+0

내가 포스트 그레스 쿼리 –

+2

에 위에서 언급 한 SQL 쿼리를 변환해야 사용, 스키마에있는 모든 테이블의 크기를 계산하려면? 우리는 무료 코드 변환 서비스가 아닙니다 (비록 때때로 궁금해 할지라도 ...) –

+1

그리고 우리가 그것에 대해 무엇을하기를 바라십니까? SO는 코딩 서비스가 아닙니다. 문제가 있습니까? – Arion

답변

3

짧은 대답 : Postgres에는 해당 검색어가 없습니다.


포스트 그레스의 테이블 스페이스의 개념은 오라클의 테이블 스페이스 개념을 다른 완전히입니다. Postgres에는 컨테이너 파일이 없습니다. As documented in the manual 각 테이블은 해당 테이블과 관련된 하나 이상의 파일에 저장됩니다. 테이블 스페이스는 하드 디스크의 디렉토리입니다.

때문에, Postgres에는 DBA_FREE_SPACE과 같은 것이 존재하지 않습니다 (또는 필요합니다).

단일 데이터베이스의 크기를 계산하려면 예를 들어 다음을 사용할 수 있습니다.

select pg_database_size('my_database_name'); 

당신을 무엇을 중지하는 것

select table_schema, 
     table_name, 
     pg_size_pretty(pg_total_relation_size (format('%I.%I', table_schema, table_name))) 
from information_schema.tables 
where table_schema not in ('information_schema', 'pg_catalog') 
order by pg_total_relation_size(format('%I.%I', table_schema, table_name)) desc;