美文网首页
postgresql实战—常用的命令

postgresql实战—常用的命令

作者: 熊猫学猿 | 来源:发表于2022-08-01 07:37 被阅读0次

    \dt+ 表名:查看表大小

    \di+ 索引名:查看索引大小

    \sf 函数名:查看函数定义

    psql导入与导出

    COPY命令是SQL命令,\copy是元命令

    COPY命令必须具有SUPERUSER超级权限(将数据通过stdin、stdout方式导出导入情况除外),而\copy是元命令不需要SUPERUSER权限

    COPY命令读取或写入数据库服务器端主机上的文件,而\copy是元命令是从psql客户端主机读取或写入文件

    从性能来看,大数据量导出到文件或大文件数据导入数据库,COPY比\copy性能高

    COPY test FROM '/home/…/test.txt'

    COPY test To  '/home/…/test.txt'

    \set name value 设置变量名,name表示变量名称,value表示变量值

    \set v_id=2

    select *from test where id=:v_id

    .psqlrc文件能够方便地预先制定维护脚本

    postgresql支持最大的字段大小为1GB

    EXTRACT函数可以从日期、时间数据类型中抽取年月日时分秒信息

    select EXTRACT(year FROM now())

    array_append:向数组末端追加一个元素

    如:select array_append(array[1,2,3],4)  ,array_remove(array[1,2,3,4],2)

    json 和jsonb两种类型在使用上几乎完全相同,主要区别为:json存储格式为文本,而jsonb存储格式为二进制,由于存储格式的不同使得两种json数据类型的处理效率不一样,json类型以文本存储并且存储的内容和输入数据一样,当检索json数据时必须重新解析,而jsonb以二进制形式存储已解析好的数据,当检索jsonb数据时不需要重新解析,因此json写入比jsonb快,但检索比jsonb慢。

    删除json数据的健/值:select '{“a”:1,”b”:2}::jsonb-a

    1)  要注意使用 LeftJoin(Right Join 类似 ) 的场景。

    避免大表 Hash。此场景会导致执行计划将右边的大表 Hash 到内存中,有时是性能拖累。应该将 SQL 改写为如下形式:

    原 SQL:selects.*,b.xxx from small s left join big b on s.id=b.id

    修改:  select s.*,b.xxx from small s left join(select b.* from big b where b.id in(select idfrom small)) b on s.id=b.id 你会发现性能有很大提升。

    2)  尽量不要写出自己理解起来都有困难的 SQL。比如:select ta a left join tb b on a.id=b.id where b.timeflag=’20140825’;你会发现执行计划中没有 left join,因为这个 where 条件导致 left join 直接被执行计划降级为 inner join 了。

    一般来说 inner join 后面的 where 条件可以被提前到 table scan 节点,而 left join 的 where条件是对结果的 filter,结果中要求 b 表字段符合 not null 的条件,自然也就没有 left join 的逻辑了。

    with查询是postgresql支持的高级sql特性之一,这一特性称为CTE

    WITH t as (select generate_series(1,3)

    select*from t

    这个简单的CTE实例中,一开始定义了一条辅助语句t取数,之后在主查询语句中查询t,定义的辅助语句就像定义了一张临时表,对于复杂查询如果不使用CTE,可以通过创建视图方式简化SQL

    相关文章

      网友评论

          本文标题:postgresql实战—常用的命令

          本文链接:https://www.haomeiwen.com/subject/agudwrtx.html