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

06-01 1105阅读
文章目录
  • PostgreSQL 向量扩展插件pgvector安装和使用
    • 安装postgresql
    • pgvector下载和安装
    • 安装错误调试
      • 错误调试1
        • 尝试解决 AP1 :启动postgresql
        • 错误调试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

                  利用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 
                  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

                  再次编译,出错。

                  PostgreSQL 向量扩展插件pgvector安装和使用
                  (图片来源网络,侵删)
                  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。

                  PostgreSQL 向量扩展插件pgvector安装和使用
                  (图片来源网络,侵删)
                  错误调试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.
                  : 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版本。

                  PostgreSQL 向量扩展插件pgvector安装和使用
                  (图片来源网络,侵删)
                  尝试解决 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 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

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

目录[+]

取消
微信二维码
微信二维码
支付宝二维码