我有两个以下表格的表格(即每个foo都链接到一个条形图).
CREATE TABLE foo (
id INTEGER PRIMARY KEY,
x INTEGER NOT NULL,
y INTEGER NOT NULL,
...,
bar_id INTEGER UNIQUE NOT NULL,
FOREIGN key (bar_id) REFERENCES bar(id)
);
CREATE TABLE bar (
id INTEGER PRIMARY KEY,
z INTEGER NOT NULL,
...
);
Run Code Online (Sandbox Code Playgroud)
foo使用嵌套查询复制满足特定条件的行很容易:
INSERT INTO foo (...) (SELECT ... FROM foo WHERE ...)
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚如何bar为每一行制作相关行的副本foo并将id bar插入新foo行.有没有办法在单个查询中执行此操作?
期望结果的具体例子:
-- Before query:
foo(id=1,x=3,y=4,bar_id=100) ..... bar(id=100,z=7)
foo(id=2,x=9,y=6,bar_id=101) ..... bar(id=101,z=16)
foo(id=3,x=18,y=0,bar_id=102) ..... bar(id=102,z=21)
-- Query copies …Run Code Online (Sandbox Code Playgroud) 我认为必须有一些基本的东西,我不了解postgres中的咨询锁定.如果我在psql命令行客户端上输入以下命令,则该函数两次都返回true:
SELECT pg_try_advisory_lock(20); --> true
SELECT pg_try_advisory_lock(20); --> true
Run Code Online (Sandbox Code Playgroud)
我原以为第二个命令应该返回false,因为应该已经获取了锁.奇怪的是,我确实得到了以下内容,表明已经获得了两次锁:
SELECT pg_advisory_unlock(20); --> true
SELECT pg_advisory_unlock(20); --> true
SELECT pg_advisory_unlock(20); --> false
Run Code Online (Sandbox Code Playgroud)
所以我想我的问题是,如何以一种阻止它再次获得的方式获得咨询锁?
以下简单的脚本立即退出:
process.on('message', function () { });
Run Code Online (Sandbox Code Playgroud)
在侦听消息时保持node.js进程运行的正确方法是什么?