目录
一、PostgreSQL安装
1、下载
2、安装
二、PostgreSQL操作
1、数据库操作
2、表操作
3、数据操作
本章节以windows系统安装为例,讲解PostgreSQL 15.0的安装过程。
访问PostgreSQL官方网站,下载对应的安装包,也可以在下载页面下载对应的安装包。
windows安装选择各种默认设置即可,但是在我的win10系统安装时,最后出现服务无法正常启动的错误,导致安装无法正常结束,可以参考以下步骤:
① 右键我的的电脑=》管理=》服务和应用程序=》服务;
② 右键postgresql-x64-15=》属性=》登录身份选择“本地系统账户”,如下图所示。
通用命令:
查看已存在数据库 | \l |
进入数据库 | \c 数据库名 |
查看表格 | \d |
查看指定表格 | \d 表名 |
查询所有数据库:
select datname from pg_database;
创建数据库:
create database 数据库名 owner 所属用户 encoding UTF8;
进入数据库:
\c 数据库名
删除数据库:
drop database 数据库名;
创建表:
CREATE TABLE table_name(
column1 datatype,
column2 datatype,
column3 datatype,
.....
columnN datatype,
PRIMARY KEY( 一个或多个列 )
);
查看表格:
\d table_name
删除表格:
DROP TABLE table_name;
插入数据:
# 指定字段插入
INSERT INTO TABLE_NAME (column1, column2, column3,...columnN) VALUES (value1, value2, value3,...valueN);
# 全部字段插入
INSERT INTO TABLE_NAME VALUES (value1,value2,value3,...valueN);
选择数据:
SELECT column1, column2,...columnN FROM table_name;
更新数据:
UPDATE table_name SET column1 = value1, column2 = value2...., columnN = valueN WHERE [condition];
删除数据:
DELETE FROM table_name WHERE [condition];
以pgvector插件(第三方插件)为例,给出安装和使用教程。
从地址pgvector下载插件源码,按照教程中的如下命令安装插件:
set "PGROOT=C:\Program Files\PostgreSQL\15"
git clone --branch v0.4.4 https://github.com/pgvector/pgvector.git
cd pgvector
nmake /F Makefile.win
nmake /F Makefile.win install
说明:在windows环境下安装visual studio即可使用nmake,如果提示该命令不存在,可以在安装目录进行搜索后添加到环境变量。
本次使用python代码库psycopg进行测试,首先安装psycopg:
pip install --upgrade pip
pip install "psycopg[binary]"
测试代码如下,测试特征向量的匹配,使用内积匹配(修改密码、用户名等配置):
import psycopg
from pgvector.psycopg import register_vector
import numpy as np
conn = psycopg.connect(dbname='postgres', autocommit=True, password="your password", user="postgres")
conn.execute('CREATE EXTENSION IF NOT EXISTS vector')
register_vector(conn)
conn.execute('DROP TABLE IF EXISTS python_test')
conn.execute('CREATE TABLE python_test (id bigserial PRIMARY KEY, embedding vector(512))')
embeddings = np.random.rand(10000, 512)
sql = 'INSERT INTO python_test (embedding) VALUES ' + ','.join(['(%s)' for _ in embeddings])
params = [embedding for embedding in embeddings]
conn.execute(sql, params)
conn.execute('CREATE INDEX ON python_test USING ivfflat (embedding vector_ip_ops)')
embedding = np.random.rand(512)
result = conn.execute('SELECT id, embedding FROM python_test ORDER BY embedding <#> %s LIMIT 15', (embedding,)).fetchall()
for single_line in result:
id, embed = single_line
print(id, np.dot(embedding, embed), embedding.shape, embed.shape)
conn.close()