Questions tagged «postgresql»

PostgreSQL的所有版本。如果该上下文很重要,请添加其他特定于版本的标记,例如postgresql-11。

2
Trigram搜索随着搜索字符串变长而变慢
在Postgres 9.1数据库中,我有一个table1约150万行和一列的表label(为方便起见,使用简化名称)。 上有一个功能性trigram-index lower(unaccent(label))(unaccent()已使其不可变,以允许在索引中使用)。 以下查询非常快: SELECT count(*) FROM table1 WHERE (lower(unaccent(label)) like lower(unaccent('%someword%'))); count ------- 1 (1 row) Time: 394,295 ms 但是以下查询速度较慢: SELECT count(*) FROM table1 WHERE (lower(unaccent(label)) like lower(unaccent('%someword and some more%'))); count ------- 1 (1 row) Time: 1405,749 ms 即使搜索更加严格,添加更多单词的速度甚至会更慢。 我尝试了一个简单的技巧,即先对第一个单词运行子查询,然后对完整的搜索字符串进行查询,但是(不幸的是)查询计划者看到了我的想法: EXPLAIN ANALYZE SELECT * FROM ( SELECT …

1
无法连接到远程PostgreSQL数据库
我正在尝试连接到远程psql数据库。在添加具有客户端IP地址的pg_hba.conf条目之前,我收到了一条错误消息: xdev@xdevbox:~$ psql -U postgres testdb -h 10.1.1.47 psql: FATAL: no pg_hba.conf entry for host "10.201.50.71", user "postgres", database "testdb", SSL off 我添加了具有信任设置的客户端IP。我还更改了服务器上postgres.conf中的侦听地址以侦听“ *”。然后,我使用/etc/init.d/postgresql restart命令重新启动了数据库服务器。 现在,当我尝试连接时,出现以下错误消息: psql: could not connect to server: Connection refused Is the server running on host "10.1.1.47" and accepting TCP/IP connections on port 5432? 在postgresql.conf中,端口设置为5432。我不确定还需要检查什么。 谢谢

1
PostgreSQL的GEQO(遗传查询优化)的修改
我需要实现与PostgreSQL的GEQO功能一致的功能。我知道GEQO方法是将查询计划编码为整数字符串,并且GEQO随机生成这些可能的连接序列。来源:http : //www.postgresql.org/docs/9.3/static/geqo-pg-intro.html 我的问题是:如果我明确知道正确的连接顺序,那么如何修改GEQO函数,这样我就不必搜索其他连接顺序。例如,如果我知道加入4个关系的最佳方法是4-1-3-2,则不必检查其他排列。 关于如何在PostgreSQL中实现GEQO的资料不多。PostgreSQL仅给出了GEQO功能的整体视图,而没有太多解释。 还是可以不使用GEQO在standard_join_search()本身中实现此功能?

1
如何将ctid分解为页码和行号?
表格中的每一行都有一个系统列 ctid,其类型tid表示该行的物理位置: create table t(id serial); insert into t default values; insert into t default values; select ctid , id from t; ctid | ID :---- | -: (0,1)| 1个 (0,2)| 2 dbfiddle 在这里 是什么让刚刚页面数从最好的方式ctid在最适合的类型(例如integer,bigint或numeric(1000,0))? 我能想到的唯一方法是非常丑陋。

3
如何在PostgreSQL(或SQL)中实现业务逻辑权限?
假设我有一个项目表: CREATE TABLE items ( item serial PRIMARY KEY, ... ); 现在,我要为每个项目引入“权限”的概念(请注意,这里我不是在谈论数据库访问权限,而是该项目的业务逻辑权限)。每个项目都具有默认权限以及每个用户的权限,这些权限可能会覆盖默认权限。 我试图考虑实现此问题的几种方法,并提出了以下解决方案,但是我不确定哪个是最好的,以及为什么: 1)布尔解 为每个权限使用一个布尔列: CREATE TABLE items ( item serial PRIMARY KEY, can_change_description boolean NOT NULL, can_change_price boolean NOT NULL, can_delete_item_from_store boolean NOT NULL, ... ); CREATE TABLE item_per_user_permissions ( item int NOT NULL REFERENCES items(item), user int NOT …
16 postgresql  enum 

6
从表中查找“ n”个连续的免费电话
我有一些这样的数字表(状态为免费或已分配) id_set号状态 ----------------------- 1 000001已分配 1 000002免费 1 000003已分配 1 000004免费 1 000005免费 1 000006已分配 1 000007已分配 1 000008免费 1 000009免费 1 000010免费 1 000011已分配 1 000012分配 1 000013已分配 1 000014免费 1 000015已分配 并且我需要找到“ n”个连续数字,因此对于n = 3,查询将返回 1 000008免费 1 000009免费 1 000010免费 它应仅返回每个id_set的第一个可能的组(实际上,每个查询仅对id_set执行一次) 我正在检查WINDOW函数,尝试了诸如之类的查询COUNT(id_number) OVER (PARTITION BY id_set ROWS …


2
PostgreSQL索引缓存
我很难找到有关如何在PostgreSQL中缓存索引的“一般性”解释,因此我希望对以下任何或所有假设进行现实检查: PostgreSQL索引(如行)位于磁盘上,但可以缓存。 索引可能完全在高速缓存中,或者根本不存在。 是否缓存它取决于使用频率(由查询计划者定义)。 因此,大多数“明智的”索引将一直存在于缓存中。 索引buffer cache与行位于同一高速缓存(?)中,因此索引所使用的高速缓存空间不可用于行。 我理解这一点的动机来自另一个问题,我曾问过有人建议在不能访问大多数数据的表上使用部分索引。 在进行此操作之前,我想弄清楚使用部分索引有两个优点: 我们减小了缓存中索引的大小,从而为缓存中的行本身释放了更多空间。 我们减小了B树的大小,从而加快了查询响应速度。

4
PostgreSQL 9.1热备份错误:数据库系统正在启动
我一直在为Postgres 9.1进行热备份,并且遇到了一个一致的问题。在从属服务器上重新启动Postgres后,pgstartup日志文件和pg_log目录下的每日日志文件将正确读取。但是,当我尝试使用psql命令进入数据库时​​,出现错误: 严重:数据库系统正在启动。 recovery.conf文件也不会变为recovery.done。我已经广泛研究了此错误,并始终找到相同的响应:在尝试重新启动Postgres之前,尚未彻底关闭数据库。我重新启动Postgres的唯一方法是通过service postgresql-9.1 restartor /etc/init.d/postgresql-9.1 restart命令。收到此错误后,我将终止所有进程,然后再次尝试重新启动数据库,但仍然收到相同的错误。我不知道从哪里去以及如何解决此问题。以下是完成热备份的确切过程。 主服务器配置: pg_hba.conf,添加以下行: 主机复制postgres IPAddressOfSlaveServer信任 postgresql.conf: wal_level = hot_standby max_wal_senders = 5 listen_address ='*' 端口= 5432 max_wal_senders = 5 wal_keep_segments = 32 从服务器配置: postgresql.conf: hot_standby =开启 recovery.conf: Standby_mode =开 primary_conninfo =主机= IPAddressOfMasterServer 端口= 5432 用户= postgres restore_command ='cp /var/lib/pgsql/9.1/data/pg_xlog/%f“%p”' 配置两个服务器之后 我更改为主服务器上的postgres用户并运行以下命令: psql -c“选择pg_start_backup('label',true);”; …
16 postgresql 

2
简单联接中未使用的主键索引
我有以下表和索引定义: CREATE TABLE munkalap ( munkalap_id serial PRIMARY KEY, ... ); CREATE TABLE munkalap_lepes ( munkalap_lepes_id serial PRIMARY KEY, munkalap_id integer REFERENCES munkalap (munkalap_id), ... ); CREATE INDEX idx_munkalap_lepes_munkalap_id ON munkalap_lepes (munkalap_id); 为什么在以下查询中不使用munkalap_id上的索引? EXPLAIN ANALYZE SELECT ml.* FROM munkalap m JOIN munkalap_lepes ml USING (munkalap_id); QUERY PLAN Hash Join (cost=119.17..2050.88 …

3
在没有WAL归档的情况下,PostgreSQL 9.1流复制是否会滞后?
内容: 假设在Postgres 9.1群集上使用流复制/热备用时,备用节点将关闭。它停了一天,在此期间主服务器上发生了许多DML。备用数据库的recovery.conf不包含“ restore_command”条目(用于从WAL日记文件还原),但是包含“ primary_conninfo”字符串(用于流复制)。 题: 如果我在主服务器上进行了一天的更改后再次启动了备用服务器。是否仅使用流复制来“赶上”(最终进入与主服务器类似的状态)?还是我必须启用WAL文件归档并让其应用在中断期间归档的文件以确保币种? 我在此处检查了WAL归档/流复制文档,它说您不必同时启用WAL归档和流复制,但是尚不清楚在不启用WAL文件归档的情况下是否会发生追赶。 谢谢!

1
运行文件时PostgreSQL退出状态
使用单个SQL命令运行PostgreSQL时,按预期返回错误代码: % psql -c "SELECT * FROM AWDASDASDASDAS" my_db ERROR: relation "awdasdasdasdas" does not exist LINE 1: SELECT * FROM AWDASDASDASDAS % echo $? 1 但是在运行文件时,该错误被抑制: % psql -f test.sql my_db psql:test.sql:1: ERROR: relation "awdasdasdasdas" does not exist LINE 1: SELECT * FROM AWDASDASDASDAS % echo $? 0 任何想法如何找回这些错误?
16 postgresql 

4
PostgreSQL:生成的列
PostgreSQL支持生成的列吗?也称为虚拟列。我不是在谈论IDENTITY专栏。 我找不到有关此卓越功能的任何信息,但我知道它在SQL Server以及最新版本的MariaDB和MySQL中都可用。 在SQL:2003标准中提到了该功能,并且在2006年左右的PostgreSQL论坛上进行了一些讨论,但是我对此没有实质性的了解。 关于SO有一些讨论,但是现在讨论已经很久了,所以它可能已经过时了。

1
了解postgresql.conf文件中的“ max_wal_size”和“ min_wal_size”参数默认值
根据文档min_wal_size和max_wal_size参数,默认值为: 对于max_wal_size:The default is 1 GB 对于min_wal_size:The default is 80 MB 然后,从数据库配置中查看以下参数: select name, setting, unit from pg_settings where name in ('min_wal_size', 'max_wal_size') 给出结果: name | setting | unit ---------------------------------- max_wal_size | 64 | min_wal_size | 5 | 我有两个问题: 1)为什么这些值与docs中显示的默认值不匹配?我根本没有更改配置设置。 2)为什么unit这些参数的列为空/ NULL?在这种情况下,什么是64和5值?MB?GB?还是什么? work_mem当一切都清楚后,为什么这不像示例 参数: name | setting | unit ---------------------------------- …

2
如何加快选择特色?
我对某些时间序列数据有一个简单的选择: 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'; 而且需要112秒。这是查询计划: http://explain.depesz.com/s/NTyA 我的应用程序必须执行许多不同的操作,并像这样计数。有没有更快的方法来获取此类数据?

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.