文章目次
- PostgreSQL 向量扩展插件pgvector安装和使用
- 安装postgresql
- pgvector下载和安装
- 安装错误调试
- 错误调试1
- 错误调试2
- 实验解决 AP2 : 使用apt-get install postgresql-server
- 错误调试3
- 错误调试4
- 编译成功
- 使用pgvector
- 测试例
- 列出当前数据库中已安装的扩展(extensions)
- 参考
PostgreSQL 向量扩展插件pgvector安装和使用
pgvector 是一个 PostgreSQL 扩展,可以或许让PostgreSQL 提供向量(vector)数据类型和相关操纵功能。
参考:
https://github.com/pgvector/pgvector
安装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 refused
- Is the server running locally and accepting connections on that socket?
- postgres@autodl-container-616f40a3b3-41cb82d9:~/pgvector$
- postgres@autodl-container-616f40a3b3-41cb82d9:~$ ps -xf|grep postgres
- 1504 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
复制代码 实验解决 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 postgres
- 1197 pts/0 S+ 0:00 _ grep postgres
- 1188 ? Ss 0:00 /var/lib/postgresql/pgsql16/bin/postgres -D /var/lib/postgresql/pgsql16/data
- 1189 ? 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 。
实验解决 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版本。
例:
修改成如下内容。
- # .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 dimensions
- CREATE TABLE items (id bigserial PRIMARY KEY, embedding vector(3));
- Insert vectors
- INSERT INTO items (embedding) VALUES ('[1,2,3]'), ('[4,5,6]');
- Get the nearest neighbors by L2 distance
- SELECT * 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=# dx
- List of installed extensions
- Name | Version | Schema | Description
- ---------+---------+------------+------------------------------------------------------
- plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
- vector | 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
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |