postgresql - 事务上下文中 postgres 日志中 "execute"和 "statement"之间的差异

标签 postgresql sails.js postgresql-9.3 waterline sails-postgresql

我收到“警告:没有正在进行的交易”错误,如下所述 here 。当我检查日志时,我发现如果我使用 Model.query 方法,我的 sails 水线 ORM 会导致日志中出现“statement”一词,并且“execute”一词出现在通过其模型方法发出的查询前面例如 .insert、.update 等。它们在事务内的行为方式有什么区别吗?或者,日志中的“语句”和“执行”有什么区别?

2015-02-18 21:31:03 UTC [6810-35] vdsr@sails LOG:  statement: start transaction
2015-02-18 21:31:03 UTC [6813-33] vdsr@sails LOG:  execute <unnamed>: INSERT INTO "groups" ("name", "notes", "isCompany", "parentGroupRef", "companyRef", "createdAt", "updatedAt") values ($1, $2, $3, $4, $5, $6, $7) RETURNING *
2015-02-18 21:31:03 UTC [6813-34] vdsr@sails DETAIL:  parameters: $1 = 'bbbb', $2 = 'fdf', $3 = 't', $4 = '1', $5 = '1', $6 = '2015-02-18 21:31:03+00', $7 = '2015-02-18 21:31:03+00'
2015-02-18 21:31:03 UTC [6814-33] vdsr@sails LOG:  execute <unnamed>: INSERT INTO "users" ("firstName", "lastName", "email", "companyRef", "isMainUser", "password", "middleName", "createdAt", "updatedAt") values ($1, $2, $3, $4, $5, $6, $7, $8, $9) RETURNING *
2015-02-18 21:31:03 UTC [6814-34] vdsr@sails DETAIL:  parameters: $1 = 'ffff', $2 = 'ffdd', $3 = '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="7f19191b191b3f1b0c511c1012" rel="noreferrer noopener nofollow">[email protected]</a>', $4 = '19', $5 = 't', $6 = 'cc5ce3a7addcb4512c7af12a6594af91', $7 = '', $8 = '2015-02-18 21:31:03+00', $9 = '2015-02-18 21:31:03+00'
2015-02-18 21:31:03 UTC [6805-53] vdsr@sails LOG:  execute <unnamed>: INSERT INTO "roles" ("name", "companyRef", "createdAt", "updatedAt") values ($1, $2, $3, $4) RETURNING *
2015-02-18 21:31:03 UTC [6805-54] vdsr@sails DETAIL:  parameters: $1 = 'Master', $2 = '19', $3 = '2015-02-18 21:31:03+00', $4 = '2015-02-18 21:31:03+00'
2015-02-18 21:31:03 UTC [6809-37] vdsr@sails LOG:  execute <unnamed>: INSERT INTO "userroles" ("roleRef", "userRef", "createdAt", "updatedAt") values ($1, $2, $3, $4) RETURNING *
2015-02-18 21:31:03 UTC [6809-38] vdsr@sails DETAIL:  parameters: $1 = '12', $2 = '16', $3 = '2015-02-18 21:31:03+00', $4 = '2015-02-18 21:31:03+00'
2015-02-18 21:31:03 UTC [6808-37] vdsr@sails LOG:  execute <unnamed>: INSERT INTO "rolepermissions" ("roleRef", "permissionRef", "createdAt", "updatedAt") values ($1, $2, $3, $4) RETURNING *
2015-02-18 21:31:03 UTC [6808-38] vdsr@sails DETAIL:  parameters: $1 = '12', $2 = '24', $3 = '2015-02-18 21:31:03+00', $4 = '2015-02-18 21:31:03+00'
2015-02-18 21:31:03 UTC [6811-35] vdsr@sails LOG:  execute <unnamed>: INSERT INTO "rolepermissions" ("roleRef", "permissionRef", "createdAt", "updatedAt") values ($1, $2, $3, $4) RETURNING *
2015-02-18 21:31:03 UTC [6811-36] vdsr@sails DETAIL:  parameters: $1 = '12', $2 = '22', $3 = '2015-02-18 21:31:03+00', $4 = '2015-02-18 21:31:03+00'
2015-02-18 21:31:03 UTC [6806-41] vdsr@sails LOG:  execute <unnamed>: SELECT "groups"."name", "groups"."notes", "groups"."parentGroupRef", "groups"."isCompany", "groups"."hierPos", "groups"."companyRef", "groups"."id", "groups"."createdAt", "groups"."updatedAt" FROM "groups" AS "groups"  WHERE "groups"."companyRef" = $1 
2015-02-18 21:31:03 UTC [6806-42] vdsr@sails DETAIL:  parameters: $1 = '1'
2015-02-18 21:31:03 UTC [6807-41] vdsr@sails LOG:  statement:  update groups set "hierPos" = case id when 2 then '1' when 3 then '2' when 4 then '3' when 5 then '4' when 6 then '4.1' when 10 then '4.1.1' when 18 then '4.2' when 13 then '5' when 17 then '6' when 19 then '7' else "hierPos" end  where id in (2,3,4,5,6,10,18,13,17,19) 
2015-02-18 21:31:03 UTC [6812-35] vdsr@sails LOG:  statement: commit
2015-02-18 21:31:03 UTC [6812-36] vdsr@sails WARNING:  there is no transaction in progress

最佳答案

您很可能在自动提交模式下运行查询。在这种模式下,每个语句都有自己的小事务。发出 WARNING 是因为所有语句都已提交,而 commit 语句没有“看到”它们。

至于“执行”与“语句”:其中之一似乎是带参数的准备好的语句。另一种只是简单的查询,没有额外的参数。

关于postgresql - 事务上下文中 postgres 日志中 "execute"和 "statement"之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28594601/

相关文章:

postgresql - 在 Talend 中使用 Postgres "copy"命令将表内容加载到 CSV 文件中

postgresql - 无法修改 PostgreSql 查询,如何加快速度

postgresql - 为什么计划者没有利用我对子表的 CHECK CONSTRAINTS 来减小计划的大小?

database - 如何在postgresql中将十进制值转换为tofixed格式

postgresql - 使用 n :m and 1:m associations and update Model 后续删除实例

node.js - 从 sailsjs 模型中的集合中检索特定值

javascript - 如何在 Sails 中使用 mocha 测试 Controller ?

sails.js - 如何在pm2的生产环境中运行Sails(sails lift --prod)

postgresql - 如何在 postgresql 的 pg_hba.conf 文件中指定主机名?

sql - 转到数据库连接器 : go-sql-driver works, 其他一切 "unknown driver, forgotten import?"