标签: postgresql

如何使用 pgAdmin 3 编辑`postgresql.conf`?

如何使用 pgAdmin 应用程序编辑“postgresql.conf”文件?

在 Postgres 9.3.x 上使用 pgAdmin 1.18.1,当我选择File>Open postgresql.conf,会出现一个文件选择器对话框。而且,是的,我在 pgAdmin 中以超级用户“postgres”的身份连接。

我知道我已经在旧版本的 Postgres 中做到了这一点。

postgresql pgadmin

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

如何仅根据字段名称访问 NEW 或 OLD 字段?

我正在编写一个验证触发器。触发器必须验证数组的总和是否等于另一个字段。由于我有许多此验证的实例,因此我想编写一个过程并创建多个触发器,每个触发器都有一组不同的要检查的字段。

例如,我有以下架构:

CREATE TABLE daily_reports(
     start_on date
   , show_id uuid
   , primary key(start_on, show_id)

     -- _graph are hourly values, while _count is total for the report
   , impressions_count bigint not null
   , impressions_graph bigint[] not null

   -- interactions_count, interactions_graph
   -- twitter_interactions_count, twitter_interactions_graph
);
Run Code Online (Sandbox Code Playgroud)

验证必须确认impressions_count = sum(impressions_graph)

我被卡住了,因为我不知道如何NEW从 plpgsql 中动态访问一个字段:

CREATE FUNCTION validate_sum_of_array_equals_other() RETURNS TRIGGER AS $$
DECLARE
  total bigint;
  array_sum bigint;
BEGIN
  -- TG_NARGS = 2
  -- TG_ARGV[0] = 'impressions_count'
  -- TG_ARGV[1] = 'impressions_graph'

  -- How …
Run Code Online (Sandbox Code Playgroud)

postgresql trigger plpgsql composite-types

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

pgAdmin 在任何远程操作上都非常慢

我从远程连接到我们的开发服务器的本地 pgAdmin 运行此查询:

select * from users order by random() limit 1;

它挂起17秒并显示

Total query runtime: 148 ms. 
1 row retrieved.
Run Code Online (Sandbox Code Playgroud)

它也挂在任何操作上:甚至右键单击表格。

之后我通过 RDP 连接并在相同的 pgAdmin 版本中运行相同的查询,该版本立即显示结果query time: 32 ms

然后我再次从本地 pgAdmin 运行查询:

Total query runtime: 337 ms.
1 row retrieved.
Run Code Online (Sandbox Code Playgroud)

我对服务器的 ping 时间为 130 毫秒。连接速度应该足够了,因为我可以非常快地通过 FTP 上传文件。

使用本地 psql 运行时的相同查询在几秒钟内完成,包括连接时间。

我的本地 pgAdmin 中与我的本地数据库副本相同的查询也立即完成。

pgAdmin 版本是 1.20.0。也检查了最新的 1.22 - 仍然相同。

我可以做些什么来加速 pgAdmin?

请注意 psql 工作正常,我在那里没有看到相同的延迟。

17 秒查询运行的 pgAdmin 日志:

2016-02-06 16:18:03 INFO   : queueing : select …
Run Code Online (Sandbox Code Playgroud)

postgresql performance pgadmin postgresql-9.4 postgresql-performance

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

插入 10000 个新行?

大概有一个直接而简单的解决方案。我想创建 10000 个新行 - 这些行按顺序编号,每行没有数据(按顺序编号的 id 除外)。我用过了:

INSERT INTO bins (id)
VALUES (1)
Run Code Online (Sandbox Code Playgroud)

创建 ID 为“1”的单行

如何创建具有相应 ID 号的 10000 行?

版本:PostgreSQL 9.5.5

postgresql postgresql-9.5

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

Postgres:截断如果存在于带有参数的 psql 函数中

我正在尝试获取一个 psql 函数,如果它存在,它将截断给定的表名。我一直在尝试多种功能,但到目前为止都没有奏效。这是代码:

CREATE OR REPLACE FUNCTION truncateIfExists(tableName TEXT)
returns void
as $$
BEGIN
EXECUTE format(
'IF EXISTS (
    SELECT *
    FROM information_schema.tables 
    WHERE table_name =' || tableName || '
    )
THEN
TRUNCATE tableName;
END IF;
');
END;
$$language plpgsql
Run Code Online (Sandbox Code Playgroud)

现在,我可以使用硬编码名称使其在一个简单的过程中工作:

do $$
begin
IF EXISTS (SELECT * 
 FROM information_schema.tables 
 WHERE table_name = genre_epf)
 THEN
 TRUNCATE genre_epf;
END IF;
end
$$;
Run Code Online (Sandbox Code Playgroud)

但是我无法理解如何混合这两个查询。我在这里做错了什么?

postgresql functions

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

Homebrew 安装 PostgreSQL 无法连接,数据库文件与服务器不兼容

这是我今天尝试使用以下命令登录到我的 localhost PosgreSQL 数据库时收到的错误消息psql

psql: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
Run Code Online (Sandbox Code Playgroud)

我使用 Homebrew 安装了 PostgreSQL,今天早上我使用该实用程序卸载并重新安装了 PostgreSQL,没有观察到任何变化。该psql客户端工作正常,我仍然可以使用它来连接到网络上的数据库。我一两个月只连接到我的本地数据库一次,之前它运行良好,所以我假设这是由于一些自动更新,但我不知道是哪个。Mac OS 最近将自身升级到 High Sierra (10.13)。

2014 年这里出现了相同的错误消息(链接),但这是一个人在启动服务器时遇到问题的情况。就我而言,我相信它正在运行——我已经使用过brew services start postgresql,是的,我今天重新启动了几次。但是,错误中提到的文件 ,/tmp/.s.PGSQL.5432在我的系统上不存在。我认为这是一些配置错误的情况。任何人都知道如何解决?

更新:我尝试手动启动服务器(按照 Evan 的建议),我认为我取得了突破。这是我尝试手动启动时遇到的错误:

FATAL: database files are incompatible with server
DETAIL: The data directory was initialized by PostgreSQL version 9.6, which is not compatible with this …
Run Code Online (Sandbox Code Playgroud)

postgresql psql mac-os-x

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

自动检测“random_page_cost”与“seq_page_cost”

我阅读了这篇关于 SSD 上 PostgreSQL 性能的文章:

https://amplitude.engineering/how-a-single-postgresql-config-change-improved-slow-query-performance-by-50x-85593b8991b0

这两个配置似乎很重要random_page_costvsseq_page_cost

由于两个参数都需要匹配特定的硬件,我想知道是否可以自动检测匹配值?

更新

我脑子里有这些步骤:

  1. 脚本创建一些虚拟表
  2. 脚本向表中插入数据
  3. 脚本执行一些查询
  4. 脚本显示 random_page_cost 和 seq_page_cost 的匹配值
  5. 人工或自动化系统获取这些值并更新配置。这一步不是问题的一部分。

postgresql ssd

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

我们什么时候应该在 Postgresql 中使用表分区?

背景:我们的数据库中有两个相当大的表,一个包含 8000 万条记录,另一个包含 1.6 亿条记录。我们看到了性能问题,并正在考虑对这两个表使用表分区。

我的问题是:是否有很多记录表明我们应该分区或不分区以保持良好的性能?我知道没有“一刀切”的答案,但可能有一个一般性建议,例如“传递了 X 百万条记录,您应该对表进行分区”。有很多关于如何分区的指导,但没有关于“何时”的指导。

postgresql partitioning postgresql-performance

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

Postgres COPY 与冲突忽略 - 可能吗?

我想在 Postgres 命令中添加冲突忽略copy。我知道我可以将数据复制到没有唯一索引/主键的表中,然后使用插入语法on conflict。但我想知道这是否可以直接来自COPY

postgresql copy postgresql-12

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

UNION ALL 子句的结果是否始终按顺序附加?

根据标准 SQL UNION/UNION ALL不保证没有外部ORDER BY子句的任何特定排序顺序 - 就像 SQL 中几乎没有任何地方不保证排序顺序一样ORDER BY

然而,Postgres 对 的普通情况使用“附加”步骤UNION ALL,因此第一个分支的结果(即使在其分区中未排序)总是出现在下一个分支之前,等等。Postgres 只是按照给定的顺序附加每个分支的结果。这与以下LIMIT条款特别相关:

SELECT 1 FROM tbl  -- or any complex query
UNION ALL
SELECT 2
LIMIT  1
Run Code Online (Sandbox Code Playgroud)

显然这不适用于UNION(without ALL)。但除此之外,我从未见过 Postgres 无序返回,即上述查询中的“2”SELECT ,而第一个查询也会返回行。即使第一站的费用极其昂贵,也不会。

我过去曾对这种行为进行过查询。现在我遇到了一个说法, Postgres 可能会在这里返回无序的行,但没有实际证据证实。

当前的Postgres 手册对此事有这样的说法:

UNION有效地将 的结果附加query2到 的结果query1(尽管不能保证这是实际返回行的顺序)。此外,它还从结果中消除重复行,其方式与 DISTINCT, except相同UNION ALL

这还不清楚。引用的顺序是否适用于子句列表SELECT,或每个子句中的行,还是仅适用于返回的集合?另外,UNION ALL …

postgresql order-by union

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