postgresql তালিকা এবং আকার অনুসারে টেবিলগুলি


108

আমি কীভাবে পোস্টগ্রিজ এসকিউএল ডাটাবেসের সমস্ত সারণী তালিকাবদ্ধ করতে এবং আকার অনুসারে অর্ডার করতে পারি?


1
আপনি যদি কমান্ড-লাইন পিএসকিএল ক্লায়েন্ট ব্যবহার করছেন তবে একটি সরল \d+আপনাকে এই তথ্যটি প্রদর্শন করবে, যদিও সাজানো নয়।
cdowie

1
ধন্যবাদ। তবে আমার এটি বাছাই করা দরকার , আমার অনেকগুলি টেবিল রয়েছে।
কিছুই-বিশেষ এখানে

1
লোকেরা একই জিনিসটি সন্ধান করছে কিন্তু টেবিলের পরিবর্তে ডাটাবেসের জন্য: এখানে সমাধানটি দেওয়া হচ্ছে
স্কিপি লে গ্র্যান্ড গৌরু

1
পিএসকিএল: এটিকে --echo-hide দিয়ে শুরু করুন এবং এটি আপনাকে \ d + এবং অন্যান্য ব্যাকস্ল্যাশ কমান্ডের জন্য করা প্রশ্নগুলি বলবে। বাছাই যোগ করা সহজ।
জর্জেন স্ট্রোবেল

উত্তর:


149
select table_name, pg_relation_size(quote_ident(table_name))
from information_schema.tables
where table_schema = 'public'
order by 2

এটি আপনাকে স্কিমাতে সমস্ত টেবিলের আকার দেখায় publicযদি আপনার একাধিক স্কিমা থাকে, আপনি ব্যবহার করতে পারেন:

select table_schema, table_name, pg_relation_size('"'||table_schema||'"."'||table_name||'"')
from information_schema.tables
order by 3

এসকিউএলফিডাল উদাহরণ: http://sqlfiddle.com/#!15/13157/3

ম্যানুয়ালটিতে সমস্ত অবজেক্ট সাইজের ফাংশনের তালিকা ।


এটি টেবিল_স্কেমা, স্কিমা_নাম নয়। প্রথম ক্যোয়ারীটি ভাল ছিল তবে আপনি ইতিমধ্যে আপনার পিএসএকিএল সেশনে কিছু টাইপ করা শুরু করেছিলেন যা একটি সিনট্যাক্স ত্রুটির কারণে হয়েছিল।
ফলস্বরূপ

ঠিক আছে এই কোডটি কাজ করে: select table_schema, table_name, pg_relation_size(table_schema||'.'||table_name) from information_schema.tables order by 3; সাহায্যের জন্য ধন্যবাদ!
কিছুই-বিশেষ এখানে

কোন ধারণা এই আমার ক্ষেত্রে কাজ করে না? stackoverflow.com/questions/40977776/…
হুয়ান কার্লোস ওরোপিজা

@ সুক্রোনোর: "কাজ করে না" কোনও বৈধ পোস্টগ্রিস ত্রুটি বার্তা নয়। আমার উত্তরের ক্যোয়ারী আমার পক্ষে কাজ করে: rextester.com/KGKPR49004
a_horse_with_no_name

আমি প্রথম ক্যোয়ারী চালানোর সময় আমি শূন্য সারি পাই। স্কিমা সর্বজনীন দেখায় select * from information_schema.tables where table_schema = 'public';যদিও শূন্য সারি দেয় \dnows 9.5 এর পরিবর্তন হতে পারে?
ভেড়াডগ

71

এটি আপনাকে স্কিমা নাম, টেবিলের নাম, আকার সুন্দর এবং আকার (সাজানোর জন্য প্রয়োজনীয়) দেখাবে।

SELECT
  schema_name,
  relname,
  pg_size_pretty(table_size) AS size,
  table_size

FROM (
       SELECT
         pg_catalog.pg_namespace.nspname           AS schema_name,
         relname,
         pg_relation_size(pg_catalog.pg_class.oid) AS table_size

       FROM pg_catalog.pg_class
         JOIN pg_catalog.pg_namespace ON relnamespace = pg_catalog.pg_namespace.oid
     ) t
WHERE schema_name NOT LIKE 'pg_%'
ORDER BY table_size DESC;

আমি পোস্টগ্র্রেএসকিউএল ডাটাবেসে আকারের (আপেক্ষিক এবং পরম) স্কিমা তালিকা থেকে সমাধানের ভিত্তিতে এটি তৈরি করি


21

এটি আরও পরিষ্কার হবে।

pg_size_pretty(<numeric_value>) - নোটের বাইটগুলি মানব-পঠনযোগ্য ফর্ম্যাটে রূপান্তর করে।

pg_database_size(<db_name>)- বাইটে ডাটাবেসের আকার পায় ।

pg_total_relation_size(<relation_name>)- টেবিলের মোট আকার এবং এটির সূচক বাইটে পায়

pg_relation_size(<relation_name>)- বাইটে সম্পর্ক (সারণী / সূচক) আকার পায় ।

pg_index_size(<relation_name>)- সূচী আকার পায় সম্পর্ক মধ্যে বাইট

current_database() - বর্তমানে ব্যবহৃত ডাটাবেস পেয়েছে যার উপর এই কোয়েরিটি করা হচ্ছে।

প্রশ্ন:

select current_database() as database,
       pg_size_pretty(total_database_size) as total_database_size,
       schema_name,
       table_name,
       pg_size_pretty(total_table_size) as total_table_size,
       pg_size_pretty(table_size) as table_size,
       pg_size_pretty(index_size) as index_size
       from ( select table_name,
                table_schema as schema_name,
                pg_database_size(current_database()) as total_database_size,
                pg_total_relation_size(table_name) as total_table_size,
                pg_relation_size(table_name) as table_size,
                pg_indexes_size(table_name) as index_size
                from information_schema.tables
                where table_schema=current_schema() and table_name like 'table_%'
                order by total_table_size
            ) as sizes;

ফলাফল:

 database  | total_database_size | schema_name | table_name | total_table_size | table_size | index_size
-----------+---------------------+-------------+------------+------------------+------------+------------
 vigneshdb | 1586 MB             | corpdata    | table_aaa  | 16 kB            | 0 bytes    | 8192 bytes
 vigneshdb | 1586 MB             | corpdata    | table_bbb  | 24 kB            | 0 bytes    | 16 kB
 vigneshdb | 1586 MB             | corpdata    | table_ccc  | 640 kB           | 112 kB     | 488 kB
 vigneshdb | 1586 MB             | corpdata    | table_ddd  | 9760 kB          | 3152 kB    | 6568 kB
 vigneshdb | 1586 MB             | corpdata    | table_eee  | 1120 MB          | 311 MB     | 808 MB

Humanized বিন্যাসে প্রতিনিধিত্ব করা হয় bytes, kB, MB, GB, এবং TB

bytesথেকে kB- থেকে শুরু10240 bytes

bytesথেকে MB- 10485248 bytes= 10239.5 kB~ থেকে শুরু হয় ~10 MB

bytesথেকে GB- 10736893952 bytes= 10239.5 MB~ থেকে শুরু হয় ~10 BG

bytesথেকে TB- 10994579406848 bytes= 10239.5 GB~ থেকে শুরু হয় ~10 TB

সমস্ত ইউনিট রূপান্তর শুরু হয় 10 + <unit>

রেফারেন্সের জন্য - পোস্টগ্রিস অফিশিয়াল ডকুমেন্টেশন


এই উদাহরণটি বড় হাতের টেবিলের নামগুলির সাথে কাজ করে না
ইভান স্বেশনিকভ

12
SELECT
   relname as "Table",
   pg_size_pretty(pg_total_relation_size(relid)) As "Size",
   pg_size_pretty(pg_total_relation_size(relid) - pg_relation_size(relid)) as "External Size"
   FROM pg_catalog.pg_statio_user_tables ORDER BY pg_total_relation_size(relid) DESC;

এখান থেকে https://wiki-bsse.ethz.ch/display/ITDOC/Check+size+of+tables++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ পর্যন্ত আরও আগেও পোস্ট করা হয়েছে


4
select table_name,n_live_tup, pg_size_pretty(pg_relation_size(table_name))
from information_schema.tables
inner join pg_stat_user_tables  on table_name=relname
where table_schema = 'public'
order by 2 desc

আরেকটি বিকল্প


2

কোন টেবিলগুলি সর্বাধিক স্থান ব্যবহার করে তা আমার সন্ধান করা উচিত।

অন্যান্য উত্তরের উপর ভিত্তি করে, আমি সেই প্রশ্নটি ব্যবহার করেছি:

select table_name, pg_size_pretty( pg_relation_size(quote_ident(table_name)) )
from information_schema.tables
where table_schema = 'public'
order by pg_relation_size(quote_ident(table_name)) desc

আমি নিম্নলিখিত ফলাফল পেতে:

table_name              pg_size_pretty
--------------------------------------
trade_binance           96 GB
closs_v2_binance_stash  46 GB
closs_bitfinex_stash    5725 MB
trade_bitfinex          5112 MB
...
api_requests            0 bytes
trade_huobi             0 bytes

আমার আরও বড় এসএসডি কেনা উচিত ছিল।


1
 select uv.a tablename, pg_size_pretty(uv.b) sizepretty 
 from (select tb.tablename a, pg_table_size('schemaname.'||tb.tablename::text) b 
        from pg_tables tb 
        where tb.schemaname ilike 'schemaname' 
        order by 2 desc
       ) uv

1
আপনার উত্তরটি আরও মূল্যবান হবে যদি আপনি কোনও ব্যাখ্যাটি অন্তর্ভুক্ত করেন তবে কেন প্রস্তাবিত পদ্ধতির সহায়ক।
সিন্ডি মিস্টার

এটি ঘোড়ার জবাবের সাথে সমান, কেবল আকার অনুসারে বাছাই করা বেশ সুন্দর কারণ সাজানোর দৃশ্যটি দেখতে সহজ হবে।
স্পাইক 7

"উত্তর" স্পেসে সম্পাদনা লিঙ্কটি ব্যবহার করে দয়া করে আপনার উত্তরে সেই পাঠ্যটি যুক্ত করুন। তারপরে আপনার অবদানটি স্ট্যাকওভারফ্লো নির্দেশিকাগুলির সাথে সামঞ্জস্য করবে (সহায়তা কেন্দ্রটিতে কিছুটা পড়ুন) :-)
সিন্ডি মিস্টার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.