YStudio Y++

PostgreSQL类

Y++ / YStudio 开发文档 · 一点滴

类对象支持库(不是扁平命令)。路径:支持库 → 扩展类库 → PostgreSQL类。

类型名必须写完整「PostgreSQL类」(也可写 Postgres类)。声明时自动创建,一般无需再调 创建*。

硬约束

  1. 类型名必须写「PostgreSQL类」。
  2. 能力范围:本类是 PostgreSQL 客户端(旁路 libpq.dll),不是 PostgreSQL 服务器端。可连接本机 / 局域网 / 公网主机。
  3. 远程连接前提:服务器已运行且允许连接(listen_addresses、pg_hba.conf、防火墙放行常见端口 5432);账号与密码正确;网络可达。
  4. 连接失败先查:主机/端口/账号/库名、取错误(),以及程序目录是否有 libpq.dll(及依赖 DLL)。
  5. 与 SQLite类 区别:SQLite 打开的是本地文件;PostgreSQL 打开的是网络上的服务器。
  6. 与 MySQL类 类似(旁路客户端 DLL),协议与默认端口不同(5432 / UTF8)。

快速开始

PostgreSQL类 db
如果 (db.打开("127.0.0.1", 5432, "postgres", "pass", "demo") == 假) {
    输出(db.取错误())
} 否则 {
    字段信息 cols[3]
    cols[0].名称 = "id"
    cols[0].类型 = #主键
    cols[1].名称 = "姓名"
    cols[1].类型 = #文本
    cols[2].名称 = "年龄"
    cols[2].类型 = #整数
    db.建表("用户", cols)
    db.插入("用户", "姓名,年龄", "张三,20")
    db.查询("用户", "年龄=20")
    判断循环 (db.取下一行()) {
        输出(db.取文本("姓名"))
    }
    db.关闭()
}

旁路 DLL

  • 默认加载程序目录 libpq.dll。
  • 可用 置客户端库(路径或目录) 指定。
  • IDE 在工程引用本类时,从 redist/libpq/{x86|x64} 或仓库 third_party/libpq/{x86|x64} 拷贝到 exe 旁。
  • 放置说明见 third_party/libpq/README.md。

连接增强

db.置SSL模式("prefer")
db.置搜索路径("public")
db.打开("127.0.0.1", 5432, "postgres", "pass", "demo")
// 或:
db.打开连接串("host=127.0.0.1 port=5432 dbname=demo user=postgres password=pass sslmode=require")

插入后 取最后插入ID() 使用 RETURNING(优先 id 列,否则首列)。 替换插入("表","id,姓名","1,张三") 对首列(或第 4 参数冲突列)做 ON CONFLICT DO UPDATE。 BYTEA:结果行用 取字节集;条件更新用 更新字节集;CSV 插入可用 \xAABBCC。

方法摘要

方法 说明
打开 / 打开连接串 主机参数或 libpq 连接串;可先 置SSL模式 / 置搜索路径
关闭 / 是否打开 / 检测连接 / 取服务器版本 连接管理
选择库 按新库名重连(PostgreSQL 无 USE)
建表 / 删表 / 清空表 / 表是否存在 / 字段是否存在 表结构
插入 / 忽略插入 / 批量添加 / 更新 / 删除 / 查询 高阶 CRUD(批量=多行 VALUES)
替换插入 ON CONFLICT (…) DO UPDATE;默认真列,可传冲突列
取下一行 / 取文本 / 取字节集 / 取整数 / 取小数 / 取列数 / 取列名 结果集;更新字节集 写 BYTEA
执行SQL / 查询SQL / 转义文本 原生 SQL
开始事务 / 提交 / 回滚 事务
取最后插入ID RETURNING(无则回退 lastval())
取影响行数 / 取错误 辅助

字段类型常量:#文本 #整数 #小数 #逻辑 #二进制 #主键 #日期时间 #日期 #时间 #长文本(主键映射为 SERIAL PRIMARY KEY)。