我想计算两个日期之间的范围,就像这个例子:
代理 | 登录_开始 | 登录_END --------+----------------------+---------------- --- 101 | 2016-01-01 06:00:00 | 2016-01-01 06:29:59 102 | 2016-01-01 06:00:00 | 2016-01-01 08:20:00 103 | 2016-01-01 06:00:00 | 2016-01-01 06:01:00 101 | 2016-01-01 10:00:00 | 2016-01-01 10:01:00 101 | 2016-01-01 10:02:00 | 2016-01-01 10:03:00
...并在 30 分钟和代理之间分开几个小时,只是一个例子:
时间 | LOGIN_QTY ---+----------- 06:00 - 06:30 | 3 06:30 - 07:00 | 1 07:00 - 07:30 | 1 07:30 - 08:00 | 1 08:00 - 08:30 | 1 10:00 - 10:30 | 1 …
假设我有一个包含架构的表:
id value
1 0.3
2 0.6
5 0.1
4 0.7
Run Code Online (Sandbox Code Playgroud)
由...提供
CREATE TABLE foo AS
SELECT * FROM (
VALUES (1,0.3::float),(2,0.6),(5,0.1),(4,0.7)
) AS x(id, value)
Run Code Online (Sandbox Code Playgroud)
我想离散值列。
这个想法是对值进行排序,并将 1 与前半部分相关联,将 2 与第二部分相关联。
id value normalized
1 0.3 1
2 0.6 2
5 0.1 1
4 0.7 2
Run Code Online (Sandbox Code Playgroud)
我不知道如何在 SQL 中做到这一点,有什么帮助吗?
PS:我正在使用 Postgres,所以任何依赖 Postgres 的解决方案也可以
我正在使用 Postgres 9.5。我为我的三个表创建了一个 INSERT 转储文件。为了避免出现外键错误,我将以下内容添加到文件的顶部和底部(“...”是所有插入的位置)...
SET statement_timeout = 0;
SET lock_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SET check_function_bodies = false;
SET client_min_messages = warning;
SET row_security = off;
SET search_path = public, pg_catalog;
ALTER TABLE addresses DISABLE TRIGGER ALL;
ALTER TABLE table1 DISABLE TRIGGER ALL;
ALTER TABLE table2 DISABLE TRIGGER ALL;
…
ALTER TABLE addresses ENABLE TRIGGER ALL;
ALTER TABLE table1 ENABLE TRIGGER ALL;
ALTER TABLE table2 ENABLE TRIGGER ALL;
Run Code Online (Sandbox Code Playgroud)
但是,即使我运行这个文件,我也会收到类似的错误
ERROR: insert or update …Run Code Online (Sandbox Code Playgroud) 我必须更新一个bigint[]名为permissao_ver.
示例值:'{1,2,3,4,5,11,44,56,75,11}'.
伪代码:
UPDATE callcenter.pausa
SET permissao_ver = '{"(SELECT cod_grupo FROM crm.usuariosgrupos
WHERE habilitar = 1)"}'::bigint[]
WHERE habilitado = 1 AND permissao_ver is null
Run Code Online (Sandbox Code Playgroud)
我需要获取上面选择的代码将以与bigint[]列匹配的格式返回。喜欢:'{XX, XX, XX, X, XX, X}'。
我在 AWS RDS 上使用 Postgres。
我的应用程序正在使用 AWS KMS 加密对表中的选定列进行加密。
我尝试过,但找不到配置 KMS 密钥并使用decrypt()in select 查询的方法。
例如,我的应用程序正在myTable.secureColumn使用 KMS 进行加密。
现在,我正在尝试触发以下查询:
select * from myTable where decrypt(secureColumn, 'key', 'aes') = 'data';
Run Code Online (Sandbox Code Playgroud)
我没有找到如何在 pgCrypto 中配置 KMS 密钥并在上面的查询中使用。
有没有人试过这个?
提前致谢。
我正在尝试进行查询,其中我将拥有 id 和该人是他们的上司的员工人数,还有不是经理的人,应该出现并且计数为零。
这就是我所做的,但那些不是经理的人显示为空:
create view scnt as (
select E1.super, count(distinct E1.id) cnt
from Employee E1 left outer join Employee E2
on E1.super = E2.id
group by E1.super
);
create view numSuper as (
select E.id, S.cnt
from Employee E left outer join scnt S
on S.super = E.id or E.id = null
);
select * from numSuper
Run Code Online (Sandbox Code Playgroud)
这是架构:

但是我们可以忽略所有噪音并使用我们需要的东西: employee(id, super)
这是插入的小提琴:http : //dbfiddle.uk/? rdbms=postgres_9.6&fiddle= 4c08869d0e8eba6c82fd4957092379a1
关于如何做到这一点的任何想法?
在多租户只有一个DB中,使用一列来隔离客户数据,即customer_id。
是否可以在所有表中获取某个客户的存储大小?
是否可以设置keepalives_idle参数.psqlrc以便我打开的每个连接都使用它?
我终于找到了这个选项,它是我的连接断开问题的补救措施。
我真的很想为我打开的所有会话全局设置它psql。
我在试图弄清楚为什么查询需要很长时间才能执行时遇到了一些麻烦。当我检查日志时,似乎日志可能不完整。

我的问题是,什么是^M?我account_invoice在 Select 语句之前看到了一个相关的错误,它与问题有关吗?
我确定这个陈述是不好的,这需要很多时间,我用 Explain 做了一些研究并发现了这一点。

这是我第一次遇到这个问题,它似乎消耗了很多cpu(cpu负载超过10)。我目前重新启动 postgresql 服务器以使事情恢复工作,这确实不是我将来想要实施的解决方案。任何建议都非常感谢。
[2017-05-31 13:32:26 ICT] app=x db=y user=z command=SELECTSTATEMENT: SELECT province.name,district.name,subdistrict.name,district.icc_ship_area_code^M
FROM province,district,subdistrict,account_invoice,contact^M
WHERE province.id = province_id^M
AND district.id = subdistrict.district_id^M
database=# EXPLAIN SELECT
province.name,district.name,subdistrict.name,district.icc_ship_area_code FROM province,district,subdistrict,account_invoice,contact WHERE provi
nce.id = province_id AND district.id = subdistrict.district_id; QUERY PLAN
----------------------------------------------------------------------------------------------------
Hash Join (cost=7771211730.77..272930003461.72 rows=23422097264624 width=74)
Hash Cond: (district.province_id = province.id)
-> Hash Join (cost=35.61..301.98 rows=7426 width=55)
Hash Cond: (subdistrict.district_id = district.id)
-> Seq Scan on subdistrict (cost=0.00..164.26 rows=7426 width=27) …Run Code Online (Sandbox Code Playgroud) 显然只有行的新值在更新时在节点之间发送。那么怎么会有可检测的冲突呢?节点 A 从节点 B 接收更新,从节点 C 接收不同的更新。A 怎么知道发生了冲突?B 和 C 更新不是以某种明确定义的顺序进行的?
“last-update-wins”是什么意思?更新有时间戳吗?在哪种情况下它依赖于同步时钟?或者它只是意味着最后一次到达节点 A 的更新会获胜?
概括
Last Update Wins 意味着基于提交时间(需要相当同步的时钟),而不是节点看到更新的时间。所以应该是全局一致的。
没有任何可检测的更新/更新冲突(约束违规除外)。如果是的话,他们将很难解决。
冲突解决是逐行的,而不是逐个事务的。另见http://sdf.org/~riley/blog/2016/01/04/is-bi-directional-replication-bdr-in-postgres-transactional/
postgresql ×10
amazon-rds ×1
array ×1
aws ×1
dump ×1
encryption ×1
foreign-key ×1
hsm ×1
insert ×1
psql ×1
update ×1