PostgreSQL 向量扩展插件pgvector安装和使用

news/2024/12/23 5:46:17/

文章目录

  • PostgreSQL 向量扩展插件pgvector安装和使用
    • 安装postgresql
    • pgvector下载和安装
    • 安装错误调试
      • 错误调试1
      • 错误调试2
        • 尝试解决 AP2 : 使用apt-get install postgresql-server
      • 错误调试3
        • 尝试解决 AP3 :卸载apt-get 安装
      • 错误调试4
        • 设置环境变量PG_CONFIG
      • 编译成功
    • 使用pgvector
      • 测试例
      • 列出当前数据库中已安装的扩展(extensions)
  • 参考

PostgreSQL 向量扩展插件pgvector安装和使用

pgvector 是一个 PostgreSQL 扩展,能够让PostgreSQL 提供向量(vector)数据类型和相关操作功能。

参考:
https://github.com/pgvector/pgvector

postgresql_7">安装postgresql

利用pgvector 前提是事先安装好postgresql,安装postgresql例可参考下文。

参考:
Linux(Ubuntu)源码安装postgresql16.3
https://editor.csdn.net/md/?articleId=142500497

pgvector下载和安装

安装命令如下:

cd 
git clone --branch v0.7.4 https://github.com/pgvector/pgvector.git
cd pgvector
make
make install # may need sudo

参考:
https://github.com/pgvector/pgvector

例:下载

root@autodl-container-616f40a3b3-41cb82d9:~#  su - postgres
postgres@autodl-container-616f40a3b3-41cb82d9:~$ pwd
/var/lib/postgresql
postgres@autodl-container-616f40a3b3-41cb82d9:~$ ls
10  pgsql16  postgresql-16.3  postgresql-16.3.tar.gz
postgres@autodl-container-616f40a3b3-41cb82d9:~$ git clone --branch v0.7.4 https://github.com/pgvector/pgvector.git
Cloning into 'pgvector'...
remote: Enumerating objects: 10650, done.
remote: Counting objects: 100% (4165/4165), done.
remote: Compressing objects: 100% (954/954), done.
remote: Total 10650 (delta 3388), reused 3493 (delta 3193), pack-reused 6485 (from 1)
Receiving objects: 100% (10650/10650), 1.60 MiB | 544.00 KiB/s, done.
Resolving deltas: 100% (7952/7952), done.
Note: checking out '103ac50f1a90b47a72003e8e8628a55ec372f202'.You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:git checkout -b <new-branch-name>postgres@autodl-container-616f40a3b3-41cb82d9:~$

安装错误调试

错误调试1

尝试编译和安装
例:

postgres@autodl-container-616f40a3b3-41cb82d9:~/pgvector$ make
You need to install postgresql-server-dev-X.Y for building a server-side extension or libpq-dev for building a client-side application.
cp sql/vector.sql sql/vector--0.7.4.sql

编译时候汇报如上错误可能是由于postgresql没有启动。

postgres@autodl-container-616f40a3b3-41cb82d9:~/pgvector$ psql
psql: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: Connection refusedIs the server running locally and accepting connections on that socket?
postgres@autodl-container-616f40a3b3-41cb82d9:~/pgvector$ 
postgres@autodl-container-616f40a3b3-41cb82d9:~$ ps -xf|grep postgres1504 pts/3    S+     0:00  \_ grep postgres
postgres@autodl-container-616f40a3b3-41cb82d9:~$ pg_ctl -D /var/lib/postgresql/pgsql16/data status
pg_ctl: no server running
postgresql_79">尝试解决 AP1 :启动postgresql
postgres@autodl-container-616f40a3b3-41cb82d9:~$ pg_ctl -D /var/lib/postgresql/pgsql16/data -l logfile start
pg_ctl: another server might be running; trying to start server anyway
waiting for server to start.... done
server started
postgres@autodl-container-616f40a3b3-41cb82d9:~$  ps -xf|grep postgres1197 pts/0    S+     0:00  \_ grep postgres1188 ?        Ss     0:00 /var/lib/postgresql/pgsql16/bin/postgres -D /var/lib/postgresql/pgsql16/data1189 ?        Ss     0:00  \_ postgres: checkpointer 1190 ?        Ss     0:00  \_ postgres: background writer 1192 ?        Ss     0:00  \_ postgres: walwriter 1193 ?        Ss     0:00  \_ postgres: autovacuum launcher 1194 ?        Ss     0:00  \_ postgres: logical replication launcher 
postgres@autodl-container-616f40a3b3-41cb82d9:~$  psql
psql (16.3)
Type "help" for help.postgres=# help
You are using psql, the command-line interface to PostgreSQL.
Type:  \copyright for distribution terms\h for help with SQL commands\? for help with psql commands\g or terminate with semicolon to execute query\q to quit
postgres=# 

错误调试2

再次编译,出错。

postgres@autodl-container-616f40a3b3-41cb82d9:~$ pwd
/var/lib/postgresql
postgres@autodl-container-616f40a3b3-41cb82d9:~$ cd pgvector
postgres@autodl-container-616f40a3b3-41cb82d9:~/pgvector$ 
postgres@autodl-container-616f40a3b3-41cb82d9:~/pgvector$ make
You need to install postgresql-server-dev-X.Y for building a server-side extension or libpq-dev for building a client-side application.
make: Nothing to be done for 'all'.
postgres@autodl-container-616f40a3b3-41cb82d9:~/pgvector$ postgres --version
postgres (PostgreSQL) 16.3
postgres@autodl-container-616f40a3b3-41cb82d9:~/pgvector$ psql --version
psql (PostgreSQL) 16.3

无法识别postgresql-server-dev-X.Y 。

postgresqlserver_126">尝试解决 AP2 : 使用apt-get install postgresql-server
postgres@autodl-container-616f40a3b3-41cb82d9:~/pgvector$ apt-get install postgresql-server*
E: Could not open lock file /var/lib/dpkg/lock-frontend - open (13: Permission denied)
E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), are you root?
postgres@autodl-container-616f40a3b3-41cb82d9:~/pgvector$ exit
logout
root@autodl-container-616f40a3b3-41cb82d9:~# apt-get install postgresql-server*
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Note, selecting 'postgresql-server-dev-all' for glob 'postgresql-server*'
Note, selecting 'postgresql-server' for glob 'postgresql-server*'
Note, selecting 'postgresql-server-dev-10' for glob 'postgresql-server*'
The following additional packages will be installed:dctrl-tools iproute2 libatm1 libmnl0 libpq-dev libxtables12
Suggested packages:debtags iproute2-doc postgresql-doc-10
The following NEW packages will be installed:dctrl-tools iproute2 libatm1 libmnl0 libpq-dev libxtables12 postgresql-server-dev-10 postgresql-server-dev-all
0 upgraded, 8 newly installed, 0 to remove and 169 not upgraded.
Need to get 1983 kB of archives.
After this operation, 10.9 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
Get:1 https://repo.huaweicloud.com/ubuntu bionic/main amd64 libmnl0 amd64 1.0.4-2 [12.3 kB]
Get:2 https://repo.huaweicloud.com/ubuntu bionic-updates/main amd64 iproute2 amd64 4.15.0-2ubuntu1.3 [721 kB]
Get:3 https://repo.huaweicloud.com/ubuntu bionic/main amd64 libatm1 amd64 1:2.5.1-2build1 [21.9 kB]
Get:4 https://repo.huaweicloud.com/ubuntu bionic-updates/main amd64 libxtables12 amd64 1.6.1-2ubuntu2.1 [28.1 kB]
Get:5 https://repo.huaweicloud.com/ubuntu bionic/main amd64 dctrl-tools amd64 2.24-2build1 [60.9 kB]
Get:6 https://repo.huaweicloud.com/ubuntu bionic-security/main amd64 libpq-dev amd64 10.23-0ubuntu0.18.04.2 [219 kB]
Get:7 https://repo.huaweicloud.com/ubuntu bionic-security/universe amd64 postgresql-server-dev-10 amd64 10.23-0ubuntu0.18.04.2 [905 kB]
Get:8 https://repo.huaweicloud.com/ubuntu bionic-security/universe amd64 postgresql-server-dev-all all 190ubuntu0.1 [14.1 kB]
Fetched 1983 kB in 1s (3436 kB/s)                     
debconf: delaying package configuration, since apt-utils is not installed
Selecting previously unselected package libmnl0:amd64.
(Reading database ... 44409 files and directories currently installed.)
Preparing to unpack .../0-libmnl0_1.0.4-2_amd64.deb ...
Unpacking libmnl0:amd64 (1.0.4-2) ...
Selecting previously unselected package iproute2.
Preparing to unpack .../1-iproute2_4.15.0-2ubuntu1.3_amd64.deb ...
Unpacking iproute2 (4.15.0-2ubuntu1.3) ...
Selecting previously unselected package libatm1:amd64.
Preparing to unpack .../2-libatm1_1%3a2.5.1-2build1_amd64.deb ...
Unpacking libatm1:amd64 (1:2.5.1-2build1) ...
Selecting previously unselected package libxtables12:amd64.
Preparing to unpack .../3-libxtables12_1.6.1-2ubuntu2.1_amd64.deb ...
Unpacking libxtables12:amd64 (1.6.1-2ubuntu2.1) ...
Selecting previously unselected package dctrl-tools.
Preparing to unpack .../4-dctrl-tools_2.24-2build1_amd64.deb ...
Unpacking dctrl-tools (2.24-2build1) ...
Selecting previously unselected package libpq-dev.
Preparing to unpack .../5-libpq-dev_10.23-0ubuntu0.18.04.2_amd64.deb ...
Unpacking libpq-dev (10.23-0ubuntu0.18.04.2) ...
Selecting previously unselected package postgresql-server-dev-10.
Preparing to unpack .../6-postgresql-server-dev-10_10.23-0ubuntu0.18.04.2_amd64.deb ...
Unpacking postgresql-server-dev-10 (10.23-0ubuntu0.18.04.2) ...
Selecting previously unselected package postgresql-server-dev-all.
Preparing to unpack .../7-postgresql-server-dev-all_190ubuntu0.1_all.deb ...
Unpacking postgresql-server-dev-all (190ubuntu0.1) ...
Setting up libpq-dev (10.23-0ubuntu0.18.04.2) ...
Setting up dctrl-tools (2.24-2build1) ...
Setting up postgresql-server-dev-10 (10.23-0ubuntu0.18.04.2) ...
Setting up libatm1:amd64 (1:2.5.1-2build1) ...
Setting up libxtables12:amd64 (1.6.1-2ubuntu2.1) ...
Setting up libmnl0:amd64 (1.0.4-2) ...
Setting up iproute2 (4.15.0-2ubuntu1.3) ...
Setting up postgresql-server-dev-all (190ubuntu0.1) ...
Processing triggers for libc-bin (2.27-3ubuntu1.2) ...
root@autodl-container-616f40a3b3-41cb82d9:~# 

安装的版本不是最新的版本而是10.23。

错误调试3

再次编译。


postgres@autodl-container-616f40a3b3-41cb82d9:~/pgvector$ make
gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -g -g -O2 -fdebug-prefix-map=/build/postgresql-10-XHR5kl/postgresql-10-10.23=. -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -march=native -ftree-vectorize -fassociative-math -fno-signed-zeros -fno-trapping-math -fPIC -I. -I./ -I/usr/include/postgresql/10/server -I/usr/include/postgresql/internal  -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2  -I/usr/include/mit-krb5  -c -o src/bitutils.o src/bitutils.c
In file included from src/bitutils.c:3:0:
src/bitutils.h:8:2: error: #error "Requires PostgreSQL 12+"#error "Requires PostgreSQL 12+"^~~~~
src/bitutils.c:5:10: fatal error: port/pg_bitutils.h: No such file or directory#include "port/pg_bitutils.h"^~~~~~~~~~~~~~~~~~~~
compilation terminated.
<builtin>: recipe for target 'src/bitutils.o' failed
make: *** [src/bitutils.o] Error 1
postgres@autodl-container-616f40a3b3-41cb82d9:~/pgvector$ 

make编译调用的postgresql不是之前安装的 16.3,而是apt-get 安装的10.23版本。

尝试解决 AP3 :卸载apt-get 安装

卸载apt-get 安装的10.23版本

参考:
卸载apt-get 安装的PostgreSQL版本
https://blog.csdn.net/lukeUnique/article/details/142610650

错误调试4

再次编译。

root@autodl-container-616f40a3b3-41cb82d9:~# su - postgres
postgres@autodl-container-616f40a3b3-41cb82d9:~$ cd /var/lib/postgresql/pgvector
postgres@autodl-container-616f40a3b3-41cb82d9:~/pgvector$ ls
CHANGELOG.md  Dockerfile  LICENSE  META.json  Makefile  Makefile.win  README.md  logfile  sql  src  test  vector.control
postgres@autodl-container-616f40a3b3-41cb82d9:~/pgvector$ make
Makefile:48: /usr/lib/postgresql/10/lib/pgxs/src/makefiles/pgxs.mk: No such file or directory
make: *** No rule to make target '/usr/lib/postgresql/10/lib/pgxs/src/makefiles/pgxs.mk'.  Stop.
postgres@autodl-container-616f40a3b3-41cb82d9:~/pgvector$ 

make编译pgvector时无法识别安装的postgresql

设置环境变量PG_CONFIG

为了让make命令找到安装的postgresql 16.3版本。
重新修改.bash_profile,配置PG_CONFIG和LD_LIBRARY_PATH,指定安装的postgresql 16.3版本。

例:

$ vi .bash_profile

修改成如下内容。

# .bash_profile# Get the aliases and functions
if [ -f ~/.bashrc ]; then. ~/.bashrc
fi# User specific environment and startup programs
export PG_HOME=/var/lib/postgresql/pgsql16
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/var/lib/postgresql/pgsql16/lib
export PG_CONFIG=/var/lib/postgresql/pgsql16/bin/pg_config
export PGDATA=/var/lib/postgresql/pgsql16/data
PATH=$PATH:$HOME/.local/bin:$HOME/bin:$PG_HOME/bin
alias psql='/var/lib/postgresql/pgsql16/bin/psql'
export PATH

编译成功

根据上面的错误调试过程,我们可以看到在编译时候需要配置PG_CONFIG。

root@autodl-container-616f40a3b3-41cb82d9:~# su - postgres
postgres@autodl-container-616f40a3b3-41cb82d9:~$ ls
logfile  pgsql16  pgvector  postgresql-16.3  postgresql-16.3.tar.gz
postgres@autodl-container-616f40a3b3-41cb82d9:~$ cd pgvector
postgres@autodl-container-616f40a3b3-41cb82d9:~/pgvector$ ls
CHANGELOG.md  Dockerfile  LICENSE  META.json  Makefile  Makefile.win  README.md  logfile  sql  src  test  vector.control
postgres@autodl-container-616f40a3b3-41cb82d9:~/pgvector$ make
gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -O2 -march=native -ftree-vectorize -fassociative-math -fno-signed-zeros -fno-trapping-math -fPIC -fvisibility=hidden -I. -I./ -I/var/lib/postgresql/pgsql16/include/server -I/var/lib/postgresql/pgsql16/include/internal  -D_GNU_SOURCE   -c -o src/bitutils.o src/bitutils.c
gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -O2 -march=native -ftree-vectorize -fassociative-math -fno-signed-zeros -fno-trapping-math -fPIC -fvisibility=hidden -I. -I./ -I/var/lib/postgresql/pgsql16/include/server -I/var/lib/postgresql/pgsql16/include/internal  -D_GNU_SOURCE   -c -o src/bitvec.o src/bitvec.c
gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -O2 -march=native -ftree-vectorize -fassociative-math -fno-signed-zeros -fno-trapping-math -fPIC -fvisibility=hidden -I. -I./ -I/var/lib/postgresql/pgsql16/include/server -I/var/lib/postgresql/pgsql16/include/internal  -D_GNU_SOURCE   -c -o src/halfutils.o src/halfutils.c
gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -O2 -march=native -ftree-vectorize -fassociative-math -fno-signed-zeros -fno-trapping-math -fPIC -fvisibility=hidden -I. -I./ -I/var/lib/postgresql/pgsql16/include/server -I/var/lib/postgresql/pgsql16/include/internal  -D_GNU_SOURCE   -c -o src/halfvec.o src/halfvec.c
gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -O2 -march=native -ftree-vectorize -fassociative-math -fno-signed-zeros -fno-trapping-math -fPIC -fvisibility=hidden -I. -I./ -I/var/lib/postgresql/pgsql16/include/server -I/var/lib/postgresql/pgsql16/include/internal  -D_GNU_SOURCE   -c -o src/hnsw.o src/hnsw.c
gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -O2 -march=native -ftree-vectorize -fassociative-math -fno-signed-zeros -fno-trapping-math -fPIC -fvisibility=hidden -I. -I./ -I/var/lib/postgresql/pgsql16/include/server -I/var/lib/postgresql/pgsql16/include/internal  -D_GNU_SOURCE   -c -o src/hnswbuild.o src/hnswbuild.c
gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -O2 -march=native -ftree-vectorize -fassociative-math -fno-signed-zeros -fno-trapping-math -fPIC -fvisibility=hidden -I. -I./ -I/var/lib/postgresql/pgsql16/include/server -I/var/lib/postgresql/pgsql16/include/internal  -D_GNU_SOURCE   -c -o src/hnswinsert.o src/hnswinsert.c
gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -O2 -march=native -ftree-vectorize -fassociative-math -fno-signed-zeros -fno-trapping-math -fPIC -fvisibility=hidden -I. -I./ -I/var/lib/postgresql/pgsql16/include/server -I/var/lib/postgresql/pgsql16/include/internal  -D_GNU_SOURCE   -c -o src/hnswscan.o src/hnswscan.c
gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -O2 -march=native -ftree-vectorize -fassociative-math -fno-signed-zeros -fno-trapping-math -fPIC -fvisibility=hidden -I. -I./ -I/var/lib/postgresql/pgsql16/include/server -I/var/lib/postgresql/pgsql16/include/internal  -D_GNU_SOURCE   -c -o src/hnswutils.o src/hnswutils.c
gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -O2 -march=native -ftree-vectorize -fassociative-math -fno-signed-zeros -fno-trapping-math -fPIC -fvisibility=hidden -I. -I./ -I/var/lib/postgresql/pgsql16/include/server -I/var/lib/postgresql/pgsql16/include/internal  -D_GNU_SOURCE   -c -o src/hnswvacuum.o src/hnswvacuum.c
gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -O2 -march=native -ftree-vectorize -fassociative-math -fno-signed-zeros -fno-trapping-math -fPIC -fvisibility=hidden -I. -I./ -I/var/lib/postgresql/pgsql16/include/server -I/var/lib/postgresql/pgsql16/include/internal  -D_GNU_SOURCE   -c -o src/ivfbuild.o src/ivfbuild.c
gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -O2 -march=native -ftree-vectorize -fassociative-math -fno-signed-zeros -fno-trapping-math -fPIC -fvisibility=hidden -I. -I./ -I/var/lib/postgresql/pgsql16/include/server -I/var/lib/postgresql/pgsql16/include/internal  -D_GNU_SOURCE   -c -o src/ivfflat.o src/ivfflat.c
gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -O2 -march=native -ftree-vectorize -fassociative-math -fno-signed-zeros -fno-trapping-math -fPIC -fvisibility=hidden -I. -I./ -I/var/lib/postgresql/pgsql16/include/server -I/var/lib/postgresql/pgsql16/include/internal  -D_GNU_SOURCE   -c -o src/ivfinsert.o src/ivfinsert.c
gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -O2 -march=native -ftree-vectorize -fassociative-math -fno-signed-zeros -fno-trapping-math -fPIC -fvisibility=hidden -I. -I./ -I/var/lib/postgresql/pgsql16/include/server -I/var/lib/postgresql/pgsql16/include/internal  -D_GNU_SOURCE   -c -o src/ivfkmeans.o src/ivfkmeans.c
gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -O2 -march=native -ftree-vectorize -fassociative-math -fno-signed-zeros -fno-trapping-math -fPIC -fvisibility=hidden -I. -I./ -I/var/lib/postgresql/pgsql16/include/server -I/var/lib/postgresql/pgsql16/include/internal  -D_GNU_SOURCE   -c -o src/ivfscan.o src/ivfscan.c
gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -O2 -march=native -ftree-vectorize -fassociative-math -fno-signed-zeros -fno-trapping-math -fPIC -fvisibility=hidden -I. -I./ -I/var/lib/postgresql/pgsql16/include/server -I/var/lib/postgresql/pgsql16/include/internal  -D_GNU_SOURCE   -c -o src/ivfutils.o src/ivfutils.c
gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -O2 -march=native -ftree-vectorize -fassociative-math -fno-signed-zeros -fno-trapping-math -fPIC -fvisibility=hidden -I. -I./ -I/var/lib/postgresql/pgsql16/include/server -I/var/lib/postgresql/pgsql16/include/internal  -D_GNU_SOURCE   -c -o src/ivfvacuum.o src/ivfvacuum.c
gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -O2 -march=native -ftree-vectorize -fassociative-math -fno-signed-zeros -fno-trapping-math -fPIC -fvisibility=hidden -I. -I./ -I/var/lib/postgresql/pgsql16/include/server -I/var/lib/postgresql/pgsql16/include/internal  -D_GNU_SOURCE   -c -o src/sparsevec.o src/sparsevec.c
gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -O2 -march=native -ftree-vectorize -fassociative-math -fno-signed-zeros -fno-trapping-math -fPIC -fvisibility=hidden -I. -I./ -I/var/lib/postgresql/pgsql16/include/server -I/var/lib/postgresql/pgsql16/include/internal  -D_GNU_SOURCE   -c -o src/vector.o src/vector.c
gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -O2 -march=native -ftree-vectorize -fassociative-math -fno-signed-zeros -fno-trapping-math -fPIC -fvisibility=hidden -shared -o vector.so src/bitutils.o src/bitvec.o src/halfutils.o src/halfvec.o src/hnsw.o src/hnswbuild.o src/hnswinsert.o src/hnswscan.o src/hnswutils.o src/hnswvacuum.o src/ivfbuild.o src/ivfflat.o src/ivfinsert.o src/ivfkmeans.o src/ivfscan.o src/ivfutils.o src/ivfvacuum.o src/sparsevec.o src/vector.o -L/var/lib/postgresql/pgsql16/lib    -Wl,--as-needed -Wl,-rpath,'/var/lib/postgresql/pgsql16/lib',--enable-new-dtags  -fvisibility=hidden 
postgres@autodl-container-616f40a3b3-41cb82d9:~/pgvector$ 

make install

postgres@autodl-container-616f40a3b3-41cb82d9:~/pgvector$  make install
/bin/mkdir -p '/var/lib/postgresql/pgsql16/lib'
/bin/mkdir -p '/var/lib/postgresql/pgsql16/share/extension'
/bin/mkdir -p '/var/lib/postgresql/pgsql16/share/extension'
/usr/bin/install -c -m 755  vector.so '/var/lib/postgresql/pgsql16/lib/vector.so'
/usr/bin/install -c -m 644 .//vector.control '/var/lib/postgresql/pgsql16/share/extension/'
/usr/bin/install -c -m 644 .//sql/vector--0.5.0--0.5.1.sql .//sql/vector--0.1.3--0.1.4.sql .//sql/vector--0.1.1--0.1.3.sql .//sql/vector--0.4.3--0.4.4.sql .//sql/vector--0.1.7--0.1.8.sql .//sql/vector--0.2.0--0.2.1.sql .//sql/vector--0.1.5--0.1.6.sql .//sql/vector--0.5.1--0.6.0.sql .//sql/vector--0.3.1--0.3.2.sql .//sql/vector--0.1.8--0.2.0.sql .//sql/vector--0.2.6--0.2.7.sql .//sql/vector--0.3.0--0.3.1.sql .//sql/vector--0.4.2--0.4.3.sql .//sql/vector--0.6.2--0.7.0.sql .//sql/vector--0.1.4--0.1.5.sql .//sql/vector--0.2.7--0.3.0.sql .//sql/vector--0.6.0--0.6.1.sql .//sql/vector--0.4.1--0.4.2.sql .//sql/vector--0.7.3--0.7.4.sql .//sql/vector--0.4.0--0.4.1.sql .//sql/vector--0.7.1--0.7.2.sql .//sql/vector--0.1.0--0.1.1.sql .//sql/vector--0.2.3--0.2.4.sql .//sql/vector--0.1.6--0.1.7.sql .//sql/vector--0.3.2--0.4.0.sql .//sql/vector--0.2.5--0.2.6.sql .//sql/vector--0.4.4--0.5.0.sql .//sql/vector--0.2.1--0.2.2.sql .//sql/vector--0.7.2--0.7.3.sql .//sql/vector--0.7.0--0.7.1.sql .//sql/vector--0.2.2--0.2.3.sql .//sql/vector--0.6.1--0.6.2.sql .//sql/vector--0.2.4--0.2.5.sql sql/vector--0.7.4.sql '/var/lib/postgresql/pgsql16/share/extension/'
/bin/mkdir -p '/var/lib/postgresql/pgsql16/include/server/extension/vector/'
/usr/bin/install -c -m 644   .//src/halfvec.h .//src/sparsevec.h .//src/vector.h '/var/lib/postgresql/pgsql16/include/server/extension/vector/'
postgres@autodl-container-616f40a3b3-41cb82d9:~/pgvector$ 

pgvector的安装成功。

使用pgvector

使用参考https://github.com/pgvector/pgvector

Getting Started
Enable the extension (do this once in each database where you want to use it)CREATE EXTENSION vector;
Create a vector column with 3 dimensionsCREATE TABLE items (id bigserial PRIMARY KEY, embedding vector(3));
Insert vectorsINSERT INTO items (embedding) VALUES ('[1,2,3]'), ('[4,5,6]');
Get the nearest neighbors by L2 distanceSELECT * FROM items ORDER BY embedding <-> '[3,1,2]' LIMIT 5;
Also supports inner product (<#>), cosine distance (<=>), and L1 distance (<+>, added in 0.7.0)Note: <#> returns the negative inner product since Postgres only supports ASC order index scans on operators

测试例

postgres@autodl-container-616f40a3b3-41cb82d9:~/pgvector$ psql
psql (16.3)
Type "help" for help.postgres=# CREATE EXTENSION vector;
CREATE EXTENSION
postgres=# CREATE TABLE items (id bigserial PRIMARY KEY, embedding vector(3));
CREATE TABLE
postgres=# INSERT INTO items (embedding) VALUES ('[1,2,3]'), ('[4,5,6]');
INSERT 0 2
postgres=# SELECT * FROM items ORDER BY embedding <-> '[3,1,2]' LIMIT 5;id | embedding 
----+-----------1 | [1,2,3]2 | [4,5,6]
(2 rows)

列出当前数据库中已安装的扩展(extensions)


postgres=# \dxList of installed extensionsName   | Version |   Schema   |                     Description                      
---------+---------+------------+------------------------------------------------------plpgsql | 1.0     | pg_catalog | PL/pgSQL procedural languagevector  | 0.7.4   | public     | vector data type and ivfflat and hnsw access methods
(2 rows)postgres=# 

参考

实战PG vector 构建DBA 个人知识库之二: 向量数据库与 PG vector 介绍
https://pgfans.cn/a/3606

数据库技术核心:向量检索(pgvector)
https://blog.csdn.net/ChaoMing_H/article/details/141257149

PostgreSQL向量数据插件–pgvector安装(附PostgreSQL安装)
https://blog.csdn.net/m0_62627802/article/details/135027327


http://www.ppmy.cn/news/1533214.html

相关文章

修改Kali Linux的镜像网站

由于官方的镜像可能会出现连接不上的问题导致无法安装我们所需要的包&#xff0c;所以需要切换镜像站为国内的&#xff0c;以下是一些国内常用的Kali Linux镜像网站&#xff0c;它们提供了与Kali Linux官方网站相同的软件包和资源&#xff0c;但访问速度更快&#xff1a; #官方…

前端框架对比和选择:Vue、React 和 Angular 谁更适合你的项目?

随着前端开发的迅速发展&#xff0c;前端框架已经成为现代Web开发中不可或缺的一部分。对于开发者来说&#xff0c;选择合适的前端框架不仅影响开发效率&#xff0c;也决定了项目的维护成本和用户体验。本文将对当前最流行的三大前端框架——Vue、React 和 Angular——进行详细…

linux修改命令别名的方式

文章目录 一、临时修改二、永久修改三、针对特定用户永久修改 一、临时修改 以ls -a命令为例&#xff1a; [rootmysql ~]# alias lals -a [rootmysql ~]# la . 1.sh .bash_logout .bashrc .cshrc .mysql_history .tcshrc .. .bash_history .bash_profil…

分布式数据库在老乡鸡餐饮中的技术实践与应用案例

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云/阿里云/华为云/51CTO&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互…

微信小程序的 button 标签的边框如何去除?

目录 问题描述&#xff1a; 问题原因&#xff1a; 解决办法&#xff1a; 方案一 方案二 问题描述&#xff1a; 实际开发中会发现这个 button 自带有样式&#xff0c;当背景颜色设置为白色的时候还有一个黑色的边框&#xff0c;刚开始那个边框怎么都去不掉 无法去除的边框…

33. java快速排序

1. 前言 排序算法是数据结构中最基础的算法,快速排序则是面试中最常见的排序算法。无论是校招面试还是社招面试,快速排序算法的出现频率远高于其他算法,而且经常会要求候选人白板手写实现算法。快速排序算法的核心是分治处理,重点是分析时间复杂度。 2. 快速排序算法 面试…

CSS 中 object-fit 的 cover 和 contain

前言&#xff1a;object-fit 属性用于指定可替换元素&#xff08;如<img>、<video>等&#xff09;如何适应其容器。 一、视觉效果 1. object-fit: cover 此值会使被替换元素完全覆盖容器&#xff0c;同时保持其宽高比。这意味着元素可能会被裁剪以适应容器的尺寸…

深入 Spring RestTemplate 源码:掌握 HTTP 通信核心技术

在上一篇文章《Spring Boot 项目高效 HTTP 通信&#xff1a;常用客户端大比拼&#xff01;》里&#xff0c;我们提到了RestTemplate&#xff0c;它是Spring框架提供的Http客户端&#xff0c;在springboot项目开发过程中&#xff0c;属于使用最为广泛的 HTTP 客户端之一了。今天…