标签: postgresql

如何使用表列中的值作为 SELECT 查询中的字段名称?

设想:

Table1 的字段名称命名为 testtable

ID、名称、大小、宽度、高度

Table2 的字段名称命名为 errortable

id,desc,field1,field2,operator

errortable 的值

+----+-------------------------------------+--------+--------+----------+
| id |                desc                 | field1 | field2 | operator |
+----+-------------------------------------+--------+--------+----------+
|  1 | size should not greater than width  | size   | width  | >        |
|  2 | size should not greater than height | size   | height | >        |
|  3 | with should be equal to height      | width  | height | <>       |
+----+-------------------------------------+--------+--------+----------+
Run Code Online (Sandbox Code Playgroud)

现在我想检查testtable

  1. 计算大小 > 宽度的所有记录。
  2. 计算大小 …

mysql postgresql dynamic-sql plpgsql

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

在具有小 LIMIT 的外部查询中添加 ORDER BY 时,复杂视图会变慢

我在视图中有一个非常大的查询(让我们称之为a_sql),这真的很快,除非我ORDER BYSELECT带有小的外部使用LIMIT

SELECT
customs.id AS custom_id, customs.custom_name AS custom_name, customs.slug AS slug, customs.use_case AS custom_use_case,
SUM(CASE WHEN designers.id = orders.user_id AND orders.bulk = 't' THEN order_rows.quantity ELSE 0 END) AS sale_bulk,
SUM(CASE WHEN designers.id = orders.user_id AND orders.bulk = 'f' THEN order_rows.quantity ELSE 0 END) AS sale_not_bulk,
SUM(CASE WHEN designers.id = orders.user_id THEN order_rows.quantity ELSE 0 END) AS sale_total,
SUM(CASE WHEN designers.id <> orders.user_id AND orders.bulk = 't' THEN order_rows.quantity ELSE 0 …
Run Code Online (Sandbox Code Playgroud)

postgresql performance optimization view postgresql-9.4 postgresql-performance

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

如何使用 Postgres 在服务器和客户端之间使用 SSL/TLS?

我对安全性了解不多。我正在云服务中使用我的数据库部署虚拟机。我想加密此服务器与任何客户端之间的所有通信。我怎样才能做到这一点 ?

更多信息: 我已经从 postgres 文档 [ 1 , 2 ] 中阅读了很多材料,但我对其中的内容了解不多。我遵循了本教程,现在我有了这些文件:

valter@eniac:test$ ll
total 28
drwxr-xr-x 2 valter valter 4096 Jan 25 12:54 ./
drwxr-xr-x 3 root   root   4096 Jan 25 12:50 ../
-rw-rw-r-- 1 valter valter 1834 Jan 25 12:53 privkey.pem
-rw-rw-r-- 1 valter valter 4783 Jan 25 12:54 server.crt
-rw------- 1 valter valter 1675 Jan 25 12:53 server.key
-rw-rw-r-- 1 valter valter 3672 Jan 25 12:53 server.req
Run Code Online (Sandbox Code Playgroud)

但我不知道该怎么处理他们。root.crtroot.crt文件在哪里?我怎样才能生成它们?我把这些生成的文件放在哪里?我应该在客户端做什么?

postgresql ubuntu

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

Postgres 9.5 外部表继承不使用索引

在 PostgreSQL 9.5.0 中,我有一个按月收集数据的分区表。尝试使用PostgreSQL新增的外表继承特性,将一个月的数据推送到另一台PostgreSQL服务器,结果得到了外表。当我从主服务器运行查询时,执行查询所需的时间比在我拥有外部表的服务器上长 7 倍。我没有通过网络传递大量数据,我的查询如下所示:

explain analyze
SELECT source, global_action, paid, organic, device, count(*) as count, sum(price) as sum
FROM "toys"
WHERE "toys"."container_id" = 857 AND (toys.created_at >= '2015-12-02 05:00:00.000000') AND
(toys.created_at <= '2015-12-30 04:59:59.999999') AND ("toys"."source" IS NOT NULL)
GROUP BY "toys"."source", "toys"."global_action", "toys"."paid", "toys"."organic", "toys"."device";

HashAggregate  (cost=1143634.94..1143649.10 rows=1133 width=15) (actual time=1556.894..1557.017 rows=372 loops=1)
   Group Key: toys.source, toys.global_action, toys.paid, toys.organic, toys.device
   ->  Append  (cost=0.00..1143585.38 rows=2832 width=15) (actual time=113.420..1507.373 rows=76593 loops=1)
         ->  Seq Scan on toys  (cost=0.00..0.00 rows=1 width=242) …
Run Code Online (Sandbox Code Playgroud)

postgresql performance inheritance foreign-data postgresql-9.5 postgresql-performance

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

为什么这个 PostGIS 查询需要这么长时间才能运行?

我一般是 PostGIS 和 SQL 的新手。我正在对多边形运行查询,我希望它只选择不同的几何图形,然后修复 ( ST_MakeValid()) 那些不同的几何图形。从而在修复无效几何图形的过程中删除重复的几何图形。但是,查询需要很长时间才能运行(几天)。这是 SQL 语句:

CREATE TABLE schema.table_geomfix AS 
SELECT gid,id, ST_MakeValid(geom) as geom 
FROM schema.table_polygons 
WHERE geom IN (SELECT DISTINCT geom FROM schema.table_polygons);
Run Code Online (Sandbox Code Playgroud)

分别运行两个 select 语句很快。大约 1 分钟makevaliddistinct陈述和 15 秒的陈述。

  1. 为什么运行组合语句需要这么长时间?
  2. 关于改进查询以使其更快的任何建议?

注意:geom列上有一个索引。

postgresql performance postgis postgresql-performance

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

获取昨天的记录,但每小时

我目前正在从我的数据库中获取昨天的所有数据,但我想获取每小时的数据。这是我的查询:

select
    camera_id,
    count(*) as snapshot_count
from snapshots
where created_at >= TIMESTAMP 'yesterday' 
  and created_at <  TIMESTAMP 'today'
group by camera_id
Run Code Online (Sandbox Code Playgroud)

它给了我昨天的所有记录,但是怎么可能从昨天获取记录但每个小时?

PS:我想在一个查询中运行它,而不是 24 个查询

postgresql postgresql-9.3

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

表中所有列的组合索引是否有任何意义?

我偶然发现了在表的所有列上设置索引的几种情况。在我看来,这将与没有索引的全表扫描一样有效。这是正确的还是这样的索引有什么好处?我已经在 Postgres 上的 Active Record 中看到了这个,所以这个设置是我的主要关注点。我也想知道这在不同的数据库之间是否以及如何不同。

postgresql index

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

在 PostgreSQL 中获取下一个 bigserial 值

假设我有一个带id BIGSERIAL列的表。我刚刚开始了一个新的会话。我想知道id我插入的下一行是什么。我怎么能说这个?

我不能简单地SELECT MAX(id) FROM my_table(如果没有找到就返回 1),因为如果我之前删除了东西,下一个id不会是 1,而是会更高。

我已经看过其他使用currval()和的答案nextval()。除非我在当前会话中插入,否则它们不起作用......而且我不想插入一行并查看我得到的 ID,哈哈。

我将要锁定表并在客户端上从 Python 脚本插入大量行,该脚本也在字典中跟踪行 ID。行 ID 必须匹配,所以我需要知道第一个是什么。我很惊讶没有其他人正在处理这种情况。

编辑:除非我在当前会话中插入,否则我对这些功能不起作用的看法是错误的,但请参阅下面的评论。

postgresql sequence

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

更新 jsonb 列是否会触发该列上所有表达式索引的更新?

我在 PostgreSQL 中使用 jsonb 类型。我经常进行以下类型的更新(jdocjsonb 列在哪里):

UPDATE my_table SET jdoc = jdoc || '{a: "Hello World!"}'::jsonb WHERE id = 123
Run Code Online (Sandbox Code Playgroud)

我在 jsonb 列上有许多表达式索引:

CREATE INDEX ix_b ON my_table some_function(jdoc->>b)
CREATE INDEX ix_c ON my_table some_other_function(jdoc->>c)
Run Code Online (Sandbox Code Playgroud)

如您所见,我只更改了jdoc->a,但我必须设置整个jdoc列。因此,我是否会因更新索引jdoc->b而遭受全部性能损失jdoc->c?或者 PostgreSQL 足够聪明以注意到这些值没有改变,因此索引不需要更新?如果我遭受了全部的性能损失,有没有办法避免它?

postgresql index json

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

PostgreSQL 流复制停止更新

我有四个 PostgreSQL 9.5 实例在 EC2 上运行,使用 m4.8xlarge 实例,RAID0 设置中有五个 PIOPS SSD 和一个单独的 XLOG 驱动器。直到今天早上,我的复制延迟从未超过一两分钟,但现在复制在大约 30 分钟后在所有实例上完全失败。

重新启动 Postgres 将问题再解决半小时。

没有 CPU 争用,iowait 通常小于 1%。阻止对服务器的读取,认为它可能会不堪重负,什么也不做。我无法弄清楚这里的问题是什么,除了亚马逊的问题。

谁能给我一些想法如何解决这个问题?日志中没有任何内容,replay_location(来自 pg_stat_replication)只是停止更新,直到我重新启动从站。

postgresql performance postgresql-9.5 postgresql-performance

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