PostgreSQL的数据存储(十五)---数据存储

本文深入探讨了PostgreSQL中大对象的存储机制及物理IO操作,通过解析lo_create、lo_open、lo_write等功能,解释了大对象如何被拆分存储并跨页管理,同时阐述了在缓存层与直接物理IO之间的区别,以及这种分离如何提升IO操作效率。

4.7      大对象存储

从用户可操作的角度看,PG提供了一套函数接口,用以操作大对象。如:lo_create、lo_open、lo_write、lo_close等。

大对象的存储,可以从lo_write函数中得知如下信息:

1.         大对象,会被拆分为一个个“LOBLKSIZE”(2k)大小的子项,当作元组项,置于数据页中(调用heap_form_tuple形成一个个tuple,然后用simple_heap_insert插入到页面中)

2.         大对象被拆分后,连续在页面上存储,可以跨页存储,但每次存储的单位是tuple(LOBLKSIZE大小)

 

4.8     物理IO调用方式

如果没有缓存(buf)这一层,读写元组或读写列,就需要直接调用IO函数了。就像作者在《PostgreSQL之精妙的数据库导入导出工具架构 (四)》等系列中写的一样,PG的导入导出工具,直接操作外存和物理IO打交道,所以直接调用read、write等C函数操作外存。

而存储层,涉及保存数据的地方,都是对buf操作,是一种逻辑IO的方式,所以,并不涉及直接调用read、write等C函数操作外存。

因为有了IO,逻辑IO和物理IO完全分离,使得操作IO的效率大为提高。读写tuple,完全建立在内存上,所以,没有了调用read、write等C函数操作的处理工作,减少物理IO操作提升了效率。


<think>首先,用户的问题是关于如何安装PostgreSQL和pgvector插件。用户的查询是:"我想获取PostgreSQL向量数据插件pgvector的安装方法,同时附带PostgreSQL的安装方法"。 系统级指令要求: - 所有行内数学表达式必须使用$...$格式。 - 独立公式使用$$...$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识,例如[^1]。 用户可见层要求: - 回答结构清晰,帮助用户逐步解决问题。 - 尽量保证回答真实可靠。 参考站内引用: - 引用[1]:提供了一个优快云链接,关于pgvector安装和PostgreSQL安装。 - 引用[2]:类似的信息,但似乎是一个片段,描述了安装步骤。 我需要基于这些引用构建一个清晰的安装指南。引用中提到了PostgreSQL 14.0和从GitHub克隆pgvector。 结构化回答: 1. **介绍**:简要说明pgvector和PostgreSQL。 2. **PostgreSQL安装步骤**:因为用户需要附带PostgreSQL安装方法。 3. **pgvector安装步骤**:包括克隆、编译、启用等。 4. **验证安装**:如何确认安装成功。 5. **生成相关问题**:在最后添加相关问题。 确保使用中文。 步骤细节(基于引用): - PostgreSQL安装: - 下载PostgreSQL 14.0安装包。 - 增加用户postgres。 - 解压安装。 - pgvector安装: - 从GitHub克隆仓库。 - 使用make和make install编译安装。 -PostgreSQL中启用扩展:CREATE EXTENSION vector; 引用标识:在相关段落末尾添加[^1]或[^2]。由于引用是提供的,我可以使用它们作为来源。 生成相关问题: - 例如:如何测试pgvector?pgvector的优势是什么?等。 最终回答框架: - 标题或开头。 - 逐步安装指南。 - 代码块(如果需要)。 - 相关问题。 避免数学表达式,除非必要。用户查询中没有数学内容,所以可能不需要。 确保LaTeX正确:如果用到数学,格式正确。 现在,构建内容。 </think> ### PostgreSQL与pgvector插件安装指南 以下基于可靠来源[^1][^2],我将逐步说明如何在Linux系统上安装PostgreSQL数据库及其向量数据插件pgvector。pgvector是一个高性能扩展,支持向量相似度搜索(如欧氏距离计算:$d(\mathbf{a}, \mathbf{b}) = \sqrt{\sum_{i=1}^n (a_i - b_i)^2}$),常用于AI和机器学习场景。安装过程包括PostgreSQL基础安装和pgvector插件编译启用,全程需root权限。 #### 步骤1: 安装PostgreSQL数据库 PostgreSQL是开源关系型数据库,pgvector依赖其运行。以PostgreSQL 14.0为例(兼容多数Linux发行版): 1. **下载安装包** 访问[PostgreSQL官网](https://www.postgresql.org/download/)下载源码包(如`postgresql-14.0.tar.gz`),或使用包管理器: ```bash # Ubuntu/Debian sudo apt update sudo apt install postgresql postgresql-contrib ``` 在Red Hat/CentOS上,使用`yum install postgresql-server`。 2. **创建系统用户** PostgreSQL需要一个专用用户: ```bash sudo useradd postgres # 创建用户 sudo passwd postgres # 设置密码(可选) ``` 3. **解压与编译安装** 如果是源码安装: ```bash tar -xzvf postgresql-14.0.tar.gz cd postgresql-14.0 ./configure --prefix=/usr/local/pgsql # 指定安装路径 make sudo make install ``` 安装完成后,初始化数据库: ```bash sudo /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data sudo /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start ``` 4. **验证PostgreSQL** 检查服务状态: ```bash sudo systemctl status postgresql # 或使用 ps aux | grep postgres ``` 连接数据库: ```bash sudo -u postgres psql -c "SELECT version();" # 应显示版本信息 #### 步骤2: 安装pgvector插件 pgvector为PostgreSQL添加向量存储和相似度搜索功能,支持高效近似最近邻(ANN)算法。 1. **克隆源码** 从GitHub获取pgvector仓库: ```bash git clone https://github.com/pgvector/pgvector.git cd pgvector ``` 2. **编译与安装** 使用make工具编译插件: ```bash make # 编译 sudo make install # 安装到PostgreSQL扩展目录 ``` 如果报错(如缺少头文件),请安装依赖: ```bash sudo apt install build-essential postgresql-server-dev-14 # Ubuntu示例 ``` 3. **在PostgreSQL中启用扩展** 启动pgsql命令行并创建扩展: ```bash sudo -u postgres psql # 进入交互式终端 ``` 在psql终端内执行: ```sql CREATE EXTENSION vector; -- 启用pgvector SELECT * FROM pg_extension WHERE extname = 'vector'; -- 验证安装,应返回扩展信息[^2] ``` 4. **测试向量功能** 创建一个向量表并计算相似度: ```sql CREATE TABLE items (id serial PRIMARY KEY, embedding vector(3)); INSERT INTO items (embedding) VALUES ('[1,2,3]'), ('[4,5,6]'); SELECT id, embedding <-> '[3,1,2]' AS distance FROM items ORDER BY distance LIMIT 1; -- 输出最近邻结果(距离公式:$\|\mathbf{a} - \mathbf{b}\|$) ``` #### 常见问题解决 - **安装失败**:确保gcc、make和PostgreSQL开发包已安装(如`postgresql-server-dev-xx`)。 - **权限错误**:使用`sudo -u postgres`运行命令,避免权限冲突。 - **扩展未加载**:检查PostgreSQL日志(`/var/log/postgresql/*.log`)。 安装完成后,您可以使用pgvector存储和查询高维向量数据(例如,在推荐系统或图像检索中)。更多配置详见[pgvector官方文档](https://github.com/pgvector/pgvector)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值