Postgres 在一个表上同时运行多个命令时有多健壮?
例如,我可以设置一个主键并同时使用多个单独的命令创建几个索引吗?
仅影响/更改一列中的数据的查询怎么样?只要不干扰受第一个命令影响的列,就可以运行其他命令吗?
我不小心在 psql (9.4) 中启动了不需要的 UPDATE 查询,几秒钟后用 CTRL+C 杀死了它。是否有任何记录被修改,或者全有或全无?
为什么 PostgreSQL 使用基于 1 的数组(第一个元素位于索引 1)而不是基于 0 的数组(第一个元素位于索引 0)?
我有一个具有以下定义的表:
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()函数与#-运算符结合使用(首先从数组中删除值,然后使用更新的状态附加到它)。
我该怎么做?
我有两个表如下:
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 的单个记录的值数量 …
有没有办法让这个唯一索引允许重复的行?我想也许有一些额外的空格字符,但我找不到它们。
=> 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 用于一个项目,因为它是免费的,人们说它很好,但我需要在我的数据库中进行一些加密。我做了一些搜索,我在 PostgreSQL 中找到了这些选项:
我不知道什么是“最安全”,你们能帮我解决这个问题吗?在这种情况下,我更喜欢稍微慢一点的安全性,而不是速度和一点安全性。
在这种情况下,我猜加密比“只是”散列密码要好,并且在 db 上确实需要它。我需要对我的用户的登录信息进行强加密。难点不是如何存储,而是如何通过加密来保护它。
我有一个表,里面有很多成对的条目,通过一个字段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) 我有一个包含三个整数列的表:
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 解决。
我想根据卡号的特定列匹配两个表,第二个表中某些卡号的字符之间有空格,如下所示:
'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 查询是什么?