Tag: postgresql

lockingpostgres交易

我负载testing我的node.js应用程序。 在某些时候,我达到了请求正在等待的状态,我最好的猜测是因为locking的事务。 这是最后的日志声明: SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ; 在pg_lock我得到了4行,上面的查询是GRANTED = true , mode ExclusiveLock 。 我应该从哪里开始寻找一个错误? 如果在这个locking请求中我做了很多insert和update操作,隔离级别应该是REPEATABLE READ ? 有什么办法来debugging/处理这种情况? 有没有任何机制超时锁,所以应用程序可以轻松/自动释放,并不阻止进一步的请求? 侧面的问题(因为我不直接寻找工具):有没有任何工具来监视和发现这种情况? (我希望能使用Munin。) 我用express 4.13.3来使用nodejs 4.2.1,用PostgreSQL 9.4.1 ORM将3.19.3作为后缀。

postgres复合types在node-postgres上

说我有以下postgreSQL复合types: CREATE TYPE myType AS( id bigint, name text, ); 和一个除了那个types的存储过程: CREATE FUNCTION myFunction(mt myType){ //do some stuff } 我想使用node-postgres模块从Node-js调用这个过程。 var pg = require('pg'); var connectionString = "connection string"; pg.connect(connectionString, function(err, client, done) { client.query('SELECT myFunction($1)', [some value], function(err, result) { // do stuff done(); }); }); 我如何在JS中创build这样的types? 有没有办法将节点types传递给Postgres存储过程?

如何使用nodejs pg-promise库将具有uuid数组的logging插入到pg表中

我需要在我的数据库中有一个表,其中包含一个单一的列是一个uuid对象(uuid []types的数组) 但是当我尝试使用名为pg-promise的nodejs库插入到它时,它失败 我得到以下错误消息告诉我,我需要重写演员或expression式 {"name":"error","length":206,"severity":"ERROR","code":"42804","hint":"You will need to rewrite or cast the expression.","position":"230","file":"src\\backend\\parse r\\parse_target.c","line":"510","routine":"transformAssignedExpr"} 这是奇怪的,因为我有绝对没有问题,当我尝试进入一个单一的uuid到另一列在同一个确切的表(我没有代表uuid的问题,顺便说一句,我创build它们作为一个文本variables从另一个库,但他们是普通的旧文本variables) 我也没有问题,当我尝试input一个TEXT对象数组到同一列(万一我更改表具有一个TEXT []列而不是UUID []列) 这是我的代码 //////////////// var Promise = require('bluebird'); var pgpLib = require('pg-promise'); var pgp = pgpLib(); var cn = confUtil.pgDbConnectionConfiguration(); var db = pgp(cn); ////////////////// var newEntity={}; newEntity.hash = uuid.v4(); newEntity.location = {X:2394876,Y:2342342}; newEntity.mother = uuid.v4(); newEntity.timestamp = Date.now(); […]

pipe()数据到Json文件或Postgrsql

我有这个代码: var MetaUtil = require('osm-meta-util'); var meta = MetaUtil({ 'delay': 1000, 'start': '000598424', //file number 'end': '001122000' //file number }).pipe(process.stdout) //outputs to console 我怎样才能输出到Json文件,所以我可以以后上传到Postgresql数据库。 带着敬意 安德烈

Postgres承诺多个查询 – nodejs

阅读https://stackoverflow.com/a/14797359/4158593之后 :关于nodejs单线程,并且它需要asynchronous函数的第一个参数,处理它,然后使用callback来响应,当一切准备就绪。 我困惑的是,如果我有多个查询需要一次性完成,并告诉nodeJS通过将其添加到队列中来阻止其他请求。 为了做到这一点,我意识到我需要在另一个callback包装我的查询。 承诺做得很好。 const psqlClient = psqlPool.connect(); return psqlClient.query(`SELECT username FROM usernames WHERE username=$1`, ['me']) .then((data) => { if(!data.rows[0].username) { psqlClient.query(`INSERT INTO usernames (username) VALUES ('me')`); } else { … } }); 在注册过程中使用此代码来检查在插入之前是否未使用用户名。 因此,nodejs将其他请求放入队列非常重要,并确保同时select和insert 。 由于此代码可能允许同时发送同一用户名的用户select已被使用的用户名,因此将插入两个用户名。 问题 上面的代码是否一次执行查询? 如果1是正确的,如果我要改变这样的代码 const psqlClient = psqlPool.connect(); return psqlClient.query(`SELECT username FROM usernames WHERE username=$1`, ['me'], function(err, reply) […]

Postgres以非预期的方式存储时间戳

我在我的应用程序中使用PostgreSQL的Knex查询生成器。 我正在尝试在UTC数据库中添加一个created_at和updated_at字段,并使用ISO8016格式的数据。 我想让我的数据如下所示: 2017-04-20T16:33:56.774Z 在我的Knex迁移中,我尝试使用.timestamps()方法手动创buildcreated_at和updated_at ,并使用.timestamp()方法.timestamp()命名。 当我种子我的数据库,并设置created_at和updated_at等于moment().utc().toISOString() ,但它存储在我的数据库中,如下所示: 2017-04-20 11:20:00.851-05 代码和数据库之间有更改数据的东西,我不知道它是Knex,Postgres节点库还是Postgres本身。

Node – 使用node-postgres设置Postgres驱动程序

我正在尝试整合node-postgres驱动程序,并学习做一个简单的CRUD操作。 在我的app.js ,我做了这样的事情: … var postgres = require('./adapters/postgres') var postClient = new postgres(conf); … postClient.connect(function (dbconn) { app.dbconn = dbconn; app.conf = conf; console.log("************************************************************"); console.log(new Date() + ' | CRUD Server Listening on ' + conf['web']['port']); console.log("************************************************************"); server.listen(conf['web']['port']); var Routes = require('./routes/http-routes'); new Routes(app); }); 在我的adapters/postgres.js文件中,我有以下内容: const Client = require('pg'); const postClient = new Client(conf)({ […]

最小化Salesforce Streaming API和Heroku Connect之间的延迟

我目前有一个在Heroku中运行的应用程序(node.js),使用Heroku Connect连接到Salesforce来读取/写入数据。 Heroku Connect基本上有一个Salesforce选定数据的副本,通过Streaming API提取。 我的应用程序立即写入HC PostgreSQL数据库,立即写入Salesforce。 这增加了一个独特的参考字段,也是Salesforce中即时生成的,但是这个信息被延迟反馈给Heroku Connect。 我不确定延迟是因为streamAPI还是Heroku Connect,但我不确定如何最小化/删除这个延迟,以便Heroku Connect立即使用新生成的字段进行更新。 请看下面的图表,显示什么是即时和延迟发生的地方:

我如何使默认时间戳列的行为?

我试图强制这些列做两件事情: 使用“没有时区的时间戳”(后端是Postgres)。 实际上将后台的默认设置为“now / utc”。 { // a bunch of column definitions createdAt: { type: DataTypes.DATE, defaultValue: sequelize.fn('now') } }, { timestamps: false, comment: "this isn't even the real comment" } 结果是这样的: CREATE TABLE IF NOT EXISTS "common"."images" ("id" VARCHAR(255) , "imageType" VARCHAR(255), "mimeType" TEXT, "source" VARCHAR(255), "path" TEXT UNIQUE, "createdAt" TIMESTAMP WITH TIME ZONE […]

使用knex.js在Node API混淆中编写插入语句

我有一个问题,我似乎无法将我的头围绕。 这是非常具体的Knex.JS实现,我敢肯定与PostgreSQL无关。 以下实现工作。 当插入适量(〜500报表)。 数额较大,由于其他原因而失败。 无论如何,以下对我的用例不起作用,我需要类似下一节的内容。 import knex = require("knex"); (function (items) { let db = knex.table("items"); db.truncate(); let foo = []; items.forEach(function(item) { foo.push({ id : item.id, item_data : JSON.stringify(item) }); }); db.insert(foo).then(function () { /*..*/ }); }(items)) 但是以下不是: import knex = require("knex"); (function (items) { let db = knex.table("items"); db.truncate(); let foo = […]