小编rvr*_*bit的帖子

使用 PostgreSQL MVCC 跨多个表进行事务隔离

问题总结

这是一个关于 SQL 事务中查询的可序列化性的问题。

具体来说,我正在使用 PostgreSQL。可以假设我使用的是最新版本的 PostgreSQL。根据我所读到的内容,我相信用于支持我正在尝试做的事情的技术被称为“多版本并发控制”或“MVCC”。

总结一下:如果我有一个主表,并且有多个外键链接表连接到该主表,那么对于表中的给定键以及任意数量的 SELECT 语句,我如何保证这一点在一个事务中使用该键,每个事务都从任何链接表中进行选择,我将获得启动事务时存在的数据?

其他问题

这个问题类似,但范围更广,并且问题和答案与 PostgreSQL 没有具体关系: TransactionisolationandreadingfrommultipletablesonSQLServerExpressandSQLServer2005

例子

假设我有 3 张表:

bricks
    brickworks (primary key)
    completion_time (primary key)
    has_been_sold

brick_colors
    brickworks (primary key, foreign key pointing to "bricks")
    completion_time (primary key, foreign key pointing to "bricks")
    quadrant (primary key)
    color

brick_weight
    brickworks (primary key, foreign key pointing to "bricks")
    completion_time (primary key, foreign key pointing to "bricks")
    weight
Run Code Online (Sandbox Code Playgroud)

砖厂一次生产一块砖。它制作的砖块在其 4 个象限的每个象限中可能具有不同的颜色。

后来有人分析了砖块以确定它们的颜色组合,并将结果写入brick_colors 表。

其他人分析砖块以确定其重量,并将结果写入brick_weight 表。

在任何给定时间,现有的砖可能有也可能没有记录颜色,并且可能有也可能没有记录重量。


存在一个应用程序,并且该应用程序收到某人想要购买特定砖块的消息(此时应用程序已通过其 brickworks/completion_time 复合键知道)。

应用程序想要在开始查询的确切时间选择砖块的所有已知属性。

如果在事务中添加颜色或重量信息,则应用程序不想知道它。

应用程序想要执行单独的查询(不是具有多个连接到外键链接表的 …

postgresql mvcc

6
推荐指数
1
解决办法
3767
查看次数

如何检测相关事件的爆发,然后发出一个事件

我的第一个问题!我真的很想问它,所以如果我能更好地问它,请帮助我改进它.

这是我发现的唯一一个与远程相关的问题,但我无法弄清楚如何将它与我想要做的事情联系起来(他们的问题是JQuery特定的;我的是Node.JS特定的ish [虽然我找到了]一个浏览器版本的EventEmitter,并且能够在浏览器中测试]): 使用jQuery为每个事件突发运行一次函数


问题

我知道一个过程会在一段时间内发出一连串事件.

为了模拟这个过程,我编写了这段代码:

/*******************************************************/
/*         This part taken directly from               */
/*       https://nodejs.org/api/events.html            */
/*          (with addition of "burstID")               */
/* */                                               /* */
/* */ const EventEmitter = require('events');       /* */
/* */                                               /* */
/* */ class MyEmitter extends EventEmitter {}       /* */
/* */                                               /* */
/* */ const myEmitter = new MyEmitter();            /* */
/* */ myEmitter.on('event', (burstID) => {          /* */
/* */   console.log('an event occurred!', burstID); /* */
/* */ …
Run Code Online (Sandbox Code Playgroud)

javascript node.js eventemitter

5
推荐指数
1
解决办法
148
查看次数

使用 PostgreSQL xpath 函数并从数组中获取第一个返回值

一般来说:如果 PostgreSQL 函数返回一个数组,我可以访问它的枚举值之一而不必进行子查询吗?

\n\n

具体来说,这是我正在尝试做的一个抽象示例:

\n\n
SELECT\n    xpath(\'/a/text()\', subquery.xmlvalue)\nFROM (\n    SELECT \'<a>theValue</a>\'::xml xmlvalue\n) subquery ;\n
Run Code Online (Sandbox Code Playgroud)\n\n

\xe2\x80\xa6 返回一个数组:

\n\n
   xpath    \n------------\n {theValue}\n(1 row)\n
Run Code Online (Sandbox Code Playgroud)\n\n

\xe2\x80\xa6但我想要的是该数组中的第一个(也是唯一的)值:

\n\n
   xpath    \n------------\n theValue\n(1 row)\n
Run Code Online (Sandbox Code Playgroud)\n\n

\xe2\x80\xa6so,我的问题是,这是(在 \xe2\x80\x94a 子查询下面)唯一的方法,还是有没有办法做到这一点subquery2

\n\n
SELECT subquery2.xpatharray[1] FROM (\n    SELECT\n        xpath(\'/a/text()\', subquery.xmlvalue) xpatharray\n    FROM (\n        SELECT \'<a>theValue</a>\'::xml xmlvalue\n    ) subquery\n) subquery2 ;\n
Run Code Online (Sandbox Code Playgroud)\n\n

\xe2\x80\xa6 因为这不起作用

\n\n
SELECT\n    xpath(\'/a/text()\', subquery.xmlvalue)[1]\nFROM (\n    SELECT \'<a>theValue</a>\'::xml xmlvalue\n) subquery ;\n
Run Code Online (Sandbox Code Playgroud)\n\n

\xe2\x80\xa6,错误消息为:

\n\n
ERROR:  syntax error at or near "["\nLINE 2: …
Run Code Online (Sandbox Code Playgroud)

arrays postgresql xpath

3
推荐指数
1
解决办法
1396
查看次数

标签 统计

postgresql ×2

arrays ×1

eventemitter ×1

javascript ×1

mvcc ×1

node.js ×1

xpath ×1