返回
PGlite:浏览器中运行的PostgreSQL数据库
2025-03-28
26 0-- npm
npminstall @electric-sql/pglite
-- pnpm
pnpminstall @electric-sql/pglite
-- yarn
yarnadd @electric-sql/pglite
-- bun
bun install @electric-sql/pglite
-- deno
deno add npm:@electric-sql/pglite
创建数据库的方式如下:
import { PGlite } from '@electric-sql/pglite'
const db = new PGlite() -- 使用内存存储
const db = new PGlite('./path/to/pgdata') -- 使用文件系统存储
对于浏览器嵌入,安装后使用如下方式导入并创建数据库:
import { PGlite }from"@electric-sql/pglite";-- 导入模块
const db =newPGlite()-- 使用内存存储
const db =newPGlite('idb://my-pgdata')-- 使用IndexedDB存储
await db.query("select 'Hello world' as message;")-- 执行查询
// -> { rows: [ { message: "Hello world" } ] }
接下来可以使用 .exec 方法创建表和数据:
await db.exec(`
CREATE TABLE IF NOT EXISTS todo (
id SERIAL PRIMARY KEY,
task TEXT,
done BOOLEAN DEFAULT false
);
INSERT INTO todo (task, done) VALUES ('Install PGlite from NPM', true);
INSERT INTO todo (task, done) VALUES ('Load PGlite', true);
INSERT INTO todo (task, done) VALUES ('Create a table', true);
INSERT INTO todo (task, done) VALUES ('Insert some data', true);
INSERT INTO todo (task) VALUES ('Update a task');
`)
然后使用 .query 方法查询数据:
const ret = await db.query(`
SELECT * from todo WHERE id = 1;
`)
console.log(ret.rows)
查询返回的结果如下:
[
{
id: 1,
task: 'Install PGlite from NPM',
done: false,
},
]
以下是一个利用 pgvector 插件进行相似度搜索的示例:
import { PGlite }from"@electric-sql/pglite";
import{ vector }from"@electric-sql/pglite/vector";
const pg =newPGlite({
extensions:{
vector,
// Alternatively, you can specify the path to the extension tarball
// vector: new URL("../dist/vector.tar.gz", import.meta.url),
}
});
await pg.exec("CREATE EXTENSION IF NOT EXISTS vector;");
await pg.exec(`
CREATE TABLE IF NOT EXISTS test (
id SERIAL PRIMARY KEY,
name TEXT,
vec vector(3)
);
`);
await pg.exec("INSERT INTO test (name, vec) VALUES ('test1', '[1,2,3]');");
await pg.exec("INSERT INTO test (name, vec) VALUES ('test2', '[4,5,6]');");
await pg.exec("INSERT INTO test (name, vec) VALUES ('test3', '[7,8,9]');");
const res =await pg.exec(`
SELECT * FROM test;
`);
console.log(res);
const res2 =await pg.exec(`
SELECT
name,
vec,
vec <-> '[3,1,2]' AS distance
FROM test;
`);
console.log(res2);
以上代码输出的结果如下:
[
{
"rows":[
{
"id":1,
"name":"test1",
"vec":"[1,2,3]"
},
{
"id":2,
"name":"test2",
"vec":"[4,5,6]"
},
{
"id":3,
"name":"test3",
"vec":"[7,8,9]"
}
],
"fields":[
{
"name":"id",
"dataTypeID":23
},
{
"name":"name",
"dataTypeID":25
},
{
"name":"vec",
"dataTypeID":16385
}
],
"affectedRows":0
}
]
[
{
"rows":[
{
"name":"test1",
"vec":"[1,2,3]",
"distance":2.449489742783178
},
{
"name":"test2",
"vec":"[4,5,6]",
"distance":5.744562646538029
},
{
"name":"test3",
"vec":"[7,8,9]",
"distance":10.677078252031311
}
],
"fields":[
{
"name":"name",
"dataTypeID":25
},
{
"name":"vec",
"dataTypeID":16385
},
{
"name":"distance",
"dataTypeID":701
}
],
"affectedRows":0
}
]
PGlite 还支持许多高级功能,例如实时查询(live 插件)、持久化文件系统、框架集成(React、Vue)、嵌入式命令行(REPL)、实时远程数据同步(pglite-sync)等,相关示例建议参考官方文档:
您可能感兴趣:
网友点评
提交
相关阅读
SQL Server不允许保存更改 您所做的更改要求删除并重新创建以下表
Entity Framework (EF)根据Model创建和更新数据库
C#13 中的集合params最新用法
IIS发布网站 服务器应用程序不可用错误
C# PriorityQueue<TElement, TPriority>优先级队列用法示例
IIS如何把顶级域名重定向到www域名
SqlSugar 一款强大且易用的.NET开源ORM框架
a标签的rel属性用法说明
Windows服务器IIS部署和发布.NET8网站图文教程
javascript encodeURI和encodeURIComponent的用法和区别