标签: postgresql

Postgres - 同时在表上执行多个命令

Postgres 在一个表上同时运行多个命令时有多健壮?

例如,我可以设置一个主键并同时使用多个单独的命令创建几个索引吗?

仅影响/更改一列中的数据的查询怎么样?只要不干扰受第一个命令影响的列,就可以运行其他命令吗?

postgresql

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

在 Postgres 中的 UPDATE 查询期间按 Ctrl+C,查询是否部分运行?

我不小心在 psql (9.4) 中启动了不需要的 UPDATE 查询,几秒钟后用 CTRL+C 杀死了它。是否有任何记录被修改,或者全有或全无?

postgresql

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

为什么 postgreSQL 使用基于 1 的数组?

为什么 PostgreSQL 使用基于 1 的数组(第一个元素位于索引 1)而不是基于 0 的数组(第一个元素位于索引 0)?

postgresql array

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

如何更新复杂的 jsonb 列?

我有一个具有以下定义的表:

create table json_test (
    filter_data jsonb);
Run Code Online (Sandbox Code Playgroud)

我插入这样的值:

'{"task_packets": [
    {
        "state": "PROCEEDING",
        "task_id": 1001
    },
    {
        "state": "REVERTING",
        "task_id": 1002
    }
]}'
Run Code Online (Sandbox Code Playgroud)

现在我想将此jsonb列更新为:

'{"task_packets": [
    {
        "state": "DONE",
        "task_id": 1001
    },
    {
        "state": "REVERTING",
        "task_id": 1002
    }
]}'
Run Code Online (Sandbox Code Playgroud)

即我想使用指定的task_id内部 task_packets 数组更改值的状态。我建议以某种方式将jsonb_set()函数与#-运算符结合使用(首先从数组中删除值,然后使用更新的状态附加到它)。
我该怎么做?

postgresql update json postgresql-9.5

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

从一个表中选择多个值,在一行中的另一表中具有匹配的记录

我有两个表如下:

create table first (id int, name varchar(20));
create table second (id int, value char(1),fid int);  
Run Code Online (Sandbox Code Playgroud)

这些表具有以下记录:

insert into first values (1,'Ahmad'),(2,'Sami'),(3,'Khan');
insert into second values
  (1,'a',1)
, (2,'b',1)
, (3,'c',2)
, (4,'d',1)
, (5,'e',2)
, (6,'f',3);  
Run Code Online (Sandbox Code Playgroud)

我想从表中选择那些在表second中具有匹配记录first单行记录

所需的输出是:

身份证 | 姓名 | 价值 | 价值 | 价值
 ---+-------+-------+-------+-------
  1 | 艾哈迈德 | | 乙 | d
  2 | 萨米语 | | | 电子 |
  3 | 汗 | f | |  

table 的单个记录的值数量 …

postgresql join pivot

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

这个唯一索引如何允许重复行?

有没有办法让这个唯一索引允许重复的行?我想也许有一些额外的空格字符,但我找不到它们。

=> select *, length(keyword), length(country), length(language) from keyword where id in (4588076, 4951423);
   id    |       keyword       | seed_id | source | search_count | country | language | volume | cpc  | competition | modified_on | violation | revenue | length | length | length
---------+---------------------+---------+--------+--------------+---------+----------+--------+------+-------------+-------------+-----------+---------+--------+--------+--------
 4588076 | power wallet review |         | SPYFU  |            0 |         |          |     70 | 0.11 |        0.31 |             |           |         |     19 |        |
 4951423 | power wallet review |         | SPYFU  | …
Run Code Online (Sandbox Code Playgroud)

postgresql index

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

PostgreSQL 中的密码学

我正在考虑将 PostgreSQL 用于一个项目,因为它是免费的,人们说它很好,但我需要在我的数据库中进行一些加密。我做了一些搜索,我在 PostgreSQL 中找到了这些选项:

  • 男朋友
  • MD5
  • xdes

我不知道什么是“最安全”,你们能帮我解决这个问题吗?在这种情况下,我更喜欢稍微慢一点的安全性,而不是速度和一点安全性。

在这种情况下,我猜加密比“只是”散列密码要好,并且在 db 上确实需要它。我需要对我的用户的登录信息进行加密。难点不是如何存储,而是如何通过加密来保护它。

postgresql security encryption

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

获取两个相关行之间的时间增量

我有一个表,里面有很多成对的条目,通过一个字段name相互关联,每个条目都有一个时间戳timestamp_received。我想获得每个时间戳的增量name

桌子:

|id|name|timestamp_received|
|1|A|2016-09-21 11:11:00|
|2|A|2016-09-21 11:11:10|
|3|B|2016-09-21 11:11:20|
|4|B|2016-09-21 12:12:21|
Run Code Online (Sandbox Code Playgroud)

所需的输出:

|name|delta|
|A|00:00:10|
|B|01:01:01|
Run Code Online (Sandbox Code Playgroud)

到目前为止我尝试过的:

SELECT name, timestamp_received - LAG(timestamp_received, 1) OVER (PARTITION BY name ORDER BY id ASC) delta
FROM message;
Run Code Online (Sandbox Code Playgroud)

哪个不会产生预期的输出

SELECT fpm_left.name, age(fpm_right.timestamp_received, fpm_left.timestamp_received) 
FROM
  (SELECT * FROM message WHERE id IN (SELECT min(id) AS id FROM message GROUP BY name)) fpm_left
JOIN (SELECT * FROM message WHERE IN in (SELECT max(id) AS id FROM message GROUP BY name)) fpm_right
    ON …
Run Code Online (Sandbox Code Playgroud)

postgresql

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

max(max(col1), max(col2), ...) 不起作用

我有一个包含三个整数列的表:

select max(col1), max(col2), max(col3) from mytable
Run Code Online (Sandbox Code Playgroud)

我想要三列的最大值。但这不起作用:

select max(max(col1), max(col2), max(col3)) from mytable
Run Code Online (Sandbox Code Playgroud)

如何完成这项工作?

我使用 PostgreSQL,但我希望这可以用标准 SQL 解决。

postgresql max

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

PostgreSQL中如何去除字符之间的空格?

我想根据卡号的特定列匹配两个表,第二个表中某些卡号的字符之间有空格,如下所示:

'NES 123_4_5'
'MTS 678_9_0'
Run Code Online (Sandbox Code Playgroud)

我想要的是删除字符和数字之间的空格并将其更改为以下形式:

'NES123_4_5'
'MTS678_9_0'
Run Code Online (Sandbox Code Playgroud)

执行此操作的函数的 SQL 查询是什么?

postgresql postgresql-9.5 trim

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

标签 统计

postgresql ×10

postgresql-9.5 ×2

array ×1

encryption ×1

index ×1

join ×1

json ×1

max ×1

pivot ×1

security ×1

trim ×1

update ×1