PostgreSQL 向量擴展插件pgvector安裝和使用
pgvector 是一個 PostgreSQL 擴展,能夠讓PostgreSQL 提供向量(vector)數(shù)據(jù)類型和相關操作功能。
參考:
https://github.com/pgvector/pgvector
安裝postgresql
利用pgvector 前提是事先安裝好postgresql,安裝教程http://www.fzitv.net/database/3403160iv.htm
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版本
錯誤調試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。
設置環(huán)境變量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編譯成功
根據(jù)上面的錯誤調試過程,我們可以看到在編譯時候需要配置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)
列出當前數(shù)據(jù)庫中已安裝的擴展(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=#
到此這篇關于PostgreSQL 向量擴展插件pgvector安裝和使用的文章就介紹到這了,更多相關PostgreSQL pgvector安裝內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
CentOS 7下安裝PostgreSQL 9.6的教程分享
PostgreSQL在我心目中的地位要遠遠高于MySQL,雖然流行對比MySQL低很對,但是功能性一致走在MySQL的前面。下面這篇文章主要介紹了CentOS 7下安裝PostgreSQL數(shù)據(jù)庫的方法,需要的朋友可以參考借鑒,一起來看看吧。2017-02-02
PostgreSQL數(shù)據(jù)庫從入門到精通實戰(zhàn)
這是一份詳細的PostgreSQL數(shù)據(jù)庫使用指南,涵蓋了核心概念、安裝、基本操作、高級功能、管理與維護、安全、復制與高可用等多個方面,幫助用戶從入門到精通PostgreSQL數(shù)據(jù)庫,這份指南提供了 PostgreSQL的全面概覽和核心實踐,感興趣的朋友跟隨小編一起看看吧2026-01-01
Visual Studio Code(VS Code)查詢PostgreSQL拓展安裝教程圖解
這篇文章主要介紹了Visual Studio Code(VS Code)查詢PostgreSQL拓展安裝教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01
PostgreSQL 序列(Sequence) 與 Oracle 序列對比差異分
PostgreSQL 和 Oracle 都提供了序列(Sequence)功能,但在實現(xiàn)細節(jié)和使用方式上存在一些重要差異,下面給大家介紹PostgreSQL 序列(Sequence) 與 Oracle 序列對比差異分析,感興趣的朋友一起看看吧2025-05-05
postgres 使用存儲過程批量插入數(shù)據(jù)的操作
這篇文章主要介紹了postgres 使用存儲過程批量插入數(shù)據(jù)的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02
PostgreSQL使用MySQL外表的步驟詳解(mysql_fdw)
這篇文章主要介紹了PostgreSQL使用MySQL外表的步驟(mysql_fdw),本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01

