小编Gaj*_*jus的帖子

如何检查当前连接是否处于事务中?

我需要我的程序代码来确保逻辑的某些部分在事务中执行。

什么查询会告诉我当前的交易 ID/其他信息,使我能够确定我是否处于交易中?

BEGIN;
-- How to check if I am in a transaction?
COMMIT;
Run Code Online (Sandbox Code Playgroud)

postgresql transaction

9
推荐指数
2
解决办法
6125
查看次数

如何找到两种货币之间的最短路径?

我有桌子currency_pair(c1, c2);值是(usd,bnb), (cake,bnb), (cake,eth)

我需要找到一个让我比较的最短路径usdeth

此处的结果将是相同的值。然后我可以使用第一对建立一个 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)

postgresql recursive

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

如何检查 int[] 数组是否包含小于 X 的值?

我们可以使用 来检查数组中是否包含特定值'X' = ANY(haystack)。但是,如何检查整数数组是否包含小于 X 的值?例如,我想查找至少有一个值小于 100 的所有数组。

postgresql

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

如何将时间四舍五入到任意时间间隔的上倍数?

例子:

  • 如果当前时间为 2018-05-17 22:45:30 且所需时间间隔为INTERVAL '5 minute',则所需输出为 2018-05-17 22:50:00。
  • 如果当前时间为 2018-05-17 22:45:30 且所需时间间隔为INTERVAL '10 minute',则所需输出为 2018-05-17 22:50:00。
  • 如果当前时间为 2018-05-17 22:45:30 并且所需的时间间隔为INTERVAL '1 hour',则所需的输出为 2018-05-17 23:00:00。
  • 如果当前时间是 2018-05-17 22:45:30 并且期望的间隔是INTERVAL '1 day',那么期望的输出是 2018-05-18 00:00:00。

postgresql datetime interval date-math

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

如何针对高频更新优化表?

我有一个表,其中包含需要定期运行的任务列表:

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)

postgresql vacuum update

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

如何有条件地将行附加到结果集?

我有一个复杂的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

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