Tag: postgresql

如何以编程方式自动化sequelize请求语句?

我使用sequelize作为Object Relational Mapper连接到PostgreSQL数据库。 下面的语句很好,但我不得不手动编写每个请求。 global.db.dataBaseTable.build().instanceMethod(successcb, data, errcb); 有没有办法使用充满命令的数组来构build这个语句来使用循环创build多个语句? 以下是我使用的代码的一个例子,但是编译器会返回错误。 var ary_db_table = ["aTable", "bTable", "cTable"] for(var i = 0; i<=1; i++){ global.db.ary_db_table[i].build().instanceMethod(successcb, data, errcb) }

将关联添加到sequelizejs模型

我已经定义了一个模型(通过使用sequelize-cli): 'use strict'; module.exports = function(sequelize, DataTypes) { var Rating = sequelize.define('Rating', { star_count: DataTypes.FLOAT, details: DataTypes.TEXT }, { classMethods: { associate: function(models) { Rating.hasOne(models.Product); } } }); return Rating; }; 但是,当我查询数据库中的数据库后I db:migrate我得到: SELECT * from "Ratings"; id | star_count | details | createdAt | updatedAt —-+————+———+———–+———– 文件真的没有什么比我上面做的不同。 我希望在这里看到一个product_id字段。 我究竟做错了什么? 编辑: Sequelize-CLI在模型中创build一个名为index.js的文件。 它看起来像这样: 'use strict'; […]

我怎样才能实现这个SQL QUERY的sequelize(多个连接和多个AND / OR)

我一直在努力实现这个(在SQL语句下面)在sequelize一段时间没有运气。 我最初不得不做单独的sequelize查询来获取数据,但这只是提出了很多限制。 `SELECT "Documents".* FROM "Documents" INNER JOIN "AccessTypes" ON "AccessTypes"."id" = "Documents"."accessTypeId" INNER JOIN "Users" ON "Users"."id" = "Documents"."userId" INNER JOIN "Departments" ON "Departments"."id" = "Users"."departmentId" WHERE (("AccessTypes".name != 'private' AND "Departments"."id" = ${req.decoded.departmentId}) OR "Users".id = ${req.decoded.id}) AND ("Documents"."title" ILIKE '%${searchQuery}%' OR "Documents"."content" ILIKE '%${searchQuery}%'` 这是我得到的 var dbQuery = { where: { $or: […]

连接池使用pg-promise

我使用Node js和Postgresql,并试图在连接实现中最有效率。 我看到pg-promisebuild立在node-postgres之上,node-postgres使用pg-pool来pipe理共享池。 我还读到,“一次有100多个客户是非常糟糕的”( node-postgres )。 我正在使用pg-promise并想知道: 对于非常大的数据负载,推荐的poolSize是多less? 如果poolSize = 100并且应用程序同时获得101请求(甚至更多),会发生什么情况? Postgres是否处理这个命令并且使得这个请求等到它可以运行?

在语句中使用pgp.helpers.insert和RETURNING

在前面的问题中,我非常好的dynamic创buildINSERT语句: NodeJS和pg-promise,从JSON对象中dynamic插入 我试图看看文档,并希望在INSERT语句中包含RETURNING,所以我得到插入的logging作为pg-promise的输出。 我正在使用pg-promise的NodeJS。 是否有可能返回所有列插入的logging?

SQL“子类别”和子子类别“中的所有行:recursion?

我无法编写一个解决以下问题的查询,我相信这需要某种recursion: 我有一个有houses的桌子,每个houses都有一个特定的房屋types,房子,平房等。房屋types相互inheritance,也在一个名为house_types的表中house_types 。 table: houses id | house_type 1 | house 2 | bungalow 3 | villa etcetera… table: house_types house_type | parent house | null villa | house bungalow | villa etcetera… 在这个逻辑中,平房也是别墅,别墅也是房子。 所以当我想要所有别墅的时候,房子2和房子3应该出现,当我想要所有的房子时,房子1,房间2和房间3应该出现,当我要所有的房子时,只有房子3应该出现。 是一个recursion查询的答案,我应该如何解决这个问题。 我在node.js应用程序中使用knex / objection.js 。

如何将loggingdynamic插入nodejs中相互连接的两个表中

这可能是一个非常简单的问题,虽然花了很长时间,仍然没有弄明白。 我需要postgresql中的两个表,并在我的nodejs应用程序中dynamic更新。 table1有两列(obj_id,obj_name),table2有更多的列,同时包含一列作为“obj_id”作为“fk”引用table1的“obj_id”; 我试图在table1中插入一条logging,然后做一些处理,并将相应的logging插入到table2中。 我需要从第一个插入返回的“obj_id”值,并与其他值一起使用做第二次插入。 我试图用下面的代码来做到这一点,而它总是抛出错误说( 插入或更新表“table2”违反外键约束“rel_table2_table1” )。 function uploadTable1(name,callback){ const client = new pg.Client(conString); client.connect(); client.on("drain", function () { client.end(); }); let insertTable1 = client.query(`INSERT INTO table1 (obj_name) VALUES ($1) RETURNING obj_id`, [name]); insertTable1.on("row", function (row,result) { callback(row.obj_id); }); } function uploadTable2(kk,ff) { return function (obj_id) { const client = new pg.Client(conString); client.connect(); client.on("drain", […]

将数组值存储为整数

试图以整数存储数组值。 这是我的代码。 这是错的吗? db.query('INSERT INTO users(name,student_id) VALUES($1,ARRAY["$2","$3"]::INTEGER[]) RETURNING *', [data.name, data.id]) .then(function(user) { }) .catch(function(err) { return callback(null, err); }) 但我得到这个错误 { "name": "error", "length": 102, "severity": "ERROR", "code": "42703", "position": "70", "file": "parse_relation.c", "line": "3090", "routine": "errorMissingColumn" }

pg-promise:在事务中的下一个查询中使用一个查询的结果

我是postgres的pg-promise的node.js,试图用2个插入按顺序进行事务。 第一个插入的结果ID应该在事务的下一个插入中使用。 如果任何查询失败,则回滚。 嵌套第二个db.none里面db.none .then()第一个db.one不会回滚第一个查询。 所以在这里使用一个交易。 我坚持在第二次使用第一个查询的结果。 这是我现在拥有的。 db.tx(function (t) { return t.sequence([ // generated using pgp.helpers.insert for singleData query t.one("INSERT INTO table(a, b) VALUES('a', 'b') RETURNING id"), t.none("INSERT INTO another_table(id, a_id) VALUES(1, <above_id>), (2, <above_id>)") ]); })… 使用pgp.helpers.insert为多数据查询生成第二个查询。 但是,想要使用以前的查询结果是不可行的。 是不是! 有没有办法从第一个INSERT获得id ie <above_id> ?

如何将单独的pg-promise查询合并到pg-promise中

我是新来的节点和pg-promise,并没有能够弄清楚如何得到三个相关查询的结果成一个json结果。 给出三个相关的表格: 父母实体 create table parent ( id bigint, name character varying ); 一个小孩实体 create table entity_2 ( id bigint, parent_id bigint, name character varying ); 孩子和同事之间的许多桌子 create table entity_2_entity_3 ( id bigint, child_id bigint, associate_id bigint ); 子表的关联表 create associate ( id bigint, name character varying ); 而我的服务url是/ api / family / 1(其中1是子标识) 第一个查询是(返回一个结果): […]