重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
[postgres@localhost bin]$ ./oid2name -d postgres
为将乐等地区用户提供了全套网页设计制作服务,及将乐网站建设行业解决方案。主营业务为成都网站设计、网站建设、将乐网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
From database "postgres":
now:
SELECT pg_catalog.pg_relation_filenode(c.oid) as "Filenode", relname as "Table Name" FROM pg_class c LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace LEFT JOIN pg_catalog.pg_database d ON d.datname = pg_catalog.current_database(),pg_catalog.pg_tablespace t WHERE relkind IN ('r') AND n.nspname NOT IN ('pg_catalog', 'information_schema') AND n.nspname !~ '^pg_toast' AND t.oid = CASE WHEN reltablespace 0 THEN reltablespace ELSE dattablespace END ORDER BY relname
Filenode Table Name
----------------------
24608 gaotab
24604 testtab
[postgres@localhost bin]$
执行结果就是这样,这里没有用我给出的 postgres 数据库名 ,而是用了 pg_catalog.current_database()
我把格式整理一下,并且把数据库名换成我想要的 ’postgres‘,当然,如果有其他数据库,换其他的名字就可以了。
SELECT
pg_catalog.pg_relation_filenode(c.oid) as "Filenode",
relname as "Table Name"
FROM
pg_class c
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
LEFT JOIN pg_catalog.pg_database d ON d.datname = 'postgres',
pg_catalog.pg_tablespace t
WHERE
relkind IN ('r')
AND n.nspname NOT IN ('pg_catalog', 'information_schema')
AND n.nspname !~ '^pg_toast'
AND t.oid = CASE WHEN reltablespace 0 THEN reltablespace ELSE dattablespace END
ORDER BY
relname
其实 t 是没有必要的,还可以再简化:
SELECT
pg_catalog.pg_relation_filenode(c.oid) as "Filenode",
relname as "Table Name"
FROM
pg_class c
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
LEFT JOIN pg_catalog.pg_database d ON d.datname = 'postgres'
WHERE
relkind IN ('r')
AND n.nspname NOT IN ('pg_catalog', 'information_schema')
AND n.nspname !~ '^pg_toast'
ORDER BY
relname
先在本机安装PostgreSQL数据库,然后在开始菜单中找到该程序,双击并打开该数据库。
找到数据库服务器点击要加表的数据库,将鼠标移到"数据表"后,点击鼠标右键 ,出现如下图的对话框,点击"新数据表"。
弹出"新数据表"的对话框后,如下图1,在名称中输入表的名字,拥有人按照默认的选择就好,表空间是指表存放的位置,最好选择数据库名称,注释中最好要填写,便于后续的阅读,填写完后效果如下图2。
在填写好属性信息后,点击上方菜单的"字段",如下图1标红的位置。这里是用来为新建的表增加字段使用的。点击"新增",出现"新字段"的属性对话框如下图2,填写相关的属性信息如下图3,点击"确定"后退出对话框。
字段新增之后,必须在为该表添加约束,为表增加一个属性便于索引。对话框如下图1,点击"新增"弹出对话框,切换到"字段",如下图2,选择字段,点击"新增”就退出主键的对话框
到这里为止,表的新建已经完成,点击"确定"就可以正常退出,如下图1.。这时在数据表那边就可以看到新增的表了如下图2。到这里为止就可以正常的使用该表。
1、通过命令行查询
d
数据库
——
得到所有表的名字
d
表名
——
得到表结构
2、通过SQL语句查询
"select
*
from
pg_tables"
——
得到当前db中所有表的信息(这里pg_tables是系统视图)
"select
tablename
from
pg_tables
where
schemaname='public'"
——
得到所有用户自定义表的名字(这里"tablename"字段是表的名字,"schemaname"是schema的名字。用户自定义的表,如果未经特殊处理,默认都是放在名为public的schema下)
表分区是解决一些因单表过大引用的性能问题的方式,比如某张表过大就会造成查询变慢,可能分区是一种解决方案。一般建议当单表大小超过内存就可以考虑表分区了。PostgreSQL的表分区有三种方式:
本文通过示例讲解如何进行这三种方式的分区。
为方便,我们通过Docker的方式启动一个PostgreSQL,可参考:《Docker启动PostgreSQL并推荐几款连接工具》。我们要选择较高的版本,否则不支持Hash分区,命令如下:
先创建一张表带有年龄,然后我们根据年龄分段来进行分区,创建表语句如下:
这个语句已经指定了按age字段来分区了,接着创建分区表:
这里创建了四张分区表,分别对应年龄是0到10岁、11到20岁、21到30岁、30岁以上。
接着我们插入一些数据:
可以看到这里的表名还是 pkslow_person_r ,而不是具体的分区表,说明对于客户端是无感知的。
我们查询也一样的:
但实际上是有分区表存在的:
而且分区表与主表的字段是一致的。
查询分区表,就只能查到那个特定分区的数据了:
类似的,列表分区是按特定的值来分区,比较某个城市的数据放在一个分区里。这里不再给出每一步的讲解,代码如下:
当我们查询第一个分区的时候,只有广州的数据:
哈希分区是指按字段取哈希值后再分区。具体的语句如下:
可以看到创建分区表的时候,我们用了取模的方式,所以如果要创建N个分区表,就要取N取模。
随便查询一张分区表如下:
可以看到同是SZ的哈希值是一样的,肯定会分在同一个分区,而BJ的哈希值取模后也属于同一个分区。
本文讲解了PostgreSQL分区的三种方式。
代码请查看:
1、通过命令行查询\d数据库——得到所有表的名字\d表名——得到表结构2、通过
SQL语句
查询"select*frompg_tables"——得到当前db中所有表的信息(这里pg_tables是系统视图)"selecttablenamefrompg_tableswhereschemaname='public
1、查看当前数据库中所有的模式。
2、如果想查看模式中所有的对象信息,可以通过\d 模式名.* 加上通配符的方式来进行查看。
3、在查看模式中的对象时一般使用的方式都是模式名.对象名的方式。
4、在postgresql中有一个类型于linux系统中$PATH的环境变量search_path,默认情况下它的值是当前数据库值和公共模式值。
5、如果想其它模式也添加在搜索路径中可通过如下命令来进行设置。
6、设置完成后如果我们再访问tec模式下的对象,就不需要再使用模式名.对象名的方式了,直接使用对象名即可进行操作。