Tag: postgresql

Knexjs PgSQL json查询

我有一个存储一些JSON数据的Postgres中的列。 JSON没有定义的模式,但应该可以search所有具有某个指定键的logging。 我使用KnexJS来build立查询,到目前为止我想出了这个: tx.select('*').from('table') .whereRaw('cast(data->>? as ?) = ?', [key, type, JSON.parse(value)])); 但是这不起作用,因为我不认为有可能指定types。 不过,当我尝试像这样手动指定它时: tx.select('*').from('table') .whereRaw('cast(data->>? as boolean) = ?', [key, JSON.parse(value)])); 它仍然不起作用! 这是使用DEBUG:knex:*时来自控制台的日志DEBUG:knex:* { key: 'admin', value: 'true', type: 'boolean' } knex:tx trx1: Starting top level transaction +0ms knex:pool INFO pool postgresql:pg:client0 – dispense() clients=1 available=0 +2ms knex:client acquired connection from pool: __knexUid2 +38ms […]

在过期的连接之外放松请求

我正在尝试执行以下pg-promise查询,但收到此错误: 在过期的连接之外放松请求 查询实际上成功,但是,即使如此,我想摆脱错误消息。 pg-promise查询 db.task(t => { t.oneOrNone(queries.insertUser, [profile.id]) .then(id =>{ if (id) { t.none(queries.insertUserGoogle, [ profile.id, profile.emails[0].value, profile.name.givenName, profile.name.familyName, profile.displayName ]) }}) .catch(err => console.log(err)) SQL const insertUser = `INSERT INTO users (google_id) VALUES ($1) ON CONFLICT (google_id) DO NOTHING RETURNING user_id`; const insertUserGoogle = `INSERT INTO users_google (google_id, email, first_name, last_name, display_name) VALUES […]

如何使用Bookshelf / Knex在Postgres中插入/更新`ARRAY`列

我在我的Postgres数据库中有一个表,其中包含一个数据types为ARRAY的列。 我正在使用Bookshelf在数据库上执行操作。 现在,我想插入/更新(追加新的数据到数组中的以前的数据)数据在这个列中,我无法find一个方法来做到这一点。 任何人都可以指导我怎样才能做到这一点? 我认为,这样做的一种方法可能是使用Knex的raw()函数,但我不确定如何使用raw()函数,所以请引导我。 谢谢。

AWS Lambda函数连接到Postgresql数据库

有谁知道如何通过AWS Lambda函数连接到PostgreSQL数据库。 我在网上search它,但我找不到任何关于它的东西。 如果你能告诉我如何去做,这将是伟大的。 如果你能发现我的代码(node.js)有什么问题,那将是非常好的,否则你能告诉我如何去做? exports.handler = (event, context, callback) => { "use strict" const pg = require('pg'); const connectionStr = "postgres://username:password@host:port/db_name"; var client = new pg.Client(connectionStr); client.connect(function(err){ if(err) { callback(err) } callback(null, 'Connection established'); }); context.callbackWaitsForEmptyEventLoop = false; }; 该代码将引发错误:无法find模块'pg' 我直接在AWS Lambda上写了它,如果这样做有什么不同,就不会上传任何东西。

PostgreSQL – 列不存在(与AS的地方)

我对PostgreSQL有点新手,但是我对MySQL有一些经验。 Postgres显示我和错误 – COLUMN不存在,但这是由AS创build的“虚拟列”。 代码,在MySQL中工作得非常好: SELECT place.*, 3956 * 2 * ASIN(SQRT( POWER(SIN((place.lattitude – $1) * pi() / 180 / 2), 2) + COS($2 * pi() / 180) * COS(place.lattitude * pi() / 180) *POWER(SIN(($3 – place.longitude) * pi() / 180 / 2), 2) )) AS "distance" FROM place WHERE place.longitude BETWEEN $4 AND $5 […]

nodeJS将数据插入PostgreSQL错误

女士们,先生们, 我有一个奇怪的错误使用PostgreSQL的NodeJS,我希望你也许可以帮助我。 我有大量的数据集,大约200万个条目,我想插入到我的数据库。 一个数据由4列组成: id: string, points: float[][] mid: float[] occurences: json[] 我插入像这样的数据: let pgp = require('pg-promise')(options); let connectionString = 'postgres://archiv:archiv@localhost:5432/fotoarchivDB'; let db = pgp(connectionString); cityNet.forEach((arr) => { db .none( "INSERT INTO currentcitynet(id,points,mid,occurences) VALUES $1", Inserts("${id},${points}::double precision[],${mid}::double precision[],${occurences}::json[]",arr)) .then(data => { //success }) .catch(error => { console.log(error); //error }); }) function Inserts(template, data) { if […]

Nodejs,将bin文件作为BYTEA存储到pgsql(损坏的文件)

出于某种原因,我需要将一些文件(主要是图像或PDF)存储到我的数据库(PG 9.2.20)。 这些文件是由用户上传,当我下载他们,他们已经损坏。 我在使用nodejs。 我存储文件的列types是BYTEA。 这是我如何存储他们: const { files, fields } = await asyncBusboy(ctx.req); const fileName = files[0].filename; const mimeType = files[0].mimeType; const bufferedFile = fs.readFileSync(files[0].path, { encoding: 'hex' }); const fileData = `\\x${bufferedFile}`; //Just a basic insert into with knex.raw const fileId = await storageModel.create(fields.name, fields.description, fileName, mimeType, fileData, ctx.user); 这就是我如何检索我的文件: const file = […]

node.js和postgres批量upsert或其他模式?

我正在使用Postgres,NodeJS和Knex。 我有以下情况: 具有唯一字段的数据库表。 在NodeJS中,我有一个对象数组,我需要: 一个。 插入一个新行,如果该表不包含唯一的ID或 湾 如果表中包含唯一的ID,则更新剩余的字段。 据我所知,我有三个select: 做一个查询来检查数据库中是否存在,并根据响应进行更新或插入。 这会花费资源,因为每个数组项的调用以及插入或更新。 删除数组中具有id的所有行,然后执行插入操作。 这意味着只有2个操作,但自动增量领域将继续增长。 因为Postgres 9.5支持它,所以执行一个upsert。 批量upsert似乎工作,只有一个调用数据库。 通过我知道的选项来看,upsert似乎是最合理的,但它有什么缺点?

ForEach循环内asynchronous/等待节点Postgres查询

编辑:我使用节点v8.0.0 我刚刚开始学习如何使用node-postgres访问SQL数据库,并且在访问多个数据库以便以可工作的格式收集数据时遇到了一些问题,特别是在forEach循环中执行多个查询时。 经过几次尝试,我试着asynchronous/等待,但我得到以下错误: await client.connect() ^^^^^^ SyntaxError: Unexpected identifier 当我尝试使用一个池或顺序调用.query,我会得到的东西沿线 1 [] could not connect to postgres Error: Connection terminated 这里是我的代码的缩写版本: const { Client } = require('pg'); const moment = require('moment'); const _ = require('lodash'); const turf = require('@turf/turf'); const connString = // connection string var collected = [] const CID = 300 const snaptimes […]

在Sequelize中不起作用

我目前正在使用ExpressJS,PostgreSQL和Sequelize作为ORM的项目。 我开发了一个searchfunction,使查询按名称search项目: models.foo.findAll({ where: { $or: [ {name: {$ilike: keywords}}, {searchMatches: {$contains: [keywords]}} ] }, order: [['name', 'ASC']] }) 这工作正常,但如果名称包含特殊字符(如á,é,í,ó或ú),该查询将无法find它。 有没有办法使查询search名称与speacial字符在一个有意义的意义? 就像我search名字“马铃薯”的结果“马铃薯”,“大锅饭”和“我们是pótatóes”将出来,而不是“我们吃pátatos”(因为á!= o)