如何使用 pgAdmin 应用程序编辑“postgresql.conf”文件?
在 Postgres 9.3.x 上使用 pgAdmin 1.18.1,当我选择File>Open postgresql.conf,会出现一个文件选择器对话框。而且,是的,我在 pgAdmin 中以超级用户“postgres”的身份连接。
我知道我已经在旧版本的 Postgres 中做到了这一点。
我正在编写一个验证触发器。触发器必须验证数组的总和是否等于另一个字段。由于我有许多此验证的实例,因此我想编写一个过程并创建多个触发器,每个触发器都有一组不同的要检查的字段。
例如,我有以下架构:
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) 我从远程连接到我们的开发服务器的本地 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
大概有一个直接而简单的解决方案。我想创建 10000 个新行 - 这些行按顺序编号,每行没有数据(按顺序编号的 id 除外)。我用过了:
INSERT INTO bins (id)
VALUES (1)
Run Code Online (Sandbox Code Playgroud)
创建 ID 为“1”的单行
如何创建具有相应 ID 号的 10000 行?
版本:PostgreSQL 9.5.5
我正在尝试获取一个 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)
但是我无法理解如何混合这两个查询。我在这里做错了什么?
这是我今天尝试使用以下命令登录到我的 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) 我阅读了这篇关于 SSD 上 PostgreSQL 性能的文章:
这两个配置似乎很重要random_page_costvsseq_page_cost
由于两个参数都需要匹配特定的硬件,我想知道是否可以自动检测匹配值?
更新
我脑子里有这些步骤:
背景:我们的数据库中有两个相当大的表,一个包含 8000 万条记录,另一个包含 1.6 亿条记录。我们看到了性能问题,并正在考虑对这两个表使用表分区。
我的问题是:是否有很多记录表明我们应该分区或不分区以保持良好的性能?我知道没有“一刀切”的答案,但可能有一个一般性建议,例如“传递了 X 百万条记录,您应该对表进行分区”。有很多关于如何分区的指导,但没有关于“何时”的指导。
我想在 Postgres 命令中添加冲突忽略copy。我知道我可以将数据复制到没有唯一索引/主键的表中,然后使用插入语法on conflict。但我想知道这是否可以直接来自COPY?
根据标准 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 ×10
pgadmin ×2
copy ×1
functions ×1
mac-os-x ×1
order-by ×1
partitioning ×1
performance ×1
plpgsql ×1
psql ×1
ssd ×1
trigger ×1
union ×1