Questions tagged «postgresql»

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

4
每个连接的临时模式?
我正在尝试将单元测试从H2迁移到Postgresql。 当前,H2为我提供了一个内存中架构,这样每个连接都映射到一个唯一的架构,创建表,运行测试并删除该架构。模式的创建和销毁由H2自动处理。 单元测试可以同时运行。 在Postgresql中执行此操作的最佳方法是什么?特别, 如何为每个连接获取唯一的架构? 测试框架应该生成唯一的名称还是有内置的机制来做到这一点? 如何确保在删除连接时删除架构? 当单元测试被杀死时,我不想以悬挂模式结束。 哪种方法将产生最高的性能? 我需要每秒创建/删除数十个模式。 更新:我在这里找到了一个相关的答案,但是如果运行单元测试的进程被杀死,它无法删除架构。

1
PostgreSQL流与基于文件的复制(就服务器行为和配置而言)
我试图了解PostgreSQL复制的最佳用法及其工作方式,以便在生产环境中进行故障排除。 我很难理解以下两种复制类型之间的区别:(1)配置(2)在每种情况下主/从2个服务器的性能 在PostgreSQL(9.2+)上的复制实际上是在Master上创建大小为16MB的XLOG文件(取决于创建每个文件的频率设置),并通过某种方法发送到Slave。 我的设置(出于这个问题的目的) 在主archive_command ='rsync -av%p postgres @ [SlaveIP]:[wal_archive_folder] /%f' 上配置Postgresql.conf 从属服务器上配置Recovery.conf以读取日志文件 restore_command ='cp [wal_archive_folder] /%f \“%p \”' primary_conninfo ='主机= [MasterIP]端口= 5432 user = postgres' 我的问题是,此配置的哪一部分使这种“流式”复制与“日志传送”相比较?我的主服务器配置为使用rsync将日志发送到从服务器(此日志是否发送?)我的从服务器配置为能够在recovery.conf中连接到主服务器(此数据流吗?) 问题的第二部分:发生了什么?我了解PostgreSQL上还有一个通过WAL_sender和WAL_receiver的协议。但是我不清楚这是否仅用于流式传输,如果是,则rsync在主服务器中如何使用? :) 谢谢!!很抱歉,如果这是一个明显的问题。我一直在阅读大量的博客/书籍,但是很难理解。Postgres Wiki的深度是如此之深,以至于需要花很长时间才能完全理解(我有最后期限)

2
在PostgreSQL 8.4中重新索引之前,是否应该总是进行VACUUM ANALYZE?
每天清晨,一个pgAgent作业都会从我的PostgreSQL 8.4数据库中的表B中刷新表A的内容。表A在91列中包含约140k记录,并具有两个索引-一个作为PRIMARY KEY的一部分,另一个在POINT PostGIS几何列上的GIST索引。 为了使过程更快一些,作业将删除几何列上的索引,然后删除表A中的记录并从表B中插入记录,然后重新创建索引。autovacuum守护程序在感觉良好时就可以完成所有工作(大约在十分钟后,通过比较作业状态和表状态的作业完成时间和autovacuum运行时间)。 在所有这些都发生之后,今天早上检查表时,表统计信息告诉我表大小为272MB,TOAST表大小为8192bytes,索引大小为23MB。这似乎很大,所以我在表上发出了REINDEX命令,索引大小降至9832kB。 我的问题是这样的: 为什么当从头开始重新构建索引(或至少是几何列索引)时,REINDEX会明显减少索引的大小?我应该确定在建立索引之前已经对表进行了清理/分析吗?这不是在主键上删除索引的一个因素吗?我想念什么?

2
未使用但影响查询的索引
我有一个带有一些数字和一些其他数据的PostgreSQL 9.3表: CREATE TABLE mytable ( myid BIGINT, somedata BYTEA ) 该表当前有约10M条记录,并占用1GB磁盘空间。myid不连续。 我想计算100000个连续数字的每个块中有多少行: SELECT myid/100000 AS block, count(*) AS total FROM mytable GROUP BY myid/100000; 这将返回大约3500行。 我注意到,即使查询计划根本没有提及某个索引,该索引的存在也会显着加快此查询的速度。没有索引的查询计划: db=> EXPLAIN (ANALYZE TRUE, VERBOSE TRUE) SELECT myid/100000 AS block, count(*) AS total FROM mytable GROUP BY myid/100000; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------- GroupAggregate (cost=1636639.92..1709958.65 …

1
如何从PostgreSQL的JSON []数组中删除已知元素?
我面临有关在PostgreSQL中使用JSON数据类型的问题。我试图实现在数据库中存储非规范化的Java模型。该模型具有复杂对象列表。因此,我决定在本地PostgreSQL数组中将其建模为JSON。 这是我的表创建语句的摘要: CREATE TABLE test.persons ( id UUID, firstName TEXT, lastName TEXT, communicationData JSON[], CONSTRAINT pk_person PRIMARY KEY (id) ); 如您所见,这是一个具有JSON中通讯数据对象列表的人。这些对象之一可能看起来像这样: {"value" : "03334/254147", "typeId" : "ea4e7d7e-7b87-4628-ba50-6a5f6e63dbf6"} 我可以使用PostgreSQL的array_append轻松地将这样的JSON对象附加到数组。但是,我无法从数组中删除已知值。考虑一下这个SQL语句: UPDATE test.persons SET communicationData = array_remove( communicationData, '{"value" : "03334/254147", "typeId" : "ea4e7d7e-7b87-4628-ba50-6a5f6e63dbf6"}'::JSON ) WHERE id = 'f671eb6a-d603-11e3-bf6f-07ba007d953d'; 失败ERROR: could not identify …

4
存储数以百万计的行的非数字化数据还是某些SQL魔术?
我的DBA经验远不止于简单存储+检索CMS样式数据,还有很多,所以这可能是一个愚蠢的问题,我不知道! 我遇到一个问题,我需要查询或计算特定时间段内特定群体人数和特定天数的假期价格。例如: 一月份任何时候可供4人入住2晚的酒店客房多少钱? 我有像这样存储的5000家酒店的价格和空房数据: Hotel ID | Date | Spaces | Price PP ----------------------------------- 123 | Jan1 | 5 | 100 123 | Jan2 | 7 | 100 123 | Jan3 | 5 | 100 123 | Jan4 | 3 | 100 123 | Jan5 | 5 | 100 123 …

1
使用CTE INSERT的结果进行插入以提供唯一的ID值
我正在写一份工作,将数据从旧设计转换为新设计。在此过程中,我需要从插入中获取ID到单独的表中,并在插入目标表中使用它,如下所示: CREATE TABLE t1 { t1_id BIGSERIAL, col1 VARCHAR }; CREATE TABLE t2 { t2_id BIGSERIAL, col2 VARCHAR, -- renamed from col1 to avoid confusion t1_id BIGINT REFERENCES t1.t1_id }; 我定义了与以下形式匹配的SQL: WITH ins AS ( INSERT INTO t1 (t1_id) VALUES (DEFAULT) RETURNING t1_id ) INSERT INTO t2 (col1, t1_id) SELECT …


1
仅给出字段名称,如何访问NEW或OLD字段?
我正在写一个验证触发器。触发器必须验证数组的总和等于另一个字段。由于我有很多这种验证的实例,因此我想编写一个过程并创建多个触发器,每个触发器都有一组不同的要检查的字段。 例如,我具有以下架构: CREATE TABLE daily_reports( start_on date , show_id uuid , primary key(start_on, show_id) -- _graph are hourly values, while _count is total for the report , impressions_count bigint not null , impressions_graph bigint[] not null -- interactions_count, interactions_graph -- twitter_interactions_count, twitter_interactions_graph ); 验证必须确认impressions_count = sum(impressions_graph)。 我被卡住是因为我不知道如何NEW从plpgsql中动态访问字段: CREATE FUNCTION validate_sum_of_array_equals_other() …

2
PostgreSQL中的数据库一致性检查器
PostgreSQL中是否有任何DBCC(数据库一致性检查器)命令?我可以找到SQL Server DBCC命令,但找不到Postgres吗?我读到postgresql具有性能调整的内置功能,并且没有DBCC命令可用于postgres。是真的吗

3
一种在多插入事务中引用ID的方法?(postgres)
假设表“ entity.eid”是自动递增的,我希望能够引用稍后在同一事务中分配的自动递增值。我这样做的方式是进行多次交易,我认为这不是最佳选择。 START TRANSACTION; INSERT INTO entity ...; INSERT INTO t2 (eid, ...) VALUES (?NEW EID REF HERE?, ...), (...), (...); COMMIT;

1
pgadmin3中的pg_restore错误-Postgresql
我已经使用pgadmin3工具从system1备份了一个PostgreSQL数据库。创建的备份文件的扩展名为“ .backup” 我正在尝试在安装了postgresql 9.0和pgadmin3 1.8的另一个system2上还原它,但是iam收到了错误 无法执行查询:错误:无法识别的配置参数“ lock_timeout”命令为:SET lock_timeout = 0; 两个系统的配置 system1 win7-64bit PostgreSQL 9.0.13-1-64位pgadmin 1.8 system2 win7-32​​位PostgreSQL 9.0.13-1-32位pgadmin 1.8

1
Postgres 9.1.6错误索引在块0包含意外的零页
我在运行于debian服务器上的Postgres 9.1.6上设置了流复制,并且一切正常。 当我尝试在副本数据库上运行查询时,出现以下错误: ERROR: index "tbl_cust_id_idx" contains unexpected zero page at block 0 HINT: Please REINDEX it. 是什么导致此错误? 该问题也发布在/programming/17865135/postgres-9-1-6-error-index-contains-unexpected-zero-page-at-block-0

1
针对瞬时数据优化PostgreSQL
我有几张桌子,每张桌子都有100-300个整数类型的列,这些表保存高度易变的数据。数据集由一或两个主键进行键控,当刷新发生时,整个数据集将被删除,新数据将被插入到一个事务中。数据集的大小通常为几百行,但在极端情况下可以达到几千行。刷新每秒发生一次,并且通常不区分针对不同键的数据集更新,因此删除和重新创建表是不可行的。 如何调整Postgres以处理此类负载?如果有任何不同,我可以使用最新和最好的版本。

2
PostgreSQL:在每个架构上执行DDL
我有一个多租户数据库设置,需要添加一些列。我正在使用架构(和search_path)对用户进行分区,因此我正在寻找一种无所不在的方法来对所有数据库应用DDL模式更改。最初,我以为我可以将其作为单个查询(在pg_catalog上为游标)来实现,但是认为命令行调用psql -f可能是首选方法。

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.