Questions tagged «postgresql-9.1»

PostgreSQL 9.1版

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
仅使用psql恢复Postgres数据库:pg_restore -vs-
我正在使用pg_dump(以纯文本格式)转储Postgres数据库,然后仅通过使用psql(带有该-f选项)将其还原。 哪个问题出了问题:我是否没有通过使用pg_restore来丢失任何东西,而pg_restore看起来像是一种专门的还原工具(与通用相比psql)? 我可以通过使用pg_dump参数来控制诸如禁用触发器之类的选项。那么,这是pg_restore做什么用的呢?非纯文本转储格式?

5
如何在PostgreSQL中创建只读用户进行备份?
在PostgreSQL中创建只读备份用户是不可能的吗? 我在IRC频道上被告知,您根本不能拥有没有所有权特权的仅备份用户。我觉得这很奇怪,所以我想确保我没有错过任何东西。 以下是我尝试过的方法,但并没有给我想要的结果。当我pg_dump在给定的桌子上做时,我得到Permission denied for relation...: GRANT SELECT ON ALL TABLES IN SCHEMA public TO backup; ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO backup; GRANT SELECT, USAGE ON ALL SEQUENCES IN SCHEMA public TO backup; ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, USAGE ON SEQUENCES …

1
如何在PostgreSQL中使用AES加密?
我通过使用以下语句尝试了aes-encryption: SELECT encrypt('test', 'key', 'aes'); 哪个有效,但我无法解密该值。我将它插入了一个数据类型bytea的字段中,但是我不确定这是否正确。 SELECT decrypt(pw, 'key', 'aes') FROM table WHERE ID = 1; 给我错误 错误:函数delete(bytea,未知,未知)不存在第 1行:从Tabelle WHERE ID = 7;中选择解密(pw,'key','aes');^ 提示:没有函数与给定的名称和参数类型匹配。您可能需要添加显式类型转换。 这是否真的意味着crypto()是现有函数,而不是crypto()?我还能如何检索aes加密的值?

1
log_min_duration_statement设置被忽略
我Postgresql 9.1在Ubuntu上运行。确切的Postgresql版本9.1+129ubuntu1如我的软件包管理器所示。 我有2个正在积极使用的数据库,它们是从远程服务器使用的。 我希望记录执行时间较长的查询。所以我在/etc/postgresql/9.1/main/postgresql.conf文件中设置以下参数 log_min_duration_statement = 10000 log_statement = 'mod' 因此Postgresql将记录超过10秒的查询。 但是当我reload使用postgres配置时,Postgresql开始记录每个适合log_statement值的查询。我将持续时间设置为100秒以确保 log_min_duration_statement = 100000 但是Postgresql会记录所有适合log_statement值的查询,无论log_min_duration_statement值如何。 设置log_statement为none似乎停止记录。 我有什么想念的配置吗?

2
VACUUM FULL和CLUSTER之间的PostgreSQL区别
我有一个表,其中数据占用200 GB的大小,表上的6个索引占用180 GB的大小。它已膨胀了30%,所以我想回收它占用的多余空间。它聚集在job_id_idx索引上。 所以要回收空间,我需要使用clustercommand还是vacuum fullcommand? 这两个命令有什么区别? 是vacuum full为了通过一些列相同cluster的命令? 是否在两个命令中都重新创建了索引? 就我而言,哪一个会更快? PostgreSQL数据库版本为9.1

3
pg_restore:[存档]在文件头中找不到魔术字符串
我正在使用PostgreSQL 9.1,并希望还原使用生成的备份文件pg_dump: sudo pg_dump -h 127.0.0.1 -U postgres --clean --inserts -E UTF8 -f out.sql database_name 此命令生成一个有效的sql文件,该文件首先删除任何现有的数据库对象,然后生成所有表,索引,序列等,最后插入数据。 当我尝试使用以下方法还原生成的备份文件时:(添加换行符仅用于显示目的) sudo pg_restore -d database_name -h 127.0.0.1 -U postgres --format=c --clean --create out.sql 它失败并打印: pg_restore: [archiver] did not find magic string in file header 是什么原因呢?

2
PostgreSQL:无法将目录更改为/ root
我正在尝试将表planet_osm_polygon从一个数据库复制osm到另一个数据库test。我su postgres并执行了pg_dump。 问题:但是我遇到了错误could not change directory to "/root",Password:提示出现了两次!有没有办法以pg_dump登录身份执行root? root@lalaland:~# su postgres postgres@lalaland:/root$ pg_dump -h localhost "osm" --table "public.planet_osm_polygon" | psql -h localhost "test" --table "staging.planet_osm_polygon" could not change directory to "/root" could not change directory to "/root" Password: Password: 更新 问题2:public即使我通过了flag ,也似乎将表复制到了架构中--table="staging.planet_osm_polygon"。为什么不将其复制到架构staging?

3
索引最大行大小错误
array列有上限吗? 插入数组字段时出现此错误- PG::Error: ERROR: index row size 3480 exceeds maximum 2712 for index "ix_data" 这是我的表格定义- create table test_array(id varchar(50), data text[]); ALTER TABLE test_array ADD PRIMARY KEY (id); CREATE INDEX ix_data ON test_array USING GIN (data); 我需要在数组字段上建立索引,因为我正在对其进行一些查询。

2
查找最长前缀的算法
我有两张桌子。 第一个是带有前缀的表 code name price 343 ek1 10 3435 nt 4 3432 ek2 2 其次是带有电话号码的通话记录 number time 834353212 10 834321242 20 834312345 30 我需要编写一个脚本,该脚本从每个记录的前缀中找到最长的前缀,并将所有这些数据写入第三张表,如下所示: number code .... 834353212 3435 834321242 3432 834312345 343 对于数字834353212,我们必须修剪“ 8”,然后从前缀表3435中找到最长的代码。 我们必须始终删除第一个“ 8”,并且前缀必须在开头。 我很久以前用非常糟糕的方式解决了这个任务。这是可怕的perl脚本,它对每个记录进行很多查询。该脚本: 从调用表中获取一个数字,在循环中从length(number)到1 => $ prefix做子字符串 进行查询:从前缀中选择count(*),例如“ $ prefix”之类的代码 如果count> 0,则使用第一个前缀并写入表 第一个问题是查询计数-是call_records * length(number)。第二个问题是LIKE表达式。恐怕这些很慢。 …

1
将可为空的列添加到表的时间超过10分钟
我在表上添加新列时遇到问题。 我尝试运行几次,但是运行了十多分钟后,由于锁定时间,我决定取消查询。 ALTER TABLE mytable ADD mycolumn VARCHAR(50); 有用的信息: PostgreSQL版本:9.1 行数:〜250K 列数:38 可为空的列数:32 约束数量:5(1 PK,3 FK,1 UNIQUE) 索引数:1 操作系统类型:Debian Squeeze 64 我发现了有关PostgreSQL管理可空列的方式的有趣信息(通过HeapTupleHeader)。 我的第一个猜测是,因为此表已经具有8位的32个可空列MAXALIGN,所以HeapTupleHeader的长度为4个字节(未经验证,我不知道该怎么做)。 因此,添加新的可为空的列可能需要在每行上更新HeapTupleHeader以添加新的8位MAXALIGN,这可能会导致性能问题。 因此,我尝试更改可为空的列之一(实际上并不是真正可为空的),以便将可为空的列的数量减少到31,以检查我的猜测是否正确。 ALTER TABLE mytable ALTER myothercolumn SET NOT NULL; 不幸的是,这种更改也需要很长时间,超过5分钟,因此我也中止了它。 您是否知道会导致这种性能损失的原因?

3
PostgreSQL可以在索引中使用空值吗?
我读过这本书说 数据库假定Indexed_Col IS NOT NULL覆盖的范围太大而无用,因此数据库不会从这种情况驱动到索引。 我认识到这本书已有十多年的历史了,但是它已经被证明是非常有用的-使用从书页中收集到的指令,我将查询速度提高了十倍。 此外,在运行EXPLAIN ANALYZE上一SELECT查询,我发现没有我的指标正在使用,所有的权利,即使他们应该是。 因此,我的问题是: 假设有一个表包含一个列,该列的列定义包括“ NOT NULL”,并且存在一个覆盖该列的索引,那么该索引是否可以用于该表的查询中,该列是查询的一部分? 喜欢: CREATE TABLE my_table( a varchar NOT NULL ); CREATE INDEX ix_my_table ON my_table(a); SELECT a from my_table;

2
由于行估计非常不准确,导致全文搜索速度缓慢
对该数据库进行全文查询(存储RT(请求跟踪程序)票证)似乎需要很长时间才能执行。附件表(包含全文数据)约为15GB。 数据库模式如下,大约有200万行: rt4 =#\ d +附件 表“ public.attachments” 专栏 类型 修饰符| 储存| 描述 ----------------- + ----------------------------- +- -------------------------------------------------- ------ + ---------- + ------------- id | 整数| 不是null默认nextval('attachments_id_seq':: regclass)| 普通 transactionid | 整数| 不为空| 普通 父| 整数| 不为null默认值0 | 普通 messageid | 角色变化(160)| | 扩展| 主题| 字符变化(255)| | 扩展| 文件名| 字符变化(255)| …

2
转换度量单位
寻找一种最合适的计量单位清单,列出以不同(但兼容)单位体积给出的物质。 单位换算表 单位转换表存储各种单位以及这些单位之间的关系: id unit coefficient parent_id 36 "microlitre" 0.0000000010000000000000000 37 37 "millilitre" 0.0000010000000000000000000 5 5 "centilitre" 0.0000100000000000000000000 18 18 "decilitre" 0.0001000000000000000000000 34 34 "litre" 0.0010000000000000000000000 19 19 "dekalitre" 0.0100000000000000000000000 29 29 "hectolitre" 0.1000000000000000000000000 33 33 "kilolitre" 1.0000000000000000000000000 35 35 "megalitre" 1000.0000000000000000000000 0 按系数排序显示parent_id链接将子单元与其数字上级链接。 可以使用以下方法在PostgreSQL中创建该表: CREATE TABLE unit_conversion ( id …

3
将公式存储在表中并在函数中使用该公式
我有一个PostgreSQL 9.1数据库,其中部分处理代理佣金。每个代理商都有自己的计算公式,他们可以得到多少佣金。我有一个函数来生成每个代理应获得的佣金数量,但是随着代理数量的增加,它变得无法使用。被迫做一些非常长的case语句和重复代码,这使我的功能变得非常庞大。 所有公式都有常量变量: d ..该月工作的天数 r ..新节点累积 l ..忠诚度得分 s ..子代理人佣金 b ..基本利率 我..获得的收入 公式可以是: d*b+(l*4+r)+(i/d)+s 每个代理商与人力资源部门协商付款方式。因此,我可以将公式存储在代理表中,然后像一个小的函数一样,仅从表中获取公式并将其转换为值并计算金额吗?

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.