小编fol*_*ldl的帖子

在单个查询中将行插入多个表,从涉及的表中进行选择

我有两个以下表格的表格(即每个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)

sql postgresql insert common-table-expression

17
推荐指数
1
解决办法
8万
查看次数

获取postgres中的咨询锁

我认为必须有一些基本的东西,我不了解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)

所以我想我的问题是,如何以一种阻止它再次获得的方式获得咨询锁?

postgresql locking

7
推荐指数
1
解决办法
4585
查看次数

使用process.on监听消息时,停止node.js进程退出

以下简单的脚本立即退出:

process.on('message', function () { });
Run Code Online (Sandbox Code Playgroud)

在侦听消息时保持node.js进程运行的正确方法是什么?

messaging node.js

2
推荐指数
1
解决办法
2836
查看次数