我需要我的程序代码来确保逻辑的某些部分在事务中执行。
什么查询会告诉我当前的交易 ID/其他信息,使我能够确定我是否处于交易中?
BEGIN;
-- How to check if I am in a transaction?
COMMIT;
Run Code Online (Sandbox Code Playgroud) 我有桌子currency_pair(c1, c2);值是(usd,bnb), (cake,bnb), (cake,eth)。
我需要找到一个让我比较的最短路径usd来eth。
此处的结果将是相同的值。然后我可以使用第一对建立一个 usd-bnb 关系,然后我可以用它来计算 usd-cake 关系,然后我可以用它来计算 usd-eth。
由于顺序是不确定的,我做的第一步是创建一个物化视图,currency_pair_map(c1, c2),它是 的并集select c1, c2 union select c2, c1。这似乎简化了逻辑。
如果我正确考虑这一点,我需要做的是使用WITH RECURSIVE?我还应该有某种“depth_limit”参数,以确保在无法建立一对时查询失败。
大声思考这个问题,我们应该始终从以下几点开始:
SELECT *
FROM currency_pair
WHERE
c1 = 'usd' AND
c2 = 'eth'
Run Code Online (Sandbox Code Playgroud)
如果有结果,我们应该到此为止。
如果没有,那么我们需要找到所有usd-*对并继续搜索,直到找到以 结尾的对eth。
使用这个逻辑,到目前为止我有:
WITH RECURSIVE pair_route AS (
SELECT
1 depth,
cp1.id,
cp1.c1,
cp1.c2
FROM currency_pair cp1
WHERE
cp1.c1 = 'usd'
UNION
SELECT
pr1.depth + 1, …Run Code Online (Sandbox Code Playgroud) 我们可以使用 来检查数组中是否包含特定值'X' = ANY(haystack)。但是,如何检查整数数组是否包含小于 X 的值?例如,我想查找至少有一个值小于 100 的所有数组。
例子:
INTERVAL '5 minute',则所需输出为 2018-05-17 22:50:00。INTERVAL '10 minute',则所需输出为 2018-05-17 22:50:00。INTERVAL '1 hour',则所需的输出为 2018-05-17 23:00:00。INTERVAL '1 day',那么期望的输出是 2018-05-18 00:00:00。我有一个表,其中包含需要定期运行的任务列表:
applaudience=> \d+ maintenance_task
Table "public.maintenance_task"
Column | Type | Collation | Nullable | Default | Storage | Stats target | Description
------------------------------------+--------------------------+-----------+----------+----------------------------------------------+----------+--------------+-------------
id | integer | | not null | nextval('maintenance_task_id_seq'::regclass) | plain | |
nid | citext | | not null | | extended | |
execution_interval | interval | | not null | | plain | |
last_attempted_at | timestamp with time zone | | | now() | plain | |
last_maintenance_task_execution_id | integer | | | …Run Code Online (Sandbox Code Playgroud) 我有一个复杂的SELECT查询表,用于标识event_id和之间的关系attribute。这是一个VALUES表达式的简化:
SELECT event_id, attribute
FROM (
VALUES
(1, '2D'),
(1, 'IMAX'),
(2, 'IMAX'),
(3, '3D')
) event_attribute (event_id, attribute)
Run Code Online (Sandbox Code Playgroud)
我想(event_id, '2D')为每个event_id尚未与3Dor2D属性关联的记录都包含一个额外的记录。如何有条件地将行附加到结果集?
在上表的情况下,预期结果将是:
(1, '2D'),
(1, 'IMAX'),
(2, 'IMAX'),
(2, '2D'),
(3, '3D')
Run Code Online (Sandbox Code Playgroud)
还有一个表格event,每个相关id.
postgresql ×6
date-math ×1
datetime ×1
interval ×1
recursive ×1
transaction ×1
update ×1
vacuum ×1