Questions tagged «postgresql»

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

1
PostgreSQL和MySQL的可伸缩性限制
我听说诸如MySQL或PostgreSQL之类的非分片关系数据库的性能“突破”了10 TB。 我怀疑这样的限制确实存在,因为Netezza,Greenplum或Vertica等都不会提出这样的限制,但是我想问一下这里是否有人提及量化这些限制的任何研究论文或正式案例研究。

1
在不停机的情况下进行模式更改和将数据迁移到活动数据库的最佳做法?
如何在不停机的情况下对活动数据库进行架构更改? 例如,假设我有一个PostgreSQL数据库,该数据库的表包含各种用户数据(如电子邮件地址等),这些数据均与特定用户相关联。如果要将电子邮件地址移动到新的专用表中,则必须更改架构,然后将电子邮件数据迁移到新表中。如何在不停止写入原始表的情况下完成此操作?当然,当数据从旧表写入新表时,新数据将继续写入旧表并丢失,对吗? 我猜这个问题经常出现,但是我找不到任何标准的解决方案。 本文解决了这个问题,但是我并没有真正理解步骤3。他说要写入两个表,然后将旧数据从第一个表迁移到新表。您如何确保仅迁移旧数据? (我在Heroku上使用PostgreSQL。)

3
给定数据库和用户的search_path是什么?
我可以看到当前search_path: show search_path ; 我可以使用search_path以下命令为当前会话设置: set search_path = "$user", public, postgis; 同样,我可以通过search_path以下方式为给定数据库永久设置: alter database mydb set search_path = "$user", public, postgis ; 我可以通过search_path以下方式为给定角色(用户)永久设置: alter role johnny set search_path = "$user", public, postgis ; 但是,我想知道在更改数据库和角色设置(相对于search_path)之前如何确定它们?

2
如何在pgAdmin III中查看数据
我简直不敢相信他们会这么难。我不知道如何查看数据库中的数据。 有没有一种简单的方法可以使用pgAdmin III查看表中的数据?另外,是否有我可以使用的不烂的程序?

5
PostgreSQL上的Aggressive Autovacuum
我试图让PostgreSQL主动自动清理数据库。我目前已将自动吸尘配置如下: autovacuum_vacuum_cost_delay = 0#关闭基于成本的真空 autovacuum_vacuum_cost_limit = 10000#最大值 autovacuum_vacuum_threshold = 50#默认值 autovacuum_vacuum_scale_factor = 0.2#默认值 我注意到只有在数据库未处于负载状态时才会启动自动清理功能,因此我遇到了这样的情况:死元组比活动元组多得多。有关示例,请参见随附的屏幕截图。其中一张桌子有23个活动元组,但有16845个死元组正在等待真空。太疯狂了! 当测试运行完成并且数据库服务器处于空闲状态时,自动吸尘器将启动,这不是我想要的,因为当失效的元组的数量超过20%的活动元组+ 50时,我希望自动吸尘器启动,因为数据库已经配置。服务器空闲时自动清理对我来说毫无用处,因为生产服务器在持续的时间内有望达到每秒数千次的更新,这就是即使服务器负载时我也需要运行自动清理的原因。 有什么我想念的吗?在服务器负载较重时,如何强制自动吸尘器运行? 更新资料 难道这是一个锁定问题?有问题的表是汇总表,这些表是通过插入后触发器填充的。这些表被锁定为SHARE ROW EXCLUSIVE模式,以防止并发写入同一行。

3
如何在没有外部Cron类工具的情况下在Postgresql上运行重复任务?
我想定期调用存储过程。在Oracle上,我将为此创建工作。我发现Postgresql可以通过使用外部工具(cron等)和PgAgent很好地模仿这一点。 您是否知道不涉及外部工具的“内部”替代方案? 我想避免与pgAgent命令行上存储的密码有关的安全问题。 我想避免隐藏密码(~/.pgpass)的任何其他系统配置。 PostgreSQL 8.3 Linux RedHat 64位

3
为什么允许新用户创建表?
我想知道为什么允许新创建的用户连接到数据库后创建表。我有一个数据库,project2_core: postgres=# \l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges ---------------+--------------+-----------+-------------+-------------+------------------------------- postgres | postgres | SQL_ASCII | C | C | project2_core | atm_project2 | UTF8 | de_DE.UTF-8 | de_DE.UTF-8 | project2=CTc/project2 template0 | postgres | SQL_ASCII | C | C | …

5
使用TIMESTAMP WITHTIME TIME ZONE的有效用例是什么?
关于两者之间的区别,有一个很长很清楚的答案 TIMESTAMP WITH TIME ZONE -vs- TIMESTAMP WITHOUT TIME ZONE 在此SO帖子中可用。我想知道的是:是否存在任何实际使用的有效用例,TIMESTAMP WITHOUT TIME ZONE或者应该将其视为反模式。
40 postgresql 

3
在PostgreSQL中实现UPSERT的惯用方式
我已经阅读了UPSERTPostgreSQL中的不同实现,但是所有这些解决方案都相对较旧或相对陌生(例如,使用可写CTE)。 而且我根本不是psql专家,可以立即找出这些解决方案是否过时,因为它们是值得推荐的,还是(几乎所有它们都是)仅仅是玩具示例而不适合生产使用。 在PostgreSQL中实现UPSERT的最线程安全的方法是什么?



2
在Postgres 9.2上增加work_mem和shared_buffers会大大减慢查询速度
我有一个运行在具有16GB RAM的8核RHEL 6.3计算机上的PostgreSQL 9.2实例。服务器专用于此数据库。鉴于默认的postgresql.conf在内存设置方面相当保守,我认为允许Postgres使用更多内存可能是一个好主意。令我惊讶的是,遵循wiki.postgresql.org/wiki/Tuning_Your_PostgreSQL_Server上的建议,实际上使我运行的每个查询速度显着降低,但是在更复杂的查询上显然更明显。 我还尝试运行pgtune,它给出了以下建议,并带有更多已调整的参数,但没有任何改变。它建议使用RAM大小的1/4的shared_buffers,这似乎与其他地方(尤其是PG Wiki)上的建议相符。 default_statistics_target = 50 maintenance_work_mem = 960MB constraint_exclusion = on checkpoint_completion_target = 0.9 effective_cache_size = 11GB work_mem = 96MB wal_buffers = 8MB checkpoint_segments = 16 shared_buffers = 3840MB max_connections = 80 我尝试在更改设置(使用reindex database)后为整个数据库重新编制索引,但这也无济于事。我玩过shared_buffers和work_mem。从非常保守的默认值(128k / 1MB)逐渐更改它们会逐渐降低性能。 我遇到EXPLAIN (ANALYZE,BUFFERS)了一些疑问,罪魁祸首似乎是哈希联接的速度明显慢。我不清楚为什么。 举一些具体的例子,我有以下查询。在默认配置下,它在〜2100ms内运行,在配置增加缓冲区的情况下,在〜3300ms内运行: select count(*) from contest c left outer …

2
配置PostgreSQL以获得读取性能
我们的系统写入大量数据(类似于大数据系统)。写入性能足以满足我们的需求,但读取性能确实太慢。 我们所有表的主键(约束)结构相似: timestamp(Timestamp) ; index(smallint) ; key(integer). 一个表可以具有数百万行,甚至数十亿行,并且读取请求通常针对特定时间段(时间戳/索引)和标签。查询返回大约200k行是很常见的。目前,我们每秒可以读取1.5万行,但我们需要提高10倍。这可能吗?如果可以,怎么办? 注意: PostgreSQL与我们的软件打包在一起,因此每个客户端的硬件有所不同。 它是用于测试的VM。VM的主机是Windows Server 2008 R2 x64,具有24.0 GB的RAM。 服务器规格(虚拟机VMWare) Server 2008 R2 x64 2.00 GB of memory Intel Xeon W3520 @ 2.67GHz (2 cores) postgresql.conf 优化 shared_buffers = 512MB (default: 32MB) effective_cache_size = 1024MB (default: 128MB) checkpoint_segment = 32 (default: 3) checkpoint_completion_target …

2
错误:尚未选择要在其中创建的架构
我正在一个Amazon RDS postgresql数据库上工作,在该数据库中我知道公共架构存在一些问题(也许已删除)。但是显然该模式存在,并且无论如何问题都没有解决。这是使用新创建的空数据库的示例会话: mydb=> CREATE TABLE distributors ( mydb(> did integer, mydb(> name varchar(40) UNIQUE mydb(> ); ERROR: no schema has been selected to create in mydb=> show search_path; search_path ---------------- "$user",public (1 row) mydb=> create schema public; ERROR: schema "public" already exists 有什么提示吗?我应该找什么? 解决了。 感谢DanielVérité的回答,我已经解决了以下问题: grant usage on schema …

3
在9.1下是否仍建议使用常规VACUUM ANALYZE?
我在Ubuntu上使用PostgreSQL 9.1。是否VACUUM ANALYZE仍建议使用预定时间,还是自动真空足以满足所有需求? 如果答案是“取决于”,则: 我的数据库比较大(压缩的转储大小为30 GiB,数据目录为200 GiB) 我将ETL输入数据库,每周导入近300万行 更改最频繁的表都从主表继承,主表中没有数据(数据按周划分) 我创建每小时汇总,并从那里创建每日,每周和每月报告 我要问的是因为计划安排VACUUM ANALYZE正在影响我的报告。它运行了5个多小时,本周我不得不杀死它两次,因为它影响了常规数据库的导入。check_postgres不会报告数据库有任何重大膨胀,所以这并不是真正的问题。 从文档中,autovacuum还应注意事务ID的回绕。问题是:我还需要一个VACUUM ANALYZE吗?
38 postgresql  etl  vacuum 

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.