标签: postgresql

选择查询以检索具有空值的行

即使其中一个字段具有空值,我也需要从表中检索数据。下面是一个例子:

Select name, SUM(credit) as credit
From expenses
Where name like 'vendor0%'
and date like '2013%'
Group by name
Order by name asc
Run Code Online (Sandbox Code Playgroud)

此示例检索nameSUM(credit)只有当credit具有价值。name即使credit根本没有任何价值,我也需要从中检索所有内容。

这可能吗?

postgresql null aggregate select

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

Postgres 内部如何工作

我想了解 postgres 的工作原理,即内部如何处理查询,读写性能?我不知道从哪里开始,帮我参考

postgresql

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

如何在phpPgAdmin中将CYCLE添加到BIGSERIAL

我想申请CYCLE一个BIGSERIAL在phpPgAdmin的。

我已经看到如何通过查询来实现,但我更愿意通过 phpPgAdmin 来实现。

这可以用 phpPgAdmin 完成吗?如果是这样,如何?如果没有,如何CYCLE应用于预先存在的BIGSERIAL列?

postgresql auto-increment php

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

优化 Postgres 查询

我有从用户到地址表的一对一关系。一位用户可以拥有一个搜索地址和一个经过验证的地址。

我在地址表上有两个索引:

  • 状态字段索引
  • user_id 上的索引

我正在尝试仅为某些用户获取地址,而那些状态不是manual_verification.

这是我的查询:

SELECT users.id 
FROM "users" INNER JOIN addresses 
     ON  addresses.user_id = users.id 
     and addresses.type = 'VerifiedAddress' 
WHERE ("users".deleted_at IS NULL) 
  AND (users.id in (11144,10569,21519,783,15671,21726,17787,11665,
                    19579,12226,1324,9413,5461,20981,12906) 
  and addresses.state != 'manual_verification')
Run Code Online (Sandbox Code Playgroud)

解释上面的查询:http : //explain.depesz.com/s/rTj

需要 37 毫秒。有时更多取决于用户数量。

我认为这是一个很好的查询,但是我们的团队需要对此进行调查,我正在寻找一些优化技巧。我的意思是我做了一个字段选择,user_id(地址)和状态(地址)上有一个索引。

还有什么我可以做/尝试的吗?

更新

我发现这个查询的工作速度要快得多:

 SELECT "addresses"."user_id" 
    FROM "addresses" 
    WHERE "addresses"."type" IN ('VerifiedAddress') 
    AND (user_id in (9681,23824,23760,20098,962,14730,12294,9552,534,
                     553,5837,6768,6583,956,24179) and state != 'manual_verification')
Run Code Online (Sandbox Code Playgroud)

解释这个查询:http : //explain.depesz.com/s/nHrr

postgresql performance index postgresql-performance

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

postgresql 9.2 和 9.3 之间的流式复制

有谁知道设置 postgresql 9.3 从属设备来从 postgresql 9.2 主设备进行流式复制是否有问题?

postgresql replication postgresql-9.2 postgresql-9.3

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

psql:id SERIAL PRIMARY KEY 不是以 1 开头?

这是我不明白的地方,有人可以解释一下吗?

我创建一个表

CREATE TABLE cali (id SERIAL PRIMARY KEY,
    ALK_from char,
    ALK_to char,
    AND_from char,
    AND_to char);
Run Code Online (Sandbox Code Playgroud)

然后我只是尝试像这样从 csv 文件中插入一些数据

\COPY cali FROM '/home/.../data/output/id_cali.csv' (FORMAT CSV);
Run Code Online (Sandbox Code Playgroud)

这给了我这个错误:

ERROR:  value "4372840000" is out of range for type integer
CONTEXT:  COPY cali, line 1, column id: "4372840000"
Run Code Online (Sandbox Code Playgroud)

我知道 4372840000 会导致整数溢出。这就是为什么我首先尝试将值作为字符插入。

但我的理解是,这id SERIAL PRIMARY KEY是某种自动增量,为什么值 4372840000 用于列id

该文件看起来像这样

4372840012,4372840013,13,14,
4372840014,4372840014,15,15,
Run Code Online (Sandbox Code Playgroud)

postgresql bulkcopy serialization

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

如何加速包含大量带有 ILIKE 条件的连接的 Postgres 查询

我有一个奇怪的问题,我真的不明白。简单地说,我有一个包含 4 个表连接的连接,我相信它们都有适当的索引,但是查询需要大量的时间,除非我删除它的一部分。

更大的图片是,有 3 种类型的对象 A、B 和 C,每个对象都有自己的表,并且相关联,A 是孩子,B 是父母,C 是祖父母。除此之外,还有一个关系表 R,允许多个 B 与多个 C 相关,并且由于关系 R 属于特定类型,因此还有一个附加表 T。

现在在有问题的查询中,我试图获取类型 A 的记录列表,谁的父母与祖父母有特定类型的关系,祖父母的名字 ILIKE 另一个字符串。

表A有~700k条记录,表B有~60k条记录,表C有~8k条记录,表R有~90k条记录,表T有~100条记录。

由于 A 包含链接到字段 B.id 的字段 parent_id,因此 B 不需要直接包含在查询中。

所以查询是这样的:

SELECT DISTINCT A.id, A.name
FROM A
JOIN R ON A.parent_id=R.lhs
JOIN T ON R.type=T.id AND T.alias='type-name'
JOIN C ON R.rhs=C.id
WHERE A.flag=1 AND A.strvalue='value' AND C.name ILIKE '%substr%'
ORDER BY A.name ASC
LIMIT 25;
Run Code Online (Sandbox Code Playgroud)

像这样运行查询需要超过 10 秒(我从来没有让它运行完成,因为它需要太长时间)。

在我的实际设置中,我在关键 ID 字段中有类型,所以查询实际上挂在类型中的一个字段上,但索引也会这样做。

奇怪的是我已经尝试从查询中取出位,因此尝试确定花费太长时间的位,并删除 T 部分或 ILIKE 部分似乎使其在正常时间范围内执行。 …

postgresql performance optimization query-performance

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

根据列获得不同的结果并满足条件

我有以下选择,它是从带有列的表中选择的:

id、project_id、keyword_id、位置、数据示例:

i, p_id, k_id, p 
1,  1,    1,   4
2,  1,    1,   5
3,  1,    1,   6
5,  1,    2,   7
6,  1,    2,   8
7,  1,    3,   5
8,  1,    3,   7
Run Code Online (Sandbox Code Playgroud)

询问

SELECT
  pr.project_id,
  COUNT(DISTINCT pr.keyword_id) as total_keywords,
  COUNT(CASE WHEN position BETWEEN 4 AND 10 THEN position ELSE NULL END ) AS pos4,
  date(pr.created_at) AS created_at
FROM
  project_reports pr
GROUP BY pr.project_id, date(created_at)
Run Code Online (Sandbox Code Playgroud)

我只想在 pos 4-10 中获取不同的 keyword_id 的数量。但是使用我的SELECT我得到了所有这些。

预期数据示例:

p_id, total_keywords, pos4
1,      3, …
Run Code Online (Sandbox Code Playgroud)

postgresql postgresql-9.2 postgresql-9.3

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

从正在运行的 PostgreSQL 实例中“恢复”数据;数据目录被删除

我不小心/var/lib/pgsql/9.1/data从运行 postgresql 服务器中删除了数据目录。

我想当服务器重新启动时我会丢失我的数据。

我想知道 postgresql 是否有任何工具可以从正在运行的服务器实例中恢复数据,或者我必须使用系统数据恢复工具?

postgresql postgresql-9.1

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

将两行分成两列

我有下表:

id   | name   | action | count
------------------------------
 1   | Value1 |    0   | 27
 1   | Value1 |    1   | 49
 2   | Value2 |    0   | 7
 2   | Value2 |    1   | 129
 3   | Value3 |    0   | 9
 3   | Value3 |    1   | 7
Run Code Online (Sandbox Code Playgroud)

我需要使“动作”列出现两次,其中包含每一行的计数值,如下所示:

id   | name   | action1 | action2
---------------------------------
 1   | Value1 |    27   | 49
 2   | Value2 |    7    | 129
 3   | Value3 |    9    | …
Run Code Online (Sandbox Code Playgroud)

postgresql aggregate postgresql-8.4 aggregate-filter

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