Get Table Sizes in your Schema

本文提供了一种SQL查询方法,用于查看数据库中各表占用的空间大小,包括表名、所在表空间及所占空间的MB数。此查询对于数据库管理和优化空间非常有用。
If you want to see how much space your tables are taking in the database, log in to the shcema and execute this SQL.

SELECT   segment_name table_name, MAX (tablespace_name) tablespace_name,
         SUM
(BYTES) / (1024 * 1024) table_size_mb
   
FROM user_extents
   
WHERE segment_name IN (SELECT tname
                           
FROM tab
                           
WHERE tabtype = 'TABLE')
GROUP BY segment_name
ORDER BY tablespace_name

The Above query tells you the table name, the table space it is residing in and the size in MB.

转载于:https://www.cnblogs.com/GoDevil/archive/2008/08/07/1262749.html

在 PostgreSQL 中创建表后遇到查询错误提示 `table not found in schema public`,通常表明表未正确创建在 `public` 模式下,或者当前连接的数据库用户没有正确访问该模式的权限。以下是可能的原因和解决方法: ### 检查表是否创建在 `public` 模式下 确保在创建表时明确指定了 `public` 模式,或者数据库默认模式为 `public`。如果没有指定模式,PostgreSQL 会使用默认模式(通常是 `public`),但某些情况下可能被修改为其他模式。可以使用以下命令查看当前会话的模式搜索路径: ```sql SHOW search_path; ``` 如果输出中未包含 `public`,可以通过以下命令将其添加到搜索路径中: ```sql SET search_path TO public; ``` 此外,在创建表时,可以显式指定模式以确保表位于 `public` 模式下: ```sql CREATE TABLE public.table_name (...); ``` ### 确认用户权限 即使表位于 `public` 模式下,如果用户没有访问该模式的权限,也会导致查询失败。可以使用以下命令授予用户对 `public` 模式下所有表的查询权限: ```sql GRANT SELECT ON ALL TABLES IN SCHEMA public TO user_name; ``` 如果希望用户能够自动获得未来在 `public` 模式下创建的表的权限,可以使用以下命令设置默认权限: ```sql ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO user_name; ``` ### 检查表是否存在 如果确认表应该存在于 `public` 模式下但仍然无法找到,可以通过以下命令检查表是否确实存在: ```sql SELECT * FROM pg_tables WHERE schemaname = 'public'; ``` 这条命令会列出 `public` 模式下的所有表名。如果找不到目标表,可能是在创建时出现了错误,或者表被创建在了其他模式下。 ### 使用外部表时的特殊处理 如果使用了 `postgres_fdw` 插件来创建外部表,需要确保在创建外部表时正确指定了模式和表名。例如: ```sql CREATE FOREIGN TABLE public.tbl_fdw (a int) SERVER server_remote_70 OPTIONS (schema_name 'public', table_name 'tb1'); ``` 如果外部表的模式或表名配置错误,也会导致查询失败。 ### 示例代码 以下是一个完整的示例,展示如何正确创建表、设置权限以及查询表: ```sql -- 设置搜索路径为 public SET search_path TO public; -- 创建表 CREATE TABLE public.example_table ( id serial PRIMARY KEY, name varchar(100) ); -- 授予用户查询权限 GRANT SELECT ON ALL TABLES IN SCHEMA public TO test_user; -- 设置默认权限 ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO test_user; -- 插入测试数据 INSERT INTO public.example_table (name) VALUES ('Test'); -- 查询表 SELECT * FROM public.example_table; ``` ### 总结 要解决 PostgreSQL 创建表后查询提示 `table not found in schema public` 的问题,需要检查表是否正确创建在 `public` 模式下、用户的权限是否足够以及是否存在其他配置问题。通过调整搜索路径、显式指定模式、授予权限和设置默认权限,可以有效解决此类问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值