Questions tagged «postgresql»

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

5
在PostgreSQL中并发DELETE / INSERT锁定问题
这很简单,但是我对PG(v9.0)的功能感到困惑。我们从一个简单的表开始: CREATE TABLE test (id INT PRIMARY KEY); 和几行: INSERT INTO TEST VALUES (1); INSERT INTO TEST VALUES (2); 使用我最喜欢的JDBC查询工具(ExecuteQuery),我将两个会话窗口连接到该表所在的数据库。它们都是事务性的(即auto-commit = false)。我们称它们为S1和S2。 每个代码都使用相同的代码: 1:DELETE FROM test WHERE id=1; 2:INSERT INTO test VALUES (1); 3:COMMIT; 现在,以慢速运行此命令,一次在Windows中执行一次。 S1-1 runs (1 row deleted) S2-1 runs (but is blocked since S1 has a write …

3
MD5字段的最佳数据类型是什么?
我们正在设计一个读取量很大的系统(每分钟读取数万次)。 有一个表names,可以作为一种中央注册表。每行都有一个text字段representation和一个唯一字段,该字段key是该字段的MD5哈希值representation。1该表当前具有数千万条记录,并且预计在应用程序的生命周期内将增长到数十亿条。 还有许多其他表(具有高度变化的模式和记录计数)引用该names表。这些表之一中的任何给定记录都保证有一个name_key,从功能上讲,该names表是该表的外键。 1:顺便说一句,正如您所料,此表中的记录一旦写入便是不可变的。 对于除表以外的任何给定表names,最常见的查询将遵循以下模式: SELECT list, of, fields FROM table WHERE name_key IN (md5a, md5b, md5c...); 我想针对读取性能进行优化。我怀疑我的第一站应该是最小化索引的大小(尽管我不介意在那里被证明是错误的)。 问题:和列 的最佳数据类型是什么? 有没有理由使用过?还是?keyname_keyhex(32)bit(128)BTREEGIN

4
获取PostgreSQL数据库表的最后修改日期
我试图通过检查表的文件修改日期(如本答案所述)来获取修改表的时间。但是结果并不总是正确的。更新表后,文件修改日期将在几分钟后更新。这是正确的行为吗?PostgreSQL是否将表修改存储在某些缓存中,然后将其刷新到硬盘上? 因此,如何获得表的正确上次修改日期(假设自动真空修改也可以)? 我在Linux Centos 6.2 x64下使用PostgreSQL 9.2。
35 postgresql 


1
在某些情况下,在JOIN子句中使用构造可以引入优化障碍吗?
引起我注意的是,查询子句中的USING构造(而不是ON)在某些情况下可能会引入优化障碍。FROMSELECT 我的意思是这个关键词: 选择 * 从一个 加入b 使用(a_id) 仅在更复杂的情况下。 背景:此评论到这个问题。 我用这个了很多,从来没有发现过这么远。我对一个展示效果或进一步信息的链接的测试案例非常感兴趣。我的搜索工作空虚。 USING (a_id)与替代连接子句相比,完美的答案是显示性能较差的测试用例ON a.a_id = b.a_id- 如果这确实可能发生。

4
是否应向VARCHAR列添加任意长度限制?
根据PostgreSQL的文档VARCHAR,VARCHAR(n)和之间没有性能差异TEXT。 我应该在名称或地址列中添加任意长度限制吗? 编辑:不是欺骗: 当所有值均为36个字符时,使用char vs varchar可以使索引查找明显更快 我知道这种CHAR类型是过去的遗迹,我不仅对性能感兴趣,而且对诸如Erwin的其他利弊也很感兴趣。

1
如何基准化PostgreSQL查询?
我想对包含我为PostgreSQL编写的用户定义函数的查询进行基准测试。是否有任何标准方法可以运行此类基准测试? 我知道可以\timing在psql提示符下打开计时,但理想情况下,我希望有一个脚本可以自动处理所有事情:运行查询几次,每次运行后清除PostgreSQL缓存(可能是通过重新启动PostgreSQL的服务),并输出平均运行时间(使用的内存为佳)。


2
在PostgreSQL中增量刷新子视图
是否可以在PostgreSQL中增量刷新实例化视图,即仅刷新新数据或已更改的数据? 考虑此表和实例化视图: CREATE TABLE graph ( xaxis integer NOT NULL, value integer NOT NULL, ); CREATE MATERIALIZED VIEW graph_avg AS SELECT xaxis, AVG(value) FROM graph GROUP BY xaxis 定期将新值添加到graph或更新现有值。我只想graph_avg每两个小时刷新一次已更新值的视图。但是在PostgreSQL 9.3中,整个表都被刷新了。这非常耗时。下一版本9.4允许CONCURRENT更新,但仍刷新整个视图。对于亿万行,这需要几分钟。 跟踪更新和新值并仅部分刷新视图的好方法是什么?

3
CPU性能与数据库服务器相关吗?
这是一个纯粹的理论问题。假设我有一个部署在多台服务器上的应用程序。 负载均衡器 多个/可扩展的应用程序服务器 一台(单个)数据库服务器(目前) 在前两个部分,我确实知道要寻找什么。但是数据库服务器呢?我应该寻找哪种硬件? CPU频率与数据库服务器相关吗? 多个核心CPU相关吗? RAM比CPU更重要吗? PS:假设所选数据库是MySQL或PostgreSQL。

2
在大表中填充新列的最佳方法?
我们在Postgres中有一个2.2 GB的表,其中有7,801,611行。我们正在向其中添加一个uuid / guid列,我想知道填充该列的最佳方法是什么(因为我们想向其添加NOT NULL约束)。 如果我正确理解Postgres,从技术上讲,更新就是删除和插入,因此这基本上是在重建整个2.2 GB表。另外,我们有一个正在运行的奴隶,所以我们不想让它落后。 有什么方法比编写随时间推移缓慢填充脚本的方法更好?


3
真的可以将listen_addresses设置为列表吗?
我有一个IP地址为192.168.0.192的VM,运行的是postgreSQL。 如果我指定 listen_addresses = '*' 然后我可以从另一个位于192.168.0.191的虚拟机和本地主机进行连接。 但是我似乎无法使用列表来告诉 postgreSQL使用这两个地址。如果我将listen_addresses更改为列表: listen_addresses = '192.168.0.191, localhost' 那么我将无法从192.168.0.191连接。 我注意到stackexchange上的几乎所有示例都将listen_addresses设置为“ *”。这是因为列表形式不起作用吗?
32 postgresql 

2
超级用户不允许登录
我使用以下命令创建了超级用户门户 create role portal with superuser password 'portal' 当我尝试使用门户网站用户登录postgres时,在Rails中收到以下错误。 FATAL: role "portal" is not permitted to log in 我不知道发生了什么事。 当然,我可以使用login命令更改用户以使门户网站用户能够登录。我想了解为什么超级用户无法登录。
32 postgresql 

3
索引VARCHAR列是一个好主意/方法吗?
我们正在使用PostgreSQL v8.2.3。 有涉及的表:EMPLOYEE和EMAILLIST。 Table 1: EMPLOYEE (column1, column2, email1, email2, column5, column6) Table 2: EMAILLIST (email) 2个表以这种方式连接,如果EMPLOYEE.EMAIL1或EMPLOYEE.EMAIL2没有匹配的条目,则将返回这些行。 SELECT employee.email1, employee.email2, e1.email IS NOT NULL AS email1_matched, e2.email IS NOT NULL AS email2_matched FROM employee LEFT JOIN emaillist e1 ON e1.email = employee.email1 LEFT JOIN emaillist e2 ON e2.email = employee.email2 …

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.