Questions tagged «postgresql»

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

1
EC2-如何正确备份PostgreSQL数据?
设置如下:1个带有3个附加卷的小型Amazon Linux(EBS支持)EC2实例。这既是Web服务器又是数据库服务器。一卷用于代码,一卷用于PostgreSQL(8.4)数据目录,一卷用于存储PostgreSQL的WAL文件。 (1)具有WAL文件的卷还将具有数据目录的基本备份,该备份将在执行pg_start_backup()之后复制。然后它将存储来自PostgreSQL的连续存档输出(WAL文件)。要对该卷进行快照,是否有必要发出同步并冻结文件系统(如果是XFS,则使用xfs_freeze;如果是EXT4,则使用dmsetup)?还是可以只拍摄实时快照?WAL文件将以每分钟1个的速度发送。在复制单个WAL文件并导致数据损坏时,是否可以启动快照? (2)包含活动PostgreSQL数据目录的卷也将得到备份(每天一次)。在制作该卷的快照之前,我发出pg_dump并将生成的SQL文件保存在数据目录中。采取预防措施以确保实际数据库数据一致是否有意义?假设实时快照可以正确地(a)备份配置文件(postgresql.conf,pg_hba.conf,pg_ident.conf)和(b)备份SQL转储文件是否正确?备份这两个东西,即sql dump文件和config文件,将是对该卷进行快照的重点。数据库不是很大,因此我不介意数据文件将使此快照膨胀。在那种情况下,我可以做一个实时快照-对吗? (2a)将数据目录保留在根卷上,并且有一个备份脚本将sql转储文件和配置文件复制到另一个卷上,并在复制完成后对该卷进行快照是否会更好呢? (3)至于上面带有代码的卷,是否还有一点要同步和冻结文件系统?还是只能拍摄实时快照?此数据应相当“静态”。 (4)这是一个可靠的备份方案吗?根卷不定期备份,因为在设置和配置机器映像后,我只会保留它。 谢谢

1
应用规则后如何查看查询?
从文档 -37.3.1.1。“逐步的第一条规则” CREATE TABLE shoelace_log ( sl_name text, -- shoelace changed sl_avail integer, -- new available value log_who text, -- who did it log_when timestamp -- when ); CREATE RULE log_shoelace AS ON UPDATE TO shoelace_data WHERE NEW.sl_avail <> OLD.sl_avail DO INSERT INTO shoelace_log VALUES ( NEW.sl_name, NEW.sl_avail, current_user, current_timestamp …

4
如何使用注释对PostgreSQL模式进行版本控制?
我使用Git控制大部分工作:代码,文档,系统配置。之所以能够做到这一点,是因为我所有有价值的工作都存储为文本文件。 我也一直在为Postgres数据库编写和处理许多SQL模式。该模式包括视图,SQL函数,我们将使用R编程语言(通过PL / R)编写Postgres函数。 我试图复制和删除我和我的协作者编写的块模式,但是我忘记这样做了。复制和过去操作是重复的,并且容易出错。 pg_dump / pg_restore方法将不起作用,因为它会丢失注释。 理想情况下,我希望有某种方法可以将当前模式提取到一个或多个文件中并保留注释,以便进行版本控制。 带有注释的版本控制架构的最佳实践是什么?

2
如何停止/禁用PITR并安全清洁WAL网段?
我们的生产服务器在CentOS 5.2版(最终版)上运行PostgreSQL v8.2.3。 我们已经在生产服务器中设置了PITR。由于某些原因,设置PITR后,我们将无法管理和维护它。最终,我们的WAL存档驱动器(辅助驱动器)已满(100%使用),并且要存档的其他WAL存档段已累积在pg_xlog /目录本身中(在主驱动器中可用) PITR设置细节 有2个驱动器: 主驱动器(pgsql / data /目录驻留)为400 GB。 辅助驱动器(WAL存档)为300 GB。所有WAL归档文件都将写入此辅助驱动器。 现在,我们决定停止/禁用PITR。 我的问题是,在这种情况下,如何停止/禁用PITR并安全地清除两个驱动器中的所有WAL段? 推荐/建议的方式是什么?对此,专家的建议/想法/建议受到高度赞赏。

5
有专业的全职PostgreSQL DBA吗?
我的工作是使用PostgreSQL作为数据库的JavaEE应用程序。尽管我们有生产服务器的系统管理员,该管理员还管理我们的数据库服务器,但是我们没有专职的DBA,这使我想知道是否有。我可以想象任何专职的DBA都可以专门与Oracle数据库一起工作。我是在忽略某些东西还是在假设没有专用的Postgres DBA时是正确的? PS:我只是出于好奇而问这个。 PPS:我想用DBA标记这个问题,但是显然这将是一个新标记。有人可以帮我吗?

1
没有WHERE子句的UPDATE是否会锁定PostgreSQL中的表?
整个表UPDATE(没有指定WHERE子句)是否在PostgreSQL中锁定了一个表?例如,它是否防止行被删除/插入? 例如,如果运行,是否 UPDATE t1 SET key = 'value' 可以t1在UPDATE执行过程中插入新行? 如果否,我UPDATE是否可以期望即使启动后出现的行也会更新?(键DEFAULT 'value'的定义中没有)

1
声明函数波动是否IMMUTABLE会损害性能?
Postgres函数用波动性分类VOLATILESTABLEIMMUTABLE声明,或。众所周知,该项目使用内置功能的这些标签非常严格。并且有充分的理由。一个突出的例子:表达式索引仅允许IMMUTABLE函数,并且它们必须是真正不变的,以避免错误的结果。 用户定义的函数仍然可以自由地声明,如所有者选择的那样。该手册建议: 为了获得最佳的优化结果,您应该使用对它们有效的最严格的波动性类别来标记您的函数。 ...并添加了错误的波动率标签可能会出错的大量问题列表。 尽管如此,在某些情况下伪造的不变性还是有意义的。通常,当您知道该函数在您的范围内实际上是不变的。例: PostgreSQL是否支持“不区分重音”的排序规则? 除了对数据完整性的所有可能影响,对性能有什么影响?人们可能会认为声明一个函数IMMUTABLE只会对性能有所帮助。是这样吗? 声明功能波动会IMMUTABLE 损害性能吗? 让我们假设当前的Postgres 10缩小了范围,但是所有最新版本都很有趣。

1
使用pg_trgm索引进行相似性搜索的查询时间慢
我们在表中添加了两个pg_trgm索引,以启用按电子邮件地址或名称的模糊搜索,因为我们需要按名称或注册过程中拼写错误的电子邮件地址(例如“ @ gmail.con”)查找用户。ANALYZE在创建索引后运行。 但是,在绝大多数情况下,对这两个索引中的任何一个进行排名搜索都非常缓慢。也就是说,随着超时的增加,查询可能会在60秒内返回,在极少数情况下可能会很快返回15秒,但通常查询会超时。 pg_trgm.similarity_threshold是的默认值0.3,但将其提高0.8似乎没有什么不同。 这个特定的表有超过2500万行,并且不断地对其进行查询,更新和插入(每个表的平均时间小于2ms)。设置为PostgreSQL 9.6.6,在具有通用SSD存储和或多或少默认参数的RDS db.m4.large实例上运行。pg_trgm扩展是1.3版。 查询: SELECT * FROM users WHERE email % 'chris@example.com' ORDER BY email <-> 'chris@example.com' LIMIT 10; SELECT * FROM users WHERE (first_name || ' ' || last_name) % 'chris orr' ORDER BY (first_name || ' ' || last_name) <-> 'chris orr' LIMIT …

1
Postgres:使用参数截断psql函数中是否存在
我试图获得一个psql函数,如果存在的话,它将截断给定的表名。我一直在尝试多种功能,但到目前为止它们都没有起作用。这是代码: CREATE OR REPLACE FUNCTION truncateIfExists(tableName TEXT) returns void as $$ BEGIN EXECUTE format( 'IF EXISTS ( SELECT * FROM information_schema.tables WHERE table_name =' || tableName || ' ) THEN TRUNCATE tableName; END IF; '); END; $$language plpgsql 现在,我可以使它在一个简单的过程中使用一个统一的名称工作: do $$ begin IF EXISTS (SELECT * FROM information_schema.tables WHERE table_name …

1
PostgreSQL 9.2-9.6升级,停机时间为零
我必须从PostgreSQL 9.2升级到9.6。以下是我面临的挑战: 由于我们具有流复制设置,并且PostgreSQL在流复制模式下不支持从较低版本升级到较高版本,因此在升级主服务器时,我必须重建从服务器,这需要3个小时。我没有时间闲暇。在任何给定时间,我们需要一个从属服务器和一个主控服务器。是否有其他方法可以使用流复制来升级而不必重建从服务器? 为了构建逻辑复制,我们考虑过使用slony,但是slony具有一些局限性,因为它无法自动复制: 更改为大对象(BLOBS) DDL命令所做的更改 用户和角色的更改 ...并且我们的应用程序具有连续的创建命令。因此,我们不能使用slony。 请提出一些建议,以避免从站重建,并以最少的停机时间进行升级,并准备好一个主站和一个从站。

2
PostgreSQL Upsert在分区表上不起作用
有一个这样的表: CREATE TABLE aggregated_master ( "user" BIGINT, type TEXT, date TIMESTAMP, operations BIGINT, amount NUMERIC, PRIMARY KEY ( "user", type, date ) ); 该表是从中继承许多分区的主表。分区由DATE字段中的MONTH完成。例如:2017年8月的分区将是agg_201708,它的PK将是pk_agg_201708。在插入之前,通常有触发器将插入重定向到适当的分区。 事情是我想对这张表做一个UPSERT。DO CONFLICT部分不起作用。 代码首先是这样的 INSERT INTO aggregated_master (user, type, date, oeprations, amount) SELECT user, type, date, SUM(ops), SUM(amt) FROM ... WHERE ... GROUP BY USER, TYPE, DATE …

5
互斥的多对多关系
我有一个表containers,可以有几个表一个多一对多的关系,让我们说那些是plants,animals和bacteria。每个容器可以包含任意数量的植物,动物或细菌,并且每个植物,动物或细菌可以位于任意数量的容器中。 到目前为止,这非常简单,但是我遇到的问题是每个容器应仅包含相同类型的元素。例如包含植物和动物的混合容器应成为数据库中的约束违例。 我的原始模式如下: containers ---------- id ... ... containers_plants ----------------- container_id plant_id containers_animals ------------------ container_id animal_id containers_bacteria ------------------- container_id bacterium_id 但是使用这种模式,我无法提出如何实现容器应该是同质的约束。 有没有一种方法可以使用参照完整性来实现这一点,并确保在数据库级别上容器是同质的? 我为此使用Postgres 9.6。

2
一字节的“ char”类型在PostgreSQL中如何工作?
我经常看到人们在谈论"char"。我没用过 在文档中定义为 类型“ char”(请注意引号)与char(1)的不同之处在于,它仅使用一个字节的存储空间。在系统目录中内部使用它作为一种简单的枚举类型。 并进一步, "char" 1 byte single-byte internal type 那么,如果它是一个字节,则域是什么,您将如何使用它?它是签名的还是未签名的?在@Erwin Brandstetter的这篇文章中,他对此进行了阐述,但我仍然感到困惑。他正在使用ascii()和chr(),并提供了 SELECT i , chr(i)::"char" AS i_encoded , ascii(chr(i)::"char") AS i_decoded FROM generate_series(1,256) i; 这在10到11之间确实很奇怪。 i | i_encoded | i_decoded -----+-----------+----------- ... 8 | \x08 | 8 9 | | 9 10 | +| 10 | | -- …

2
创建PostgreSQL约束以防止唯一组合行
假设您有一个简单的表: name | is_active ---------------- A | 0 A | 0 B | 0 C | 1 ... | ... 我需要创建一个特殊的唯一约束,该约束在以下情况下会失败:is_active对于相同的name值,不同的值不能共存。 允许条件的示例: 注意:简单的多列唯一索引不允许这样的组合。 A | 0 A | 0 B | 0 允许条件的示例: A | 0 B | 1 条件失败的示例: A | 0 A | 1 -- should be prevented, …

2
不能索引大于缓冲区页面1/3的值
我对DB不太满意,所以请多多包涵。 我正在尝试将很长的JSON数据放入表中,该表是由Django框架创建的。 我在Heroku上使用Postgres。因此,当我尝试放入数据时,出现以下错误: File "/app/.heroku/python/lib/python3.6/site-packages/django/db/backends/utils.py", line 64, in execute return self.cursor.execute(sql, params) psycopg2.OperationalError: index row size 3496 exceeds maximum 2712 for index "editor_contentmodel_content_2192f49c_uniq" HINT: Values larger than 1/3 of a buffer page cannot be indexed. Consider a function index of an MD5 hash of the value, or use full text …

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.