这是一个关于 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 复合键知道)。
应用程序想要在开始查询的确切时间选择砖块的所有已知属性。
如果在事务中添加颜色或重量信息,则应用程序不想知道它。
应用程序想要执行单独的查询(不是具有多个连接到外键链接表的 …
我的第一个问题!我真的很想问它,所以如果我能更好地问它,请帮助我改进它.
这是我发现的唯一一个与远程相关的问题,但我无法弄清楚如何将它与我想要做的事情联系起来(他们的问题是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) 一般来说:如果 PostgreSQL 函数返回一个数组,我可以访问它的枚举值之一而不必进行子查询吗?
\n\n具体来说,这是我正在尝试做的一个抽象示例:
\n\nSELECT\n xpath(\'/a/text()\', subquery.xmlvalue)\nFROM (\n SELECT \'<a>theValue</a>\'::xml xmlvalue\n) subquery ;\nRun Code Online (Sandbox Code Playgroud)\n\n\xe2\x80\xa6 返回一个数组:
\n\n xpath \n------------\n {theValue}\n(1 row)\nRun Code Online (Sandbox Code Playgroud)\n\n\xe2\x80\xa6但我想要的是该数组中的第一个(也是唯一的)值:
\n\n xpath \n------------\n theValue\n(1 row)\nRun Code Online (Sandbox Code Playgroud)\n\n\xe2\x80\xa6so,我的问题是,这是(在 \xe2\x80\x94a 子查询下面)唯一的方法,还是有没有办法做到这一点subquery2?
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 ;\nRun Code Online (Sandbox Code Playgroud)\n\n\xe2\x80\xa6 因为这不起作用:
\n\nSELECT\n xpath(\'/a/text()\', subquery.xmlvalue)[1]\nFROM (\n SELECT \'<a>theValue</a>\'::xml xmlvalue\n) subquery ;\nRun Code Online (Sandbox Code Playgroud)\n\n\xe2\x80\xa6,错误消息为:
\n\nERROR: syntax error at or near "["\nLINE 2: …Run Code Online (Sandbox Code Playgroud)