试用MotherDuck: DuckDB 的ServerLess版(或者叫NoServer版)云服务

背景 更多用法请参考motherduck手册 - https://motherduck.com/docs/intro 《期望未来DuckDB的架构演变方向》 里说到了serverless的演进方向, 想不到已经有了motherduck这样的产品. 准备 1、使用最强学习镜像 -《2023-PostgreSQL Docker镜像学习环境 ARM64版, 已集成热门插件和工具》 -《2023-PostgreSQL Docker镜像学习环境 AMD64版, 已集成热门插件和工具》 2、你需要1个github账号 3、进入容器 docker exec -ti pg bash su - postgres 试用motherduck 1、启动duckdb 0.9.2 及以上版本 ./duckdb v0.9.2 3c695d7ba9 Enter ".help" for usage hints. Connected to a transient in-memory database. Use ".open FILENAME" to reopen on a persistent database. 2、打开motherduck D .open md: 1. Please open this link to login into your account: https://auth. [阅读全文]

PostgreSQL 17 preview - 增强standby节点检查点统计信息

背景 PostgreSQL 物理从库(standby)也有检查点功能(restart checkpoint), 主要是避免wal无限增大, 检查点做完后如果standby重启, 只需要restart checkpoint之后的所有WAL就可以继续恢复. https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=12915a58eec962f407a6c38ce2bf08a48dde57b5 PG 17增强了restart checkpoint的统计信息. Enhance checkpointer restartpoint statistics author Alexander Korotkov <akorotkov@postgresql.org> Sun, 24 Dec 2023 22:52:42 +0000 (00:52 +0200) committer Alexander Korotkov <akorotkov@postgresql.org> Sun, 24 Dec 2023 23:12:36 +0000 (01:12 +0200) commit 12915a58eec962f407a6c38ce2bf08a48dde57b5 tree 157866d53bed7766c4bb41ee7be37b0cc4579fb7 tree parent 64e77b496af61ee31189ba69b40e785e11e9967f commit | diff Enhance checkpointer restartpoint statistics Bhis commit introduces enhancements to the pg_stat_checkpointer view by adding three new columns: restartpoints_timed, restartpoints_req, and restartpoints_done. [阅读全文]

这个PostgreSQL how to和每天5分钟PG聊通透有点类似

背景 这个PostgreSQL how to和每天5分钟PG聊通透有点类似, 都是经过总结的实践小知识, 准备基于这个素材做成每天的视频直播. - https://gitlab.com/postgres-ai/postgresql-consulting/postgres-howtos 202112⁄20211224_05.md 《每天5分钟,PG聊通透 - 系列1 - 热门问题 - 链接、驱动、SQL - 第24期 - 为什么与检索字段类型不一致的输入条件有时可能不能采用索引?》 202112⁄20211224_04.md 《每天5分钟,PG聊通透 - 系列1 - 热门问题 - 链接、驱动、SQL - 第23期 - 为什么有的函数不能被用来创建表达式索引?》 202112⁄20211224_03.md 《每天5分钟,PG聊通透 - 系列1 - 热门问题 - 链接、驱动、SQL - 第22期 - 为什么创建索引会堵塞DML? 如何在线创建索引?》 202112⁄20211224_02.md 《每天5分钟,PG聊通透 - 系列1 - 热门问题 - 链接、驱动、SQL - 第21期 - 为什么要用绑定变量?》 202112⁄20211224_01.md 《每天5分钟,PG聊通透 - 系列1 - 热门问题 - 链接、驱动、SQL - 第20期 - 为什么分区表的分区过多会导致性能下降? [阅读全文]

PostgreSQL pg_idkit: 各种 UUID 生成方法函数大集合

背景 pg_idkit是rust写的一个PostgreSQL UUID生成方法函数大集合插件. https://github.com/VADOSWARE/pg_idkit 后期将集成到宇宙最强PostgreSQL学习镜像中. 《2023-PostgreSQL/DuckDB/MySQL/PolarDB-X Docker镜像学习环境 ARM64版, 已集成热门插件和工具》 《2023-PostgreSQL/DuckDB/MySQL/PolarDB-X Docker镜像学习环境 AMD64版, 已集成热门插件和工具》 安装pg_idkit 克隆项目 docker exec -ti pg bash cd /tmp git clone --depth 1 https://github.com/VADOSWARE/pg_idkit.git 配置cargo源, 参考: https://mirrors.ustc.edu.cn/help/crates.io-index.html # export CARGO_HOME=/root # mkdir -vp ${CARGO_HOME:-$HOME/.cargo} # vi ${CARGO_HOME:-$HOME/.cargo}/config [source.crates-io] replace-with = 'ustc' [source.ustc] registry = "sparse+https://mirrors.ustc.edu.cn/crates.io-index/" 安装pg_idkit插件 cd /tmp/pg_idkit cargo install cargo-get cargo-pgrx just # 如果对pgrx有版本要求请参考修改, 例如: # grep pgrx Cargo.toml # cargo install --locked --version 0. [阅读全文]

PostgreSQL pgdd: PostgreSQL Data Dictionary for 开发者

背景 PostgreSQL Data Dictionary, 快速了解数据库概览, 后期将集成到宇宙最强PostgreSQL学习镜像中. 《2023-PostgreSQL/DuckDB/MySQL/PolarDB-X Docker镜像学习环境 ARM64版, 已集成热门插件和工具》 《2023-PostgreSQL/DuckDB/MySQL/PolarDB-X Docker镜像学习环境 AMD64版, 已集成热门插件和工具》 例如 postgres=# select * from database; -[ RECORD 1 ]---+--------- oid | 13757 db_name | postgres db_size | 163 MB schema_count | 2 table_count | 7 size_in_tables | 150 MB view_count | 9 size_in_views | 0 bytes extension_count | 2 postgres=# select * from tables ; ... -[ RECORD 7 ]-----------+--------------------------------------------------------------- s_name | public t_name | pgbench_accounts data_type | table owned_by | postgres size_pretty | 128 MB size_bytes | 134365184 rows | 1000000 bytes_per_row | 134 size_plus_indexes_bytes | 156852224 size_plus_indexes | 150 MB description | system_object | f data_source | sensitive | oid | 25277 postgres=# select * from schemas ; -[ RECORD 1 ]-----------+------------------------------------------------------------------------------- s_name | dd owner | postgres data_source | Manually maintained sensitive | f description | Schema for Data Dictionary objects. [阅读全文]

PostgreSQL plpgsql 断言(assert)语法

背景 PostgreSQL 9.5开始支持plpgsql函数断言(assert)语法, 断言某个条件是否为真, 如果不为真 则抛出ASSERT_FAILURE异常, 如果条件语句本身执行异常 则抛出普通的异常信息. 默认配置参数plpgsql.check_asserts=on, 表示支持assert语句, 如果为off, 则不评估assert的断言条件(相当于旁路assert条件) 详细说明参考: https://www.postgresql.org/docs/14/plpgsql-errors-and-messages.html 43.9.2. Checking Assertions The ASSERT statement is a convenient shorthand for inserting debugging checks into PL/pgSQL functions. ASSERT condition [ , message ]; The condition is a Boolean expression that is expected to always evaluate to true; if it does, the ASSERT statement does nothing further. If the result is false or null, then an ASSERT_FAILURE exception is raised. [阅读全文]

DuckDB 存储生态: lance(向量存储引擎)的安装使用

背景 DuckDB内置了parquet, csv, iceberg, arrow等数据存储格式的支持. 针对高速向量检索, 则可以通过lance外部存储来实现. 上一篇信息简单介绍过其原理 - 《DuckDB 存储生态: lance(向量存储引擎): Modern columnar data format for ML/超越parquet》 - 《ChatGPT背后的数据库技术体验 - 向量近似搜索之 lance》 本文做个部署实验, 测试过程基于以下docker镜像. 《2023-PostgreSQL/DuckDB/MySQL/PolarDB-X Docker镜像学习环境 ARM64版, 已集成热门插件和工具》 《2023-PostgreSQL/DuckDB/MySQL/PolarDB-X Docker镜像学习环境 AMD64版, 已集成热门插件和工具》 x86 # 拉取镜像, 第一次拉取一次即可. 或者需要的时候执行, 将更新到最新镜像版本. docker pull registry.cn-hangzhou.aliyuncs.com/digoal/opensource_database:pg14_with_exts # 启动容器 docker run --platform linux/amd64 -d -it -P --cap-add=SYS_PTRACE --cap-add SYS_ADMIN --privileged=true --name pg --shm-size=1g registry.cn-hangzhou.aliyuncs.com/digoal/opensource_database:pg14_with_exts ##### 如果你想学习备份恢复、修改参数等需要重启数据库实例的case, 换个启动参数, 使用参数--entrypoint将容器根进程换成bash更好. 如下: docker run -d -it -P --cap-add=SYS_PTRACE --cap-add SYS_ADMIN --privileged=true --name pg --shm-size=1g --entrypoint /bin/bash registry. [阅读全文]

PostgreSQL 17 preview - 内置块级别物理增量备份(INCREMENTAL backup/pg_combinebackup)功能

背景 大实例备份最头痛的几个问题: 备份耗费空间大, 备份耗时, 中间任何原因导致备份失败重来的代价高昂. PostgreSQL 17 内置块级别物理增量备份(INCREMENTAL backup/pg_combinebackup)功能, 之前可以通过pg probackup, pg_rman, zfs来实现类似功能. 通过pg_rman实现块级增量备份文章参考: - 《PostgreSQL ptrack , pg_rman , 块级增量备份》 - 《PostgreSQL 最佳实践 - pg_rman 数据库恢复示例 与 软件限制解说》 - 《PostgreSQL 最佳实践 - pg_rman 以standby为源的备份浅析》 - 《PostgreSQL 最佳实践 - 块级别增量备份(pg_rman baseon LSN)源码浅析与使用》 通过zfs实现块级增量备份/快照备份文章参考: - 《如何创建RDS PG 的秒级 flashback闪回实例, 实时容灾实例 - zfs - snapshot - clone - standby - compress》 - 《PostgreSQL 最佳实践 - 块级增量备份(ZFS篇)验证 - recovery test script for zfs snapshot clone + postgresql stream replication + archive》 [阅读全文]

PostgreSQL 17 preview - WAL锁竞争优化 - reading WAL buffer contents without a lock, Additional write barrier in AdvanceXLInsertBuffer()

背景 https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=766571be16598b401b5527208847145edc6be1f4 Additional write barrier in AdvanceXLInsertBuffer(). master github/master author Jeff Davis <jdavis@postgresql.org> Wed, 20 Dec 2023 01:35:54 +0000 (17:35 -0800) committer Jeff Davis <jdavis@postgresql.org> Wed, 20 Dec 2023 01:35:54 +0000 (17:35 -0800) commit 766571be16598b401b5527208847145edc6be1f4 tree 8b996fa24f62b557b285ff07123a1d7e79a56092 tree parent c3a8e2a7cb16d55e3b757934b538cb8b8a0eab02 commit | diff Additional write barrier in AdvanceXLInsertBuffer(). First, mark the xlblocks member with InvalidXLogRecPtr, then issue a write barrier, then initialize it. That ensures that the xlblocks member doesn't appear valid while the contents are being initialized. [阅读全文]

一款rust写的PostgreSQL插件管理(build、发布、安装)工具: trunk


背景

一款rust写的PostgreSQL插件管理(build、发布、安装)工具: trunk

官网, 可搜索已集成的PostgreSQL插件
- https://pgt.dev/

开源项目
- https://github.com/tembo-io/trunk#installation

安装trunk

curl https://sh.rustup.rs -sSf | sh  
  
cargo install pg-trunk  

使用trunk安装插件例子

❯ trunk install pgmq  
Using pg_config: /usr/bin/pg_config  
Using pkglibdir: "/usr/lib/postgresql/15/lib"  
Using sharedir: "/usr/share/postgresql/15"  
Downloading from: https://cdb-plat-use1-prod-pgtrunkio.s3.amazonaws.com/extensions/pgmq/pgmq-0.5.0.tar.gz  
Dependencies: ["pg_partman"]  
Installing pgmq 0.5.0  
[+] pgmq.so => /usr/lib/postgresql/15/lib  
[+] extension/pgmq--0.5.0.sql => /usr/share/postgresql/15  
[+] extension/pgmq.control => /usr/share/postgresql/15