Skip to content

PGSQL 使用记录

916字约3分钟

PythonPGSQL

2022-07-13

PostgreSQL 被业界誉为“世界上最先进的开源关系型数据库”,虽然 PostgreSQL 是关系型数据库,但其也支持 NoSQL 数据类型(JSON/XML/hstore),并且性能甚至超过了 MongoDB。

PGSQL 操作

PGSQL CLI

# pgsql部署执行执行如下操作
sudo su - postgres
psql

image-20220708171039813

PGSQL 客户端连接

# 使用客户端连接使用
psql -h 133.0.120.49 -p 18921 --username=flink_cdc --password

image-20220714101916339

PGSQL 语句操作

创建用户

create user "suwh" with password 'suwenhui@2022';

image-20220708201523982

创建库

create database suwh with owner suwh;

获取pgsql所有的库

select * from pg_database;

image-20220708153713056

获取pgsql所有的表

SELECT  tablename  FROM  pg_tables  WHERE  tablename NOT LIKE'pg%'  AND tablename NOT LIKE'sql_%'  ORDER BY  tablename;

image-20220709113315958

创建pgsql表

# 创建表
CREATE TABLE COMPANY(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL
);

# 插入数据
INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (1, 'Allen', 25, 'Texas', 10000);
INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (3, 'euansu', 25, 'Texas', 10000.9);

查询pgsql表结构

SELECT   A.ordinal_position,   A.column_name,   CASE A.is_nullable WHEN 'NO' THEN 0 ELSE 1END AS is_nullable,   A.data_type,   coalesce(A.character_maximum_length, A.numeric_precision, -1) as length,   B.COMMENT,   CASE WHEN length(B.attname) > 0 THEN 1 ELSE 0 END AS is_pk  FROM   information_schema.columns A  LEFT JOIN (   SELECT     pg_attribute.attname,     col_description ( pg_attribute.attrelid, pg_attribute.attnum ) AS COMMENT   FROM     pg_index,     pg_class,     pg_attribute   WHERE     pg_class.oid = 'company'::regclass   AND pg_index.indrelid = pg_class.oid   AND pg_attribute.attrelid = pg_class.oid   AND pg_attribute.attnum = ANY(pg_index.indkey)  ) B ON A.column_name = b.attname  WHERE   A.table_schema = 'public'  AND A.table_name = 'company'  ORDER BY   ordinal_position ASC;

image-20220708171255127

PGSQL 数据类型

名字别名描述
bigintint8有符号8字节整数
bigserialserial8自增8字节整数
bit [ (n) ]定长位串
bit varying [ (n) ]varbit可变长位串
booleanbool逻辑布尔值(真/假)
box平面上的矩形
bytea二进制数据("字节数组")
character varying [(n)]varchar [(n)]可变长字符串
cidrIPv4 或 IPv6 网络地址
circle平面上的圆
date日历日期(年, 月, 日)
double precisionfloat8双精度浮点数(8字节)
inetIPv4 或 IPv6 主机地址
integerint, int4有符号 4 字节整数
interval [ fields ] [ (p) ]时间间隔
line平面上的无限长直线
lseg平面上的线段
macaddrMAC (Media Access Control)地址
money货币金额
numeric [ (p, s) ]decimal [ (p, s) ]可选精度的准确数值数据类型
path平面上的几何路径
point平面上的点
polygon平面上的封闭几何路径
realfloat4单精度浮点数(4 字节)
smallintint2有符号 2 字节整数
smallserialserial2自增 2 字节整数
serialserial4自增 4 字节整数
text可变长字符串
time [ (p) ] [ without time zone ]一天中的时刻(无时区)
time [ (p) ] with time zone timetz一天中的时刻,含时区
timestamp [ (p) ] [ without time zone ]日期与时刻(无时区)
timestamp [ (p) ] with time zonetimestamptz日期与时刻,含时区
tsquery文本检索查询
tsvector文本检索文档
txid_snapshot用户级别的事务ID快照
uuid通用唯一标识符
xmlXML 数据
jsonJSON 数据

Python 连接 PGSQL

# 配置的用户 suwh 无数据库。
conn = psycopg2.connect(host='172.21.3.82', port='5432', user='suwh', password='suwenhui@2022')

image-20220708202731870

给用户 suwh 创建库后,正常连接。

image-20220708202958091

Python 连接 PGSQL 报错

(1)问题现象

SCRAM authentication requires libpq version 10 or above。

(2)问题结论

libpq 包版本低于10版本,升级 libpq 包版本,使用最新的 libpq.so 包替换原有的 libpq.so 包。

image-20220714101702399