PostgreSQL备忘笔记

本文详细介绍了PostgreSQL,一个开源的对象-关系数据库系统,强调了其text和json数据类型,提供了json操作的示例,包括查询、更新和连表查询。此外,还讨论了模式的概念、大小写敏感性、dblink跨库查询以及类型转换。最后,文章通过表继承和函数重载展示了PostgreSQL的高级特性。
摘要由CSDN通过智能技术生成
什么是PostgreSQL

PostgreSQL 是一个免费的对象-关系数据库服务器(ORDBMS),完全开源,集关系与非关系于一身。由于前身为加州大学伯克利分校计算机系的学术研究系统,用于商业的时间比较晚,所有国内社区还不是很丰富。

数据类型

大部分类型与其他SQL差不了太多,主要讲解一下text,json这两个类型,其他类型可以通过下面的官方文档链接进行查看。

  • text:与其他数据库不同,pgsql中的text类型没有长度限制;
  • json:其中有分为json和jsonb,json会输出和输入完全相同的文本,而jsonb 则不会保留语义上没有意义的细节(例如空格)。

下面这个是试玩Pgsql的json类型的实例

-- 建立t_user
CREATE TABLE t_user(
   id 			  int4 			            PRIMARY KEY     NOT NULL,
   name           text    									NOT NULL,
   age            int4     									NOT NULL,
   address        char(50),
   salary         float4,
   note           jsonb
);

INSERT INTO t_user(ID, NAME, AGE, ADDRESS, SALARY) VALUES(1, '张三', 18, '深圳市', 1001);

UPDATE t_user SET note = '{"id":1, "name":"张三", "age":18, "address":"深圳市", "salary":1001, "note":[{"aa":11, "bb":22},{"aa":33, "bb":44}]}';

-- JSON中年龄等于18
SELECT * FROM t_user WHERE note @> '{"age":18}';

-- JSON中姓名包含“三”
SELECT * FROM t_user WHERE note ->> 'name' LIKE '%三%';

-- JSON中姓名为张三或者李四
SELECT * FROM t_user WHERE note ->> 'name' IN ('张三', '李四');

-- 通过键获取JSON对象值
SELECT note ->> 'name' FROM t_user;

-- 指定路径获取JSON对象
SELECT note #>> '{note, 0, aa}' FROM t_user;

-- 建立t_note
CREATE TABLE t_note (
  id int4 NOT NULL,
  name varchar(255),
  aa int4
);

INSERT INTO t_note VALUES (1, '张三', 11);

-- JSON连表查询
SELECT * FROM t_user u
INNER JOIN t_note n ON u.note ->> 'name' = n.name;

SELECT * FROM t_user u
INNER JOIN t_note n ON u.note #>> '{note, 0, aa}' = concat('', n.aa, '');

-- 查询JSON中年龄大于10
SELECT * FROM t_user WHERE note @? '$.age[*] ? (@ >10)';

SELECT * FROM t_user WHERE note @@ '$.age[*] > 10';

-- 查询JSON中note数组的第一个值
SELECT note #>> '{note, 0}' FROM t_user ;

-- 查询JSON中note数组的第一个值大于10
SELECT * FROM t_user WHERE CAST(note #>> '{note, 0}' as jsonb) @@ '$.aa[*] > 10';

数据类型官方文档:http://www.postgres.cn/docs/12/datatype.html
JSON 操作官方文档:http://www.postgres.cn/docs/12/functions-json.html

语法
1、模式(SCHEMA)

模式可以看着是一个表的集合,一个模式可以包含表、视图、索引、函数和操作符等。相同的对象名称可以被用于不同的模式中而不会出现冲突。

使用模式的优势:将数据库对象组织成逻辑组以便更容易管理(如:每个微服务一个模式)

2、Pgsql的大小写敏感问题
  • 字段名为小写:不区分大小写,不管是大小写都一律转为小写
  • 字段名为大写:区分大小写,并且需要加上双引号才能识别
    小写实例:
    在这里插入图片描述
    大写实例:
    在这里插入图片描述
    所有推荐用小写来建立数据库、表和字段。
3、dblink

Pgsql不支持直接跨数据库查询,只有使用dblink来跨库连接。

-- 创建dblink
create extension if not exists dblink;

-- dblink 查询语句,后面需要声明返回值类型
-- host:数据库ip; dbname:数据库名称; user:用户名; password:密码
select * from dblink('host=192.168.1.105 dbname=testdb user=zxh password=123456', 'select department_id,department_coding,department_name from department') 
as t_temp(department_id text, department_coding text, department_name text)

/**删除dblink**/
DROP extension dblink

在要使用dblink的数据库使用安装命令,安装完成后可以看到函数里面多了很多函数。
在这里插入图片描述

4、类型转换

由PostgreSQL进行的隐式类型转换会对查询的结果产生影响,必要时这些结果可以被使用显式类型转换来调整。

-------------------------------- gender_code 为 varchar 类型  --------------------------------

-- 执行成功
SELECT * FROM t_patient_info WHERE gender_code = '1';

-- 执行失败:没有匹配指定名称和参数类型的操作符. 您也许需要增加明确的类型转换.
SELECT * FROM t_patient_info WHERE gender_code = 1;

-- 类型转换示例1
SELECT * FROM t_patient_info WHERE gender_code :: INT = 1;

-- 类型转换示例2
SELECT * FROM t_patient_info WHERE CAST(gender_code AS INT) = 1;

但是如果把上面的两句查询放到Oracle中,都能执行成功,Oracle会帮我们自动转换类型比较。

5、继承和重载
  • 表:继承
  • 函数:重载

1)表继承示例

-- 创建城市表(name:名称; population:人口; altitude:海拔)
CREATE TABLE cities (
    name            text,
    population      float,
    altitude        int
);

-- 创建城市扩展表继承城市表(state:省份名称)
CREATE TABLE capitals (
    state           text
) INHERITS (cities);


-- 新增城市扩展表数据
INSERT INTO capitals VALUES('深圳市', 4000000, 50, '广东省');
INSERT INTO capitals VALUES('杭州市', 7000000, 20, '浙江省');
INSERT INTO capitals VALUES('广州市', 6000000, 40, '广东省');

-- 城市扩展表有数据
SELECT * FROM capitals;

-- 城市表也有数据(父表和子表的数据都会查出来)
SELECT * FROM cities;


-- 新增城市表,城市扩展表没有新增数据
INSERT INTO cities VALUES('北京市', 4000000, 50);

-- 只查父表数据
SELECT * FROM ONLY cities;

继承官方文档:http://www.postgres.cn/docs/12/ddl-inherit.html

2)函数重载(以dblink函数为例)
在这里插入图片描述
英文官方网站:https://www.postgresql.org/
中文官方网站:http://www.postgres.cn/v2/home

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值