标签: postgresql

如何最有效地找出记录是否有子记录?

我正在编写一个从parent表中返回单个记录的查询。如果它有任何孩子,我也想在这个查询中返回。这是一对多的关系。

parent:
 -parent_id
 -name

child:
-child_id
-name
-parent_id
Run Code Online (Sandbox Code Playgroud)

我的第一直觉是编写以下查询:

select name, (select count(child_id) from child c  where c.parent_id=p.parent_id) children
     from parent p
     where name like 'some name'
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有更有效的方法来做到这一点,因为我实际上并不关心计数,只关心它是否有孩子。任何指针?

postgresql performance performance-tuning

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

为什么 pg_hba.conf 有时会添加随机规则?(postgresql)

我在 Linux 机器上设置了 postgres 10.4,有时在 pg_hba.conf 顶部会随机出现一些规则,只允许用户“pgdbadm”进行 MD5 连接。我不确定数据库是否被黑,但在更改密码并检查 pgdbadm 不存在后,我仍然不时看到新规则。数据库是否有可能被泄露?

如果我没记错的话,这三个规则如下:

local all all 0.0.0.0/0 reject
host all postgres 0.0.0.0/0 reject
host all pgdbadm 0.0.0.0/0 md5
Run Code Online (Sandbox Code Playgroud)

任何关于正在发生的事情的解释以及潜在的解决方案将不胜感激。

编辑:我发现在设置 pg_hba.conf 时我使用了一个规则,所有连接都不需要密码。这可能允许机器人登录并创建不需要的数据库/其他东西,所以我将全新安装 Ubuntu 并备份数据库。

postgresql

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

如何在 postgresql 中获取主机名?

有什么方法可以在 postgresql 中获取主机名/服务器名,例如 SQL Server 中的 @@ServerName?

postgresql

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

postgres; 索引会自动重新索引新数据吗?

如果我在 Postgres 表中有一堆行,然后创建一个索引,如果在创建后插入新数据行,索引是否会自动更新?

或者说,REINDEX 是仅在一些罕见的情况下需要,还是在添加新数据时才需要?

postgresql performance postgresql-performance

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

100k DDL 语句上的 Postgres 事务 OOM

我们在 PostgreSQL 的单个事务中执行大约 100k DDL 语句。在执行过程中,各个 Postgres 连接的内存使用量逐渐增加,一旦它无法获得更多内存(在 3GB 内存上从 10MB 使用量增加到 2.2GB),OOM 杀手用 9 命中它,导致 Postgres 进入恢复模式.

BEGIN;

CREATE SCHEMA schema_1;
-- create table stmts - 714
-- alter table add pkey stmts - 714
-- alter table add constraint fkey stmts - 34
-- alter table add unique constraint stmts - 2
-- alter table alter column set default stmts - 9161
-- alter table alter column set not null stmts - 2405
-- alter table add check …
Run Code Online (Sandbox Code Playgroud)

postgresql performance transaction ddl postgresql-9.6 postgresql-performance

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

Amazon RDS Postgresql 中的 apgcc 架构是什么?

最近apgcc,在我们测试的 Aurora Postgresql 集群(欧盟西部地区)的每个数据库中都出现了一个名为的神秘新模式。它归rdsadmin帐户所有。它是什么,它来自哪里?

pgadmin 中的架构

我知道东京地区apgcc发布公告中提到了。Twitter透露,这也发生在其他人身上

postgresql aurora amazon-rds

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

使用Postgresql逻辑复制,怎么知道订阅者被追上了?

Postgresql 有一些有趣的监控工具,用于监控新的逻辑复制系统的进度,但我不是很了解它们。我知道的两个工具是:

pg_stat_replication
Run Code Online (Sandbox Code Playgroud)

它是兄弟姐妹:

pg_stat_subscription
Run Code Online (Sandbox Code Playgroud)

我已经阅读了这些文档,但他们没有说明如何知道副本是否实际同步,并且解释这些表对我来说似乎并不明显。有人可以解释一下吗?

postgresql replication

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

在postgresql函数中循环jsonb对象的键/值对

我正在尝试在 Postgres 中创建一个函数,该函数可以遍历给定jsonb对象中的每个键/值对。

create or replace function myFunction
(input jsonb)
returns jsonb as $$
BEGIN

    // foreach(key in input)
    //       do some math operation on its corresponding value

    returns input;

END; $$
Run Code Online (Sandbox Code Playgroud)

参数输入应为 jsonb 对象,例如{"a":1, "b":2, "c":3}.

我想遍历对象中的每个键/值对。从我的评论中可以看出,我曾经使用更通用的编程语言(如 c、java 等)编写后端代码。所以我不擅长 SQL。我曾尝试在线搜索,但他们谈论如何遍历jsonb数组而不是对象。所以真的卡在这里了。

postgresql plpgsql json

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

在 postgreSQL-10 中创建存储过程时出错

我无法让我的第一个存储过程工作,所以我从手册中复制了这个例子:

CREATE PROCEDURE insert_data(a integer, b integer)
LANGUAGE SQL
AS $$
INSERT INTO tbl VALUES (a);
INSERT INTO tbl VALUES (b);
$$;

CALL insert_data(1, 2);
Run Code Online (Sandbox Code Playgroud)

我收到以下错误消息:

ERROR:  syntax error at or near "PROCEDURE"
LINE 1: CREATE PROCEDURE insert_data(a integer, b integer)
               ^
SQL state: 42601
Character: 8
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

我在本地主机上运行数据库,以管理员用户身份运行。我自己安装的。安装过程无错误完成,我能够创建表、函数、触发器等。

postgresql stored-procedures errors postgresql-10

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

psql \e 的鲁莽行为

psql 13.2 退出编辑器时,无论退出编辑器后如何,都会执行查询缓冲区 - 在这种情况下,缓冲区现在可能保存最近执行的 SQL 查询。

重现:

  1. vim使用\e\e filenamepsql控制台启动编辑器(在我的情况下)。
  2. 输入与否,没有区别。
  3. 取消编辑:q(或:q!强制)

预期行为:回到启动编辑器之前的状态。(我取消了编辑!)
观察到的行为:重新执行上次执行的 SQL 查询。

似乎发生了什么\e

  1. 它执行(相当于)\p,因此当前查询缓冲区包含前一个命令,当它为空时。(编辑文件时用户看不到!) 手册\p

    \p 或者 \print

    将当前查询缓冲区打印到标准输出。如果当前查询缓冲区为空,则打印最近执行的查询。

  2. 启动编辑器。如果提供了文件名,则加载文件,否则加载查询缓冲区。

  3. 如果编辑器以写入结束,则将结果复制到查询缓冲区。
    如果编辑被取消(:q在 vim 中),不要覆盖查询缓冲区。(它现在保存了之前的命令!)

  4. 执行查询缓冲区。或者,准确地说,这样做:

行为似乎可以\p(只是复制查询缓冲区,没有造成任何伤害),但不能\e执行,它可以执行我什至没有看到的命令。

这是一个错误吗?
无论哪种方式,我至少想在离开编辑器时禁用自动执行。但这似乎不可能。或者我错过了什么?

postgresql psql

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