标签: postgresql

重写 9.2 版的查询

我想计算两个日期之间的范围,就像这个例子:

  代理 | 登录_开始 | 登录_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 …

postgresql postgresql-9.2

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

基于排名位置的数据离散化

假设我有一个包含架构的表:

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 的解决方案也可以

postgresql normalization window-functions

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

如何在 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)

postgresql foreign-key insert dump

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

从 SELECT 更新 BIGINT[] 列

我必须更新一个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}'

postgresql update array postgresql-9.2

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

搜索解密列

我在 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 密钥并在上面的查询中使用。

有没有人试过这个?

提前致谢。

postgresql encryption aws amazon-rds hsm

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

计数值以零而不是空值显示

我正在尝试进行查询,其中我将拥有 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)

这是架构:

1

但是我们可以忽略所有噪音并使用我们需要的东西: employee(id, super)

这是插入的小提琴:http : //dbfiddle.uk/? rdbms=postgres_9.6&fiddle= 4c08869d0e8eba6c82fd4957092379a1

关于如何做到这一点的任何想法?

postgresql

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

计算行的存储大小?

在多租户只有一个DB中,使用一列来隔离客户数据,即customer_id。

是否可以在所有表​​中获取某个客户的存储大小?

postgresql

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

.psqlrc - 设置 keepalives_idle 连接参数

是否可以设置keepalives_idle参数.psqlrc以便我打开的每个连接都使用它?

我终于找到了这个选项,它是我的连接断开问题的补救措施。

我真的很想为我打开的所有会话全局设置它psql

postgresql psql

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

Postgresql 日志“^M”的含义

我在试图弄清楚为什么查询需要很长时间才能执行时遇到了一些麻烦。当我检查日志时,似乎日志可能不完整。 PostgreSQL 日志

我的问题是,什么是^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)

postgresql postgresql-9.1

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

Postgresql BDR 更新更新冲突检测

显然只有行的新值在更新时在节点之间发送。那么怎么会有可检测的冲突呢?节点 A 从节点 B 接收更新,从节点 C 接收不同的更新。A 怎么知道发生了冲突?B 和 C 更新不是以某种明确定义的顺序进行的?

“last-update-wins”是什么意思?更新有时间戳吗?在哪种情况下它依赖于同步时钟?或者它只是意味着最后一次到达节点 A 的更新会获胜?

概括

postgresql postgresql-bdr

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