标签: postgresql

尝试导入的文件中的权限被拒绝

当我尝试使用\i不在 psql.exe 文件夹中的文件时,它会显示C:: permission denied. 例如,我有一个带有 SQL 命令的文件,C:\Users\Work\Desktop\School Work\load_database.sql当我输入\i "C:\Users\Work\Desktop\School Work\load_database.sql"它时,它说C:: permission denied. 我怎样才能解决这个问题?

我在这里找到了一个解决方法,您可以将 .sql 文件复制到与 psql.exe 所在的文件夹相同的文件夹中。

顺便说一句,\i代表进口吗?

postgresql windows permissions

26
推荐指数
2
解决办法
8万
查看次数

psql:致命:抱歉,已经有太多的客户了

在尝试访问使用 postgresql 数据库的网站时,甚至在使用 psql 实用程序或 pgadmin3 时,我突然收到此错误。

我的数据库设置为处理 150 个最大连接数:

# SHOW max_connections;
 max_connections 
-----------------
 150
(1 row)
Run Code Online (Sandbox Code Playgroud)

重新启动我的网站所在的 ubuntu 服务器(这实际上是唯一使用连接的东西)后,我看到当前的连接量为 140:

# select count(*) from pg_stat_activity;
 count 
-------
   140
(1 row)
Run Code Online (Sandbox Code Playgroud)

我不明白在重新启动服务器后突然有这么多连接。所以我检查了 postgresql 活动:

# SELECT * FROM pg_stat_activity;
Run Code Online (Sandbox Code Playgroud)

我看到 100 多列具有相同的精确查询,如下所示:

SELECT  "reports".* FROM "reports"  WHERE (("reports"."time" < '2014-06-28 13:30:42.000000' AND "reports"."unit_id" = 3192)) ORDER BY "reports"."id" DESC LIMIT 1
Run Code Online (Sandbox Code Playgroud)

更重要的是它们都具有相同的客户端地址(我的 Web 服务器)。

该 Web 服务器使用 ruby​​ on rails,连接池为 50。即使连接池为 50,Passenger 进程/prefork apache 配置是单线程的,因此每个进程不能产生 50 个线程和 50 个数据库连接。更重要的是,这是在系统重新启动后发生的,这将所有用户都从我的 …

postgresql max-connections

26
推荐指数
2
解决办法
11万
查看次数

查询以输出查询、表或视图的列名和数据类型

是否有 PostgreSQL 查询或命令返回查询、表或视图的字段名称和字段类型?

例如,如果应用于简单的 SELECT 查询的解决方案SELECT * from person应该返回如下列表:

Column Name   | Column Type
===========================
First Name    | character
Last Name     | character
Age           | integer
Date of Birth | date
Run Code Online (Sandbox Code Playgroud)

我查看了information_schema下面的答案中描述的视图,它似乎很好地涵盖了表格,我怀疑它也涵盖了视图,但我还没有检查过。

最后一个是任意但有效的 SELECT 查询,例如涉及数据库中的JOINSUNIONS等。是否有内置过程或其他存储过程或脚本可以为任何有效的 QUERY 返回相同的结果?

我正在开发一个程序来创建数据和查询表单,数据验证和对返回的数据执行函数需要这些信息。

postgresql datatypes catalogs fields

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

带有位图索引扫描的查询计划中的“重新检查条件:”行

这是对上一个问题的评论的衍生:

使用 PostgreSQL 9.4,Recheck Cond:EXPLAIN.

就像在EXPLAIN引用问题的输出中一样:

->  Bitmap Heap Scan on table_three  (cost=2446.92..19686.74 rows=8159 width=7)
      Recheck Cond: (("timestamp" > (now() - '30 days'::interval)) AND (client_id > 0))
      ->  BitmapAnd  (cost=2446.92..2446.92 rows=8159 width=0)
            ->  Bitmap Index Scan on table_one_timestamp_idx  (cost=0.00..1040.00 rows=79941 width=0)
                  Index Cond: ("timestamp" > (now() - '30 days'::interval))
            ->  Bitmap Index Scan on fki_table_three_client_id  (cost=0.00..1406.05 rows=107978 width=0)
                  Index Cond: (client_id > 0)
Run Code Online (Sandbox Code Playgroud)

或者在EXPLAIN ANALYZE一个简单的大表(很少work_mem)的输出中:

EXPLAIN ANALYZE …
Run Code Online (Sandbox Code Playgroud)

postgresql index execution-plan postgresql-9.4

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

如何确定 PostgreSQL 中表的排序规则?

我想编写一个检查 PostgreSQL 表中使用的排序规则的脚本,但谷歌搜索Postgresql detect collation对我来说效果不佳,而且文档并没有让搜索变得容易。

谁能告诉我如何检查这个?

postgresql collation dml ddl

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

使用子查询时 Postgres 错误 [列必须出现在 GROUP BY 子句中或用于聚合函数中]

我有两张桌子employeephones. 一个员工可以有 0 到 n 个电话号码。我想列出员工姓名及其电话号码。我正在使用以下运行良好的查询。

SELECT empname,array_agg(phonenumber) AS phonenumbers 
FROM employee LEFT OUTER JOIN phones ON employee.empid = phones.empid
GROUP BY employee.empid
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

员工表可能包含大量行。我想一次只取一些员工。例如,我想用他们的电话号码获取 3 名员工。我正在尝试运行此查询。

SELECT empname,array_agg(phonenumber) AS phonenumbers 
FROM 
(SELECT * FROM employee ORDER BY empname LIMIT 3 OFFSET 0) AS employee 
LEFT OUTER JOIN phones ON employee.empid = phones.empid
GROUP BY employee.empid
Run Code Online (Sandbox Code Playgroud)

但我收到这个错误。ERROR: column "employee.empname" must appear in the GROUP BY clause or be used in an aggregate function 两个查询之间的唯一区别是我在后者中使用子查询来限制加入之前的行。我该如何解决这个错误?

postgresql aggregate subquery group-by

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

如何加快选择不同的?

我在一些时间序列数据上有一个简单的选择:

SELECT DISTINCT user_id
FROM events
WHERE project_id = 6
AND time > '2015-01-11 8:00:00'
AND time < '2015-02-10 8:00:00';
Run Code Online (Sandbox Code Playgroud)

它需要112秒。这是查询计划:

http://explain.depesz.com/s/NTyA

我的应用程序必须执行许多不同的操作并像这样计数。有没有更快的方法来获取这种数据?

postgresql performance optimization postgresql-9.3 amazon-rds query-performance

25
推荐指数
2
解决办法
4万
查看次数

Postgres 是否保留记录的插入顺序?

例如,当我使用返回记录 ID 的查询时

INSERT INTO projects(name)
VALUES (name1), (name2), (name3) returning id;
Run Code Online (Sandbox Code Playgroud)

产生输出:

1
2
3
Run Code Online (Sandbox Code Playgroud)

这个 ids 会指向相应的插入值吗?

1 -> name1
2 -> name2
3 -> name3
Run Code Online (Sandbox Code Playgroud)

postgresql insert order-by postgresql-9.4

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

如何存储时间序列数据

我有我认为的时间序列数据集(如果我错了,请纠正我),它有一堆相关的值。

一个例子是对汽车进行建模并在旅途中跟踪它的各种属性。例如:

时间戳 | 速度 | 距离旅行| 温度 | 等等

存储这些数据的最佳方法是什么,以便 Web 应用程序可以有效地查询字段以查找最大值、最小值并随时间绘制每个数据集?

我开始了一种解析数据转储并缓存结果的幼稚方法,这样它们就永远不必存储。然而,在玩了一会儿之后,由于内存限制,该解决方案似乎无法长期扩展,如果要清除缓存,则需要重新解析和重新缓存所有数据。

另外,假设每秒跟踪一次数据,很少有可能出现 10 小时以上的数据集,是否通常建议每 N 秒采样一次来截断数据集?

postgresql architecture

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

PostgreSQL DELETE FROM 失败并显示“错误:试图删除不可见元组”

错误

尝试删除包含无效时间戳的元组

DELETE FROM comments WHERE date > '1 Jan 9999' OR date < '1 Jan 2000' OR date_found > '1 Jan 9999' OR date_found < '1 Jan 2000';
Run Code Online (Sandbox Code Playgroud)

结束于

ERROR:  attempted to delete invisible tuple
Run Code Online (Sandbox Code Playgroud)

一个 2009 年的邮件列表讨论了完全相同的错误消息,OP 修复了它,但我没有找到关于他是如何做到的或可能导致此错误的原因的解释。

由于谷歌搜索量不足以及我对 PostgreSQL 的了解有限,我很无助。

是什么导致了腐败

我在 Debian 8 上运行了 PostgreSQL 9.5.5 服务器(~4TB 数据,所有默认设置,内存限制除外),当时操作系统内核崩溃了——可能是在重建 /dev/md1 时交换所在的位置。在此之前,PostgreSQL 用一个 400GB 的日志文件吃光了几乎所有的磁盘空间。操作系统再也没有启动过,磁盘检查没问题,所以我从 LiveCD 启动并将每个块设备备份到映像,以防万一。我已经成功地从 /dev/md2 重建了 / 目录,fsck 显示了一个干净的文件系统,并且我已经将 PGDATA 文件夹备份到了一个外部硬盘上。

我做了什么来尝试恢复

在我格式化 md 设备并重新安装操作系统和新的 postgresql-9.5 之后,我停止了 PostgreSQL 服务器,将 PGDATA 文件夹移动并更改为 …

postgresql recovery corruption disaster-recovery postgresql-9.5

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