Tag: postgresql

如何通过客户端库(Postgres)在SQL查询中传递元组(不是数组)作为WHERE约束参数?

我已经经验地发现,PostgreSQL可以让你创build'元组'(术语,我不知道他们叫什么)在WHERE中定义一个多列条件: update T set x=true where (a_id, b_id) IN ((3428, 3544), (3450, 3542)); 这似乎正是我所希望的: x更新在哪里a_id =元组中的第一项AND b_id =元组中的第二项。 这接近于有用,但为了真正重要,我必须能够将这些“元组”设置为来自客户端库的参数; 特别是在这种情况下的node-pg 。 是否有可能将$ 1绑定到以下查询中的某些内容,例如$ 1是0个或更多对a_id和b_id ? client.query("UPDATE t SET x=true WHERE (a_id, b_id) IN $1"), […?]) 如果没有,我至less可以这样做 client.query("UPDATE t SET x=true WHERE (a_id, b_id) IN ($1, $2, …$N)", [ a1b1, a1b2, …aNbN ]) ?

winston postgresql自定义sql / tableName不工作

const logger = new (winston.Logger)({ transports : [ new winston.transports.PostgreSQL({ connString : 'xxxxxxxxxxx', schema : 'public', //tableName : 'logEntry', customSql:'INSERT INTO public."logEntry"(logLevel, msg, meta) VALUES ($1, $2, $3);', }) ]; }); 数据没有插入到表中,并在控制台中收到警告: 未处理的承诺拒绝已被弃用。 将来,未处理的承诺拒绝将使用非零退出代码来终止Node.js进程。 任何人都可以告诉我这个代码有什么问题吗?

如何利用Heroku的“postdeploy”脚本在预置的Heroku PostgreSQL数据库中创build表?

我正在Heroku上设置一个Web应用程序。 我希望别人能够自己使用它,所以我试图创build一个“部署到Heroku”button,以包含在我的存储库的自述文件。 跟着Heroku的文档1,2 ,我创build了一个app.json文件,概述了Herokuconfiguration应用程序所需的所有内容。 这是我的app.json文件的样子: { "name": "[title]", "author": "[author]", "description": "[desc]", "repository": "[https://github.com/[user]/[repo]", "logo": "[url]", "addons": [ "heroku-postgresql:hobby-dev", "wwwhisper:solo" ], "scripts": { "postdeploy": "node server/models/database.js" }, "env": { "TZ": "America/Los_Angeles" } } 正如你所看到的, postdeploy脚本应该调用database.js脚本,如下所示: const pg = require('pg'); const connectionString = process.env.DATABASE_URL; const client = new pg.Client(connectionString); client.connect(); client.query('CREATE TABLE IF NOT EXISTS table_name […]

Postgres + Sequelize:如何读取函数结果?

我有一个函数payment_summary()如下: CREATE OR REPLACE FUNCTION payment_summary() RETURNS SETOF PAYMENT_SUMMARY_TYPE LANGUAGE plpgsql AS $$ DECLARE payment_sum payment_summary_type%ROWTYPE; BEGIN FOR payment_sum IN SELECT pay.application_no, project.title, pay.payment_rec, customer.cust_name, project.estimated_cost, (project.estimated_cost – pay.payment_rec) AS outstanding_amt FROM project INNER JOIN customer ON project.customer_cust_id = customer.cust_id INNER JOIN (SELECT project.application_no, sum(payment.amount) AS payment_rec FROM payment INNER JOIN project ON payment.project_id = […]

在findAll中关联计数关联

假设你有一个队列表,agent_queues和代理表。 一个代理可以在许多队列中,一个队列可以有许多代理。 现在让我们假设你正在试图获得队列列表和这些队列中的代理数量。 我希望像下面这样的工作: queues.findAll({ include: ['agentQueues'], group: ['queues.name', 'queues.matcher', 'queues.id'], attributes: [[Sequelize.fn('count', Sequelize.col('agentQueues.id')), 'agentCount']] }) 相反,它会产生如下内容: SELECT "queues".* FROM (SELECT "queues"."name", "queues"."matcher", "queues"."id", count("agentQueues"."queueId") AS "agentCount" FROM "queues" AS "queues" GROUP BY "name", "matcher", "id" ) AS "queues" LEFT OUTER JOIN "agent_queues" AS "agentQueues" ON "queues"."id" = "agentQueues"."queueId"; 如果group by和count在子查询中,而不是主查询。 我在这里做错了什么? 一个理想的查询将如下所示: SELECT name, […]

用于在KNEX / BookshelfJS中定义“池”的语法

首先,我对这里的所有东西都很陌生…而且对于StackOverflow来说是新的东西,所以提前做个新手道歉,我已经准备好迎接我的颠簸了… LOL。 我们使用Heroku.addon作为Postgres,并利用/引用全局环境variables来访问正确的数据库。 我们的应用程序根目录中有一个config.js文件,如下所示: db: process.env.DB_URL || { client: 'pg', connection: { database: 'db_name', user: 'user_name' } }, 在这里有人能够引导我如何将初始化“自定义池”信息的代码集成到此设置中,如[ http://knexjs.org/#Installation-pooling] [ http://knexjs.org/#Installation-pooling] /#安装-池] var knex = require('knex')({ client: 'mysql', connection: { host : '127.0.0.1', user : 'your_database_user', password : 'your_database_password', database : 'myapp_test' }, pool: { min: 0, max: 7 } }); 在Heroku上,process.env.DB_URL是一个复杂的URL,类似于: postgres://(redacted)@ec5-87-1-47-54.compute-1.amazonaws.com:5432/d8n2e9ebd0q9it 所以,我希望有一个干净的方式来传递'自定义池'的信息,以及在这里或另一个文件/位置。 […]

具有Sequelize和Typescript的外键

鉴于这2个Sequelize模型: export class Users extends Model<Users> { @HasMany(() => UserRoles) @Column({ primaryKey: true, allowNull: false, unique: true }) UserId: string; @Column({ allowNull: false, unique: true }) Email: string; } export class UserRoles extends Model<UserRoles> { @ForeignKey(() => Users) @Column({ primaryKey: true, allowNull: false, unique: true }) UserId: string; @Column({ allowNull: false }) RoleId: number; } […]

PostgreSQL的Sequelize与时间戳行为怪异

我是PostgreSQL的新手,第一次在NodeJS中使用Sequelize包。 我的本地时区:IST(+05:30) 续集时区:UTC(+00:00) 模型 SomeModel = psql.define('SomeModel', { month: { type: Sequelize.DATE, field: 'month' }, uploadedDate: { type: Sequelize.DATE, field: 'uploaded_date' }, name: { type: Sequelize.STRING, field: 'name' } }, { tableName: 'some_table' }); input数据 月:'Dec-2017' uploadedDate:'11 -Dec-2017' 保存的数据 月:'2017-11-30' uploadedDate:'2017-12-10 02:00:00' 我知道UTC转换的月份字段发送它5小时30分钟的时间,所以它的11月再次,但在此上传date应为'2017-12-10 18:30:00'。 为什么PostgresSQL把它带到02:00,在02:00发生了什么? 现在又一个奇怪的东西,我不明白,当我试图获取相同的行值再次改变。 产值 月:'2017-11-30' uploadedDate:'2017-12-09T20:30:00.000Z' 现在为什么它将已经转换的时间再次转换为UTC,只是为了增加我的问题。 请帮助我缺less的东西,以及如何解决这个问题。

使用Python在PostgresSQL触发器上写入stream

我想写一个PostgresSQL数据库的触发器,在插入时,它会通知一个node.js服务器,它将一些数据发送到连接的客户端。 目前,我的想法是为数据库编写一个Python行插入触发器,将数据写入某个文件,然后由node.js服务器读取。 但是,这将是缓慢的,因为涉及磁盘访问。 连接这两个应用程序有什么更好的方法? 谢谢

逻辑search字段数据库select问题

这是一个有点复杂但很简单的问题。 我正在创build一个允许在一个对象上存储的小应用程序,该对象有一个标题,描述,标记和子对象。 主题包含评论。 什么是使用search字段来查找这些对象中的任何匹配的理想方式。 例如对象1 {id:1,title:test,description:fun,tags:[{games,toys}]}子对象1 {lid:1,评论:'这很有趣也很快'} 说我search:快乐的乐趣。 或者我search:testing 我想任何这些返回相同的对象。 我知道我将不得不通过空格或逗号分解variables,并创build一个数组,但我应该如何构buildSQL。 我不是要创build一个复杂的页面排名algrothim,如果我必须限制search标题或标签或描述我会这样做。 注意:这是一个简单的应用程序,即时通讯只是寻找select。