Tag: postgresql

使用PostgreSQL的Knexselect查询在多个并行请求上性能极度下降

简单来说 我正在开发一个游戏(梦想),我的后端堆栈是与Knex的Node.js和PostgreSQL(9.6)。 我把所有的球员数据都保存在这里,我需要经常请求。 其中一个请求需要做10个简单的select来提取数据,这就是问题的出发点:如果服务器只同时提供1个请求,这些查询是相当快的(〜1ms)。 但是,如果服务器服务器并行请求很多(100-400),查询执行时间极度降低(每个查询可能长达几秒) 细节 为了更客观,我将描述服务器的请求目标,select查询和我收到的结果。 关于系统 我在同一个conf上运行Digital Ocean 4cpu / 8gb液滴和Postgres上的节点代码(2个不同的液滴,相同的configuration) 关于请求 它需要做一些游戏操作,他为数据库中的2个玩家select数据 DDL 玩家数据由5个表格代表: CREATE TABLE public.player_profile( id integer NOT NULL DEFAULT nextval('player_profile_id_seq'::regclass), public_data integer NOT NULL, private_data integer NOT NULL, current_active_deck_num smallint NOT NULL DEFAULT '0'::smallint, created_at bigint NOT NULL DEFAULT '0'::bigint, CONSTRAINT player_profile_pkey PRIMARY KEY (id), CONSTRAINT player_profile_private_data_foreign FOREIGN KEY […]

如何通过NodeJS Sequelize中的查询来统计组

在Rails中,我可以执行一个简单的ORM查询模型的喜欢数量: @records = Model .select( 'model.*' ) .select( 'count(likes.*) as likes_count' ) .joins( 'LEFT JOIN likes ON model.id = likes.model_id' ) .group( 'model.id' ) 这会生成查询: SELECT models.*, count(likes.*) as likes_count FROM "models" JOIN likes ON models.id = likes.model_id GROUP BY models.id 在Node Sequelize中,任何类似的尝试都会失败: return Model.findAll({ group: [ '"Model".id' ], attributes: ['id', [Sequelize.fn('count', Sequelize.col('"Likes".id')), 'likes_count']], include: […]

TypeError:当用Heroku node.js调用pg.connect时,无法调用null的方法'query'

我遇到了通过Node.js连接到Heroku postgres数据库的问题。 我发现另外一个人遇到这个问题,但他们的build议在我的情况下不起作用。 我将var DB_URL定义为Heroku存储的完整Postgres数据库URL。 我这样做是因为process.env.DATABASE_URL没有定义。 (这是其他堆栈溢出post的build议)。 尝试连接的代码是: pg.connect(DB_URL, function(err, client) { client.query( … ) 跑步领class时: client.query('INSERT INTO bookmarks (username, title, image, url) VALUES ( ^ TypeError: Cannot call method 'query' of null null的地方是指客户端对象,意思是传递给pg.connect匿名函数。 build议表示赞赏,我在Heroku文档和Googlesearch引擎中search到了很多,但都无济于事。

基于包含在Sequelize中的数据进行查询

我有一个自我关联的人的桌子,所以人们可以有父母/孩子/表亲/等。 const People = sequelize.define('People', { gender: Sequelize.STRING, name: Sequelize.STRING, age: Sequelize.INTEGER }) const Relationships = sequelize.define('Relationships') Items.belongsToMany(Items, { through: Relationships, as: 'relationships' }) 我希望能够以两种方式select数据: 1.select一个21岁的人的所有关系 // Returns all of johns relatives who are 21 return People.findOne({ where: { name: 'John' }, include: [{ required: false, model: Items, as: 'relationships', where: { age: 21 } […]

node.js光纤与pg / postgres

我一直在试图弄清楚如何使用节点光纤来使我的数据库代码在node.js中不那么混乱,但我无法让它工作。 作为一个最小的testing用例,我将代码解释为: var Future = require('fibers/future'); var pg=require('pg'); var connstr = "pg://not_the_real_user:or_password@localhost/db"; var pconnect = Future.wrap(pg.connect); Fiber(function() { var client = pconnect(connstr).wait(); console.log("called function"); }).run(); 如果我离开它,我得到以下错误: pgfuture.js:10 }).run(); ^ TypeError: undefined is not a function at Object.PG.connect.pools.(anonymous function).genericPool.Pool.create (/home/erik/code/treehouse-node/node_modules/pg/lib/index.js:49:20) at dispense (/home/erik/code/treehouse-node/node_modules/pg/node_modules/generic-pool/lib/generic-pool.js:223:17) at Object.exports.Pool.me.acquire (/home/erik/code/treehouse-node/node_modules/pg/node_modules/generic-pool/lib/generic-pool.js:267:5) at PG.connect (/home/erik/code/treehouse-node/node_modules/pg/lib/index.js:75:15) at Future.wrap (/home/erik/code/treehouse-node/node_modules/fibers/future.js:30:6) at /home/erik/code/treehouse-node/pgfuture.js:8:18 但是,如果我注释掉调用pconnect的那一行,我会在控制台上看到“调用函数”消息,并且没有错误。 在github页面上的例子有一个几乎相同的结构,它在我的系统上正常工作,但我很难在这里做错了什么。 […]

Sequelize REST API生成器

我正在开发一个Nodejs应用程序,我的数据库是Postgres,而且我使用Sequelize作为我的ORM,因为它对迁移有很好的支持。 我正在寻找一个基于我定义的模式的良好的REST API生成器。 我面临两个主要障碍,它们是生成器在创build关联API路由和缺乏ACL支持方面做得不好。 在关联的前面,我的模式有多个层次的关联,例如.. Student.hasMany(Courses); Courses.hasMany(Subjects); 所以理想情况下生成的REST API应该是这样的 /student/:student_id/course/:course_id/subject/:subjectId 我发现有几个项目正在这样做,但不完整。 https://github.com/sequelize/sequelize-restful – 很好,但没有ACL支持 https://www.npmjs.org/package/restizr – 处于alpha阶段,不会生成关联的API路由。 有没有支持这个模块?

用pg-promise插入多个logging

我有一个场景,我需要插入多个logging。 我有一个表结构,如ID(这是从其他表fk),键(字符),值(字符)。 需要保存的input是上述数据的数组。 例如:我有一些数组对象,如: lst = []; obj = {}; obj.id= 123; obj.key = 'somekey'; obj.value = '1234'; lst.push(obj); obj = {}; obj.id= 123; obj.key = 'somekey1'; obj.value = '12345'; lst.push(obj); 在MS SQL中,我将创buildTVP并通过它。 我不知道如何在postgres中实现。 所以现在我想要做的就是使用pg-promise库在postgres sql的单个查询中保存列表中的所有项目。 我无法从文档中find任何文档/理解。 任何帮助赞赏。 谢谢。

如何在Sequelize ORM中插入PostGIS几何点?

我想在Sequelize.js ORM中有一个几何列的表中插入一行。 我有纬度,经度和高度,需要先将它转换为一个点,然后才能将其作为几何体插入。 执行转换的PostGIS存储过程是 ST_MakePoint( longitude, latitude, altitude ) 插入一行我正在使用sequelize model.create函数 models.Data.create({ location: "ST_MakePoint("+request.params.lon+", "+request.params.lat+", "+request.params.alt+")", // PSUEDO code, How can I call this function? speed: request.params.spd, azimuth: request.params.azi, accuracy: request.params.acc }); 现在我想要做的是当我插入字段location返回"ST_MakePoint("+request.params.lon+", "+request.params.lat+", "+request.params.alt+")"该行。 我怎样才能做到这一点?

使用sails.js和现有的postgres数据库

我正在考虑使用Sails来开发我们正在开发的应用程序。 我正在使用使用waterline orm的sails-postgresql适配器。 我有一个现有的数据库,我想连接到。 如果我使用generate something创build一个模型 然后在我的模型中,我有 attributes:{ title:{type:'String'} } 如果我浏览本地主机/某些东西,orm删除除了标题之外的something表中的所有列。 有没有办法阻止它这样做? 这个应用程序不应该删除这个数据库上的列。 谢谢!

无法从本地节点应用程序以sequelize连接到heroku postgresql数据库

我试图从Sequelize的本地nodejs应用程序连接到Heroku postgresql数据库。 我遵循这两个指南,一切都在英雄服务器端的工作完全正常,但我的节点应用程序将不会连接到heroku当我在我的Mac本地运行它。 http://sequelizejs.com/articles/heroku https://devcenter.heroku.com/articles/connecting-to-heroku-postgres-databases-from-outside-of-heroku 以下是我如何启动本地应用程序: DATABASE_URL=$(heroku config:get DATABASE_URL) nodemon 得到我: Sequelize: Unable to connect to the database: 但是我通过这样做得到正确的URL: echo $(heroku config:get DATABASE_URL) 这些命令工作正常: heroku pg:psql psql $(heroku config:get DATABASE_URL) 这是我的nodejs代码: var match = process.env.DATABASE_URL.match(/postgres:\/\/([^:]+):([^@]+)@([^:]+):(\d+)\/(.+)/) sequelize = new Sequelize(match[5], match[1], match[2], { dialect: 'postgres', protocol: 'postgres', port: match[4], host: match[3], logging: false }) sequelize .authenticate() […]