Questions tagged «postgresql-9.3»

PostgreSQL 9.3版

2
Postgres中的快速汉明距离查询
我有一个大型数据库(1600万行),其中包含图像的感知哈希。 我希望能够在合理的时间内按汉明距离搜索行。 目前,据我所知,我认为最好的选择是自定义SP-GiST实现,该实现可实现BK-Tree,但这似乎需要大量工作,但我仍然对实用性感到困惑正确实现自定义索引的详细信息。计算汉明距离很容易,但是我确实知道C。 基本上,这里合适的方法是什么?我需要能够在哈希的特定编辑距离内查询匹配项。据我了解,长度相等的字符串的Levenshtein距离在功能上是汉明距离,因此,尽管没有明确的方法可以从中创建索引(请记住,我正在查询的值),至少存在一些对我想要的支持。我无法预先计算与固定值的距离,因为那只会对那个值有用。 哈希当前存储为64个字符的字符串,其中包含哈希的二进制ASCII编码(例如“ 10010101 ...”),但是我可以很容易地将它们转换为int64。真正的问题是我需要能够相对快速地进行查询。 似乎可以通过达成与我想要的目标类似的东西pg_trgm,但是我不清楚三联词匹配机制的工作原理(特别是,它返回的相似性度量实际上代表了什么?看起来有点像编辑距离)。 插入性能并不关键(计算每行的哈希值在计算上非常昂贵),因此我主要关心搜索。

1
删除其他表中未引用的行
我在PostgreSQL 9.3数据库中有两个表:表link_reply有一个名为which_group指向table 的外键link_group。 我要删除link_group不link_reply存在相关行的所有行。听起来很基本,但我一直在努力。 这样简单吗(不起作用)? DELETE FROM link_group WHERE link_reply = NULL;

1
处理PostgreSQL中已满的磁盘空间
我有一个带PostgreSQL 9.3.10后端的Django Web应用程序(坐在Linux操作系统中)。我遇到了磁盘已满错误,因此,即使我尝试截断表,也会出现以下错误: ERROR: could not extend file "base/30137/33186048": No space left on device HINT: Check free disk space. 我无法轻松地向服务器添加更多磁盘空间,也无法删除此VM上的内容。但是,有几个表可能会被截断,但似乎我现在也不能截断它们。 谁能给我关于我在这里可以做什么的建议?这给我的生产服务器带来了沉重的打击,我在这里有点意外DBA,所以完全不知所措。

3
更新json数据类型中的json元素
我不知道如何更新PostgreSQL 9.3数据类型中的元素。 我的例子: CREATE TABLE "user" ( id uuid NOT NULL, password character varying(255), profiles json, gender integer NOT NULL DEFAULT 0, created timestamp with time zone, connected timestamp with time zone, modified timestamp with time zone, active integer NOT NULL DEFAULT 1, settings json, seo character varying(255) NOT NULL, …

1
如何调试空闲查询?
我有一个每天在数据库上运行的批处理查询。但是,它似乎陷入了空闲状态,并且调试发生的事情非常困难。 该查询是同时插入的表上的聚合,我猜这与问题有关。(聚合是基于前几天的数据,因此插入不会影响结果。) 线索 我正在使用sqlalchemy在python脚本中运行它。但是,我已将事务级别设置为自动提交,因此我认为事情不会卷入事务中。另一方面,在sql终端中手动运行查询时,我看不到查询挂起。 通过查询pg_stat_activity,查询最初以形式进入数据库state='active'。大约15秒钟后,状态更改为“空闲”,此外,xact_start设置为NULL。等待标志永远不会设置为true。 在弄清楚sqlalchemy的事务级别自动提交之前,它会挂在状态'idle in transaction'而不是'idle'。自进行更改以来,它挂起的频率可能会稍微降低一些? 我觉得我没有能力对此进行更深入的研究。任何反馈,甚至在不给出明确答案的情况下,甚至解释更多有关不同状态和相关postgres内部的信息,都将不胜感激。

3
可以将DISTINCT FROM与ANY或ALL结合吗?
是结合一个Postgres的方式IS DISTINCT FROM与ANY或得到同样结果的其他一些巧妙的方法? select count(*) from (select 'A' foo union all select 'Z' union all select null) z where foo <> any(array[null, 'A']); count ------- 1 (1 row) select count(*) from (select 'A' foo union all select 'Z' union all select null) z where foo is distinct from any(array[null, 'A']); …

7
为什么PostgreSQL 9.3无法在Ubuntu上启动?
我已经成功从2个运行Ubuntu 12.04和13.04的VM的APT存储库中成功安装了PostgreSQL 9.3。但是,我无法将其正确安装在运行Ubuntu 12.04的主机上。 安装(这次)似乎一切正常,但也许是我不理解的错误: * No PostgreSQL clusters exist; see "man pg_createcluster" Setting up postgresql-9.3 (9.3.0-2.pgdg12.4+1) ... Creating new cluster 9.3/main ... config /etc/postgresql/9.3/main data /var/lib/postgresql/9.3/main locale en_US.UTF-8 port 5432 update-alternatives: using /usr/share/postgresql/9.3/man/man1/postmaster.1.gz to provide /usr/share/man/man1/postmaster.1.gz (postmaster.1.gz) in auto mode. 因此,我尝试将自己添加为PostgreSQL用户,但是我得到了: createuser: could not connect to database postgres: could …

2
是否可以在数据库中的所有模式上使用?
我想要给GRANT USAGE定数据库的用户/角色。该数据库具有许多架构。 我知道有一个ON ALL TABLES IN SCHEMA,但是我想要“所有模式”。我试过了GRANT USAGE .. ON DATABASE,但这显然是错误的(实际上并不存在)。 这是针对Postgres 9.3或9.4,它恰好是在AWS RDS上的服务器。

1
如何移动PostgreSQL表空间?
有没有一种方法,以物理移动的PostgreSQL 9.3表/old/dir来/new/dir?我只想mv目录,然后告诉PostgreSQL表空间现在位于/new/dir。看起来ALTER TABLESPACE只能让您重命名。 我想避免创建新的表空间并将数据库移到其中。我认为这将是一个缓慢的复制过程,需要大量时间和磁盘空间。我也想避免链接/old/dir到/new/dir。

1
在PostgreSQL中存储和查询滚动数据
我将大量的天气模型数据放入PostgreSQL数据库中。该计算机具有8个内核和16 GB的RAM。我正在使用PostGIS 2.1运行PostgreSQL 9.3。每个表都有不同的天气数据(温度,露点,风等)。每个表将有6-7列:纬度,经度,点几何,高程,与模型相关的日期时间,以及1-2个感兴趣的数据值。将首先根据时间和海拔高度查询边界框的数据。每个表大约有145,757,360行(比现在不再重要的数据将被删除)。我粗略估计,每个表的大小(不含索引)约为10 GB。(这是52字节的数据加上每行23字节的开销)。当新模型数据可用时,数据将定期更新/插入。注意: 因此,我正在研究以下两个计划: 只需按(日期时间,海拔高度)进行索引和聚类,并为点几何图形添加附加索引。运行常规的cron作业,该作业将删除旧行,运行真空/分析并重新进行集群。 按日期时间进行分区,然后对每个表按高度进行聚类,并按索引对几何进行索引。运行常规的cron作业以添加新表,然后删除旧表。 进一步, 因此,我知道删除表的效率更高,而删除和清理则更为有效。但是我会否看到性能提升? 当所有表将被均匀更新和选择直到不相关而被删除之前,分区是否合适(文档指出,当只选择其中的几个分区时,分区效果最佳)? 交付数据时,选择的速度会比聚集索引快吗?如果一次发出多个请求,答案是否会改变? 谢谢。我希望我收集所有需要的数据。如果没有,请告诉我,我将其添加。

1
针对大量插入和bytea更新优化PostgreSQL
我们拥有(软件​​): 具有基本配置的PostrgeSQL 9.3(中没有更改postgresql.conf) Windows 7 64位 硬件: 英特尔酷睿i7-3770 3.9 GHz 32 Gb RAM WDC WD10EZRX-00L4HBAta驱动器(1000Gb,SATA III) 因此,我们必须加载到数据库aprox中。100.000.000行(带bytea列),以及更简单的500.000.000行(无LOB)。varchar在第一个表上有2个索引(长度为13、19),varchar在第二个表上有2 个索引(长度为18,10)。每个表还具有用于ID生成的序列。 到目前为止,这些操作是使用8个连接进行的,并具有5​​0个JDBC批处理大小。下图演示了系统负载:postgresql进程的负载为零。加载24小时后,我们仅加载了1000万行,这是非常缓慢的结果。 我们正在寻求有关调整PostrgreSQL配置的帮助,以实现以下目的: 1)为了超快地加载此数据量,这是一次操作,因此可以是临时配置 2)对于生产模式,通过它们的索引对这2个表进行适量的SELECT,而无需联接和排序。

1
postgres-没有角色的pg_dump和pg_restore
我正在尝试在不具有接收数据库上适当角色的情况下还原转储。 如前所述这里也是在这里,你需要有--no-owner作为一个选项,无论是在pg_dump或pg_restore或两者 我使用以下命令行创建我的转储 "C:\Program Files\PostgreSQL\9.3\bin\pg_dump.exe" --no-owner -Ft --dbname=postgresql://avo******:AV0******?@127.0.0.1:5432/BI_DB > K:\BI\backup\sort\bck_%timestamp%.tar 恢复线如下 "C:\Program Files\PostgreSQL\9.3\bin\pg_restore.exe" --host localhost --port 5432 --username "postgres" --dbname "BI_TEST2" --no-password --no-owner --role=postgres --exit-on-error --verbose "D:\D\avo\backup\bck_04042017_1410.tar" 如您所见,两者都有--no-owner选择,但最终,我在下面出现了错误 令我感到困扰的是下面的日志 pg_restore: [programme d'archivage (db)] Erreur pendant le traitement de la TOC (« PROCESSING TOC ») : pg_restore: [programme d'archivage (db)] Erreur …

2
如何在PL / pgSQL中获取手动引发的异常的异常上下文?
在Postgres中,我们使用以下代码获取异常的“堆栈跟踪”: EXCEPTION WHEN others THEN GET STACKED DIAGNOSTICS v_error_stack = PG_EXCEPTION_CONTEXT; 对于“自然”异常,这很好用,但是如果我们使用 RAISE EXCEPTION 'This is an error!'; ...那么就没有堆栈跟踪。根据邮件列表条目,这可能是故意的,尽管我一生都无法弄清原因。这让我想找出引发异常的另一种方法,而不是使用RAISE。我只是想念一些明显的东西吗?有人对此有把戏吗?是否有我可以让Postgres抛出的异常,其中包含我选择的字符串,这样我不仅可以在错误消息中得到我的字符串,而且还可以得到完整的堆栈跟踪信息? 这是一个完整的示例: CREATE OR REPLACE FUNCTION error_test() RETURNS json AS $$ DECLARE v_error_stack text; BEGIN -- Comment this out to see how a "normal" exception will give you the stack trace RAISE …

1
数据校验和如何与流复制交互?
数据校验和是9.3中引入的新功能,并且: 有一个新的GUC参数“ ignore_checksum_failure”,即使检测到损坏,该参数也将强制PostgreSQL继续处理事务 如果复制主服务器上的校验和失败,该损坏的数据将复制到从服务器还是复制暂停。是否取决于设置ignore_checksum_failure? 该自述文件具有一些有用的相关信息,但不能直接回答问题。

1
为什么CTE比内联子查询差很多
我试图更好地了解查询计划程序在postgresql中的工作方式。 我有这个查询: select id from users where id <> 2 and gender = (select gender from users where id = 2) order by latest_location::geometry <-> (select latest_location from users where id = 2) ASC limit 50 它在我的数据库上运行的时间不到10ms,在users表中有大约500k条目。 然后,我认为为避免重复的子选择,我可以将查询重写为CTE,如下所示: with me as ( select * from users where id = 2 …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.