标签: postgresql

如何让 Postgres DO $$ 在 bash 提示符下工作?

Linux RHEL 6.10 上的 Postgres 9.6.9

如果我将 DO 命令用双引号括起来,角色用单引号括起来,那么 bash 会解释$$,这显然会使命令失败。所以我切换了双引号和单引号,但现在它将NOT IN字符串文字视为列名,这也会引发错误。

那么,正如标题中所提到的,DO $$从命令行获取命令的魔力是什么?

$ export PGHOST=10.x.y.z
$ export PGUSER=postgres
$ psql -c 'do $$  
>          declare rolename text;
>          begin
>            for rolename in select rolname 
>                            from pg_roles 
>                            where rolname not in ("postgres",
>                                                  "pg_signal_backend",
>                                                  "TAP")
>            loop
>            execute "DROP ROLE " || rolename;                   
>            end loop;
>          end $$
>          ;'
ERROR:  column "postgres" does not exist
LINE …
Run Code Online (Sandbox Code Playgroud)

postgresql scripting postgresql-9.6

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

在重新索引时避免表锁定

我们使用的是 PostgreSQL 10,我们需要重新索引表以重新组织数据和可用空间。

我们遇到的问题是此操作锁定了我们需要始终保持可用的表。

我们找到了一个解决方法,但这似乎比标准释放的空间少得多reindex,所以我们将其关闭。

是否有一些解决方案可以让我们重新索引,并使表格始终可用?

postgresql postgresql-10

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

计算每个 DISTINCT 的所有行

如何计算 WHERE 语句的所有行:

SELECT DISTINCT column1 FROM table COUNT WHERE date::text LIKE '%2014%';
Run Code Online (Sandbox Code Playgroud)

我的输出:

column1
=======
info1
info2
info3
Run Code Online (Sandbox Code Playgroud)

期望输出:

column1|number_of_rows
=====================
info1  | 2000
info2  | 1500
info3  | 1000
Run Code Online (Sandbox Code Playgroud)

你能支持我吗 如何改进它?

提前致谢。

postgresql query count distinct

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

物化视图性能

Postgres 的文档说明:

虽然访问存储在物化视图中的数据通常比直接或通过视图访问底层表快得多,但数据并不总是最新的;

https://www.postgresql.org/docs/9.6/rules-materializedviews.html

为什么它“通常要快得多”?

postgresql materialized-view

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

将引号放在整数列的 WHERE 子句中有什么后果?

我有一个包含some_column数据类型列的表integer
我注意到我的 PostgreSQL 10.6 实例足够智能,可以将以下两个查询解释为相同:

select * from my_table where some_column = 5; -- no quotes

select * from my_table where some_column = '5'; -- quotes added
Run Code Online (Sandbox Code Playgroud)

在列的where子句中添加引号有什么影响integer
它会对一个包含 2000 万行的大表产生性能影响吗?
(有一个索引some_column。)

postgresql performance syntax postgresql-10 query-performance

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

在 Postgres 中将 WITH 与 CREATE TEMPORARY TABLE AS SELECT ... 一起使用?

我想使用 select 语句创建一个临时表,该语句使用 WITH 语句(而不是 CREATE TEMPORARY TABLE 的 WITH 语句)中指定的临时视图。

例如类似的东西

WITH a AS (
SELECT 1 foo, 2 bar 
), b AS (
SELECT 4 bar, 5 baz
)
CREATE TEMPORARY TABLE foo AS
SELECT * from a JOIN b ON (a.bar=b.bar)
Run Code Online (Sandbox Code Playgroud)

如果我注释掉 CREATE TEMPORARY TABLE 行,这行得通。如何使用SELECT的查询结果创建临时表,而不将临时视图重写为单个查询?

postgresql temporary-tables

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

DBEaver 与 PG 管理员

当我使用 Pg Admin 工具在 Postgres 数据库中运行一个查询时,它只用了 2 秒(我可以看到计划中使用了并行工作器)但是当我在 DBeaver 中运行相同的查询时,它需要大约 3 分钟才能完成(计划是不同的,我没有看到并行工作人员被调用。有人可以解释为什么这些工具存在差异?驱动程序是否导致了不同的计划和执行时间?PG Admin 用于连接 Postgres 数据库的驱动程序是什么? ?.

postgresql dbeaver pgadmin-4

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

Postgres EXPLAIN ANALYZE 超级慢

Redhat 上有 Postgres 9.6 我想解释一下慢查询(相当复杂的一个),它需要太多时间。我与 EXPLAIN ANALYZE 的会话消耗了一个 CPU 的 100% 并且即使在 24 小时后也没有完成。Postgres无法建立执行计划如何分析问题?

postgresql performance explain

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

Postgres 如何在磁盘上存储许多 varchars?

我有一张有 2 亿行的 80 场演出的桌子。我正在尝试加快速度,我注意到它有大量的 varchar 列。在模式中,它们的长度范围从 15 个字符到 250 个字符,大多数设置为 50。所有 varchars 的总长度为 850 个字节。在实际使用中,很多字段为空或者字符串很短。

我知道 Postgres 使用 8k 页面大小。现在,如果我必须进行全表扫描并假设最坏的情况,每页 8k / 850 = 9.6 条记录。浏览我的完整表格将(并且确实)需要很长时间。然而实际上,由于这些字段中的大多数都是空的,那么磁盘上将为这些 varchar 分配多少空间?每页是否会有更多记录,或者 Postgres 是否会添加一些填充以方便以后更新?

我问的原因是因为我正在探索通过将尽可能多的不常访问的 varchars 列从该表中踢出并进入我们将通过联接访问的另一个列来提高性能的想法。

感谢您对我的逻辑的任何确认或否认。

postgresql

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

从“组合,任一内部连接”中获取结果

我有一种感觉,这肯定被问过多次,但我只是找不到解决方案,甚至可能因为难以解释而提出问题。

我们都知道内连接基本上给出了两个表的“交集”。因此多个内连接给出了所有表的交集。但是,我希望获得一个内部连接,该连接获得表 B 与 A表 C 与 A的交集。

对于获得所有组织的请求,我要么是主持人,要么是管理员。

SELECT *
FROM organization
INNER JOIN moderator_organization
  ON organization.id = moderator_organization.organization AND moderator_organization.user = 10
INNER JOIN admin_organization
  ON organization.id = admin_organization.organization AND admin_organization.user = 10
Run Code Online (Sandbox Code Playgroud)

然而,上面只会选择用户(ID 为 10)既是管理员又是组织者的组织,而不是其中任何一个都为真的组织。要在图表中可视化,我想:

在此处输入图片说明

红色区域是我想要请求的地方。

postgresql join database-design union

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