Questions tagged «postgresql»

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

1
VACUUM将磁盘空间返回给操作系统
VACUUM除某些特殊情况外,通常不会将磁盘空间返回给操作系统。 从文档: 标准形式的VACUUM删除表和索引中的死行版本,并标记可用于将来重用的空间。但是,它不会将空间返回给操作系统,除非在特殊情况下,表末尾的一个或多个页面变得完全空闲,并且可以轻松获得独占表锁。相反,VACUUM FULL通过编写没有死角的表文件的全新版本来主动压缩表。这样可以最大程度地减少表的大小,但是会花费很长时间。在操作完成之前,表的新副本还需要额外的磁盘空间。 问题是:如何实现该数据库状态one or more pages at the end of a table become entirely free?可以通过完成此操作VACUUM FULL,但是我没有足够的空间来实现它。那么还有其他可能性吗?

2
PgAdmin III-密码为空时如何连接数据库?
此问题是从“服务器故障” 迁移而来的,因为可以在数据库管理员堆栈交换中回答。 迁移 8年前。 我已经在PC(Win 7)上安装了PostgreSQL 9.1。我有一个小型Java应用程序,它通过login=sa和成功连接到它password=""。连接有效。 但是,PgAdmin III本身拒绝了它。我得到: Error connecting to the server: fe_sendauth: no password supplied 如何使用空密码从PgAdmin III连接到数据库? 编辑 这只是测试,而不是生产代码。

6
选择json_agg内的列
我有一个查询,如: SELECT a.id, a.name, json_agg(b.*) as "item" FROM a JOIN b ON b.item_id = a.id GROUP BY a.id, a.name; 如何选择JSON对象中b没有的列b.item_id? 我已经阅读了有关ROW,但它返回的JSON对象如下: {"f1": "Foo", "f2": "Bar"} 一旦提取JSON对象以匹配正确的列键,我将需要重新映射。我想避免这种情况,并保留原始列名称。

5
查询以返回查询,表或视图的输出列名称和数据类型
是否有PostgreSQL查询或命令返回查询,表或视图的字段名称和字段类型? 例如,如果将解决方案应用于简单的SELECT查询,SELECT * from person则应返回如下列表: Column Name | Column Type =========================== First Name | character Last Name | character Age | integer Date of Birth | date 我已经查看了information_schema以下答案中描述的视图,它似乎很好地覆盖了表格,并且我怀疑它也覆盖了视图,但是我还没有检查过。 最后一个是任意但有效的SELECT查询,例如,数据库上的JOINS, UNIONS等。是否有内置过程或其他存储过程或脚本可以对任何有效的QUERY完全返回相同的内容? 我正在开发一个用于创建数据和查询表单的程序,该信息对于数据验证和对返回的数据执行功能是必需的。

3
我可以为左外部联接提供默认设置吗?
假设我有表a(带有a1列)和b(带有b1和b2列),并且我执行了左外部联接 SELECT * FROM a LEFT OUTER JOIN b ON a.a1 = b.b1 然后,b1和b2将为NULL,其中a1的值不匹配b1的值。 我可以为b2提供默认值,而不是NULL吗?需要注意的是COALESCE不会在这里工作,因为我不希望默认值来覆盖潜在的NULL在B2那里是 B1匹配A1的值。 也就是说,a和b为 CREATE TABLE a (a1) AS VALUES (1), (2), (3) ; CREATE TABLE b (b1,b2) AS VALUES (1, 10), (3, null) ; a1 b1 | b2 --- -------- 1 1 | 10 2 3 …
21 postgresql  join 

3
在Postgres中查询实例化视图的定义
我想知道如何在Postgres中查询实例化视图的定义。作为参考,我希望执行的操作与常规视图的操作非常相似: SELECT * FROM information_schema.views WHERE table_name = 'some_view'; 它为您提供以下列: table_catalog table_schema table_name view_definition check_option is_updatable is_insertable_into is_trigger_updatable is_trigger_deletable is_trigger_insertable_into 物化视图可能吗? 到目前为止,从我的研究看来,物化视图似乎是故意从information_schema中排除的,因为 information_schema仅可以显示SQL标准中存在的对象。 (http://www.postgresql.org/message-id/3794.1412980686@sss.pgh.pa.us) 由于它们似乎被完全排除在information_schema之外,因此我不确定该怎么做,但是我想做的事情有两个: 查询是否存在特定的实例化视图。(到目前为止,我发现这样做的唯一方法是尝试创建一个具有相同名称的垫视图,看看它是否爆炸了。) 然后查询实例化视图的定义(类似于上的view_definition列information_schema.views)。

2
使用位图索引扫描的查询计划中的“重新检查条件:”行
这是从注释到上一个问题的副产品: Postgres 9.4.4查询需要永远 使用PostgreSQL 9.4,Recheck Cond:在所输出的查询计划中的位图索引扫描之后,似乎总是出现一行EXPLAIN。 就像EXPLAIN所引用问题的输出中一样: -> Bitmap Heap Scan on table_three (cost=2446.92..19686.74 rows=8159 width=7) Recheck Cond: (("timestamp" > (now() - '30 days'::interval)) AND (client_id > 0)) -> BitmapAnd (cost=2446.92..2446.92 rows=8159 width=0) -> Bitmap Index Scan on table_one_timestamp_idx (cost=0.00..1040.00 rows=79941 width=0) Index Cond: ("timestamp" > (now() - '30 days'::interval)) …

4
为什么Postgres会生成一个已经使用的PK值?
我正在使用Django,偶尔我会收到此错误: IntegrityError:重复的键值违反了唯一约束“ myapp_mymodel_pkey” 详细信息:键(id)=(1)已存在。 实际上,我的Postgres数据库确实有一个myapp_mymodel对象,其主键为1。 为什么Postgres会再次尝试使用该主键?或者,这很可能是我的应用程序(或Django的ORM)引起的吗? 刚刚,此问题连续发生了3次。我发现的是,对于给定的表,它确实发生了一次或多次,然后不再发生。它似乎在每个表完全停止运行几天之前就发生了,每个表至少发生一分钟左右才发生,并且只是间歇地发生(并非所有表都立即发生)。 这个错误是如此断断续续的事实(在2周内仅发生了3次左右-数据库上没有其他负载,只是我测试了我的应用程序)使我非常警惕低级问题。

1
滚动总和/计数/日期间隔内的平均值
在一个涵盖18个月内成千上万个实体的交易的数据库中,我想运行一个查询,以将每个可能的30天期限entity_id与该30天内的交易金额和COUNT 个交易的总和进行分组。以我可以查询的方式返回数据。经过大量测试,此代码完成了我想要的大部分工作: SELECT id, trans_ref_no, amount, trans_date, entity_id, SUM(amount) OVER(PARTITION BY entity_id, date_trunc('month',trans_date) ORDER BY entity_id, trans_date ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS trans_total, COUNT(id) OVER(PARTITION BY entity_id, date_trunc('month',trans_date) ORDER BY entity_id, trans_date ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS trans_count FROM transactiondb; 我将在更大的查询中使用类似以下内容的结构: SELECT * FROM …

4
将单独的范围合并为最大可能的连续范围
我正在尝试合并多个日期范围(我的负载最多约为500,大多数情况下为10),这些日期范围可能会或可能不会重叠到最大的连续日期范围内。例如: 数据: CREATE TABLE test ( id SERIAL PRIMARY KEY NOT NULL, range DATERANGE ); INSERT INTO test (range) VALUES (DATERANGE('2015-01-01', '2015-01-05')), (DATERANGE('2015-01-01', '2015-01-03')), (DATERANGE('2015-01-03', '2015-01-06')), (DATERANGE('2015-01-07', '2015-01-09')), (DATERANGE('2015-01-08', '2015-01-09')), (DATERANGE('2015-01-12', NULL)), (DATERANGE('2015-01-10', '2015-01-12')), (DATERANGE('2015-01-10', '2015-01-12')); 表看起来像: id | range ----+------------------------- 1 | [2015-01-01,2015-01-05) 2 | [2015-01-01,2015-01-03) 3 | [2015-01-03,2015-01-06) …

1
对于相同的模式/查询,MySQL和PostgreSQL之间的性能差异[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 6年前关闭。 我是一名新手DBA,并且我在Microsoft SQL Server中有经验,但是我想跳到FLOSS。 我正在建立一家公司,我们用Postgres后端开发了一个应用程序(PHP),并且还进行了一些与MySQL比较的测试。我们观察到MySQL的速度是PostgreSQL的两倍。 我进行了明显的性能测试: 表中的相同列,具有等效的列数据类型。 行数相同。 两者中的索引相同(包括主键)。 CPU负载处于空闲状态,而Postgres机器则要好得多。 和相同的查询(显然)。 我究竟做错了什么? PS:我阅读了许多有关数据库引擎性能调整的“ howtos”。 PS(2):我们在MySQL数据库上使用InnoDB(每个表一个文件)。 嗨,垫子! 我做了三个常见的选择(也是最难的)查询。 关于磁盘的问题,肯定是不一样的。在Postgres中,它是SSD(快三倍)。 MySQL缓存数据: +------------------------------+----------------------+ | Variable_name | Value | +------------------------------+----------------------+ | binlog_cache_size | 32768 | | have_query_cache | YES | | key_cache_age_threshold | 300 | | key_cache_block_size | 1024 | | key_cache_division_limit …

3
如何通过更新(软件和硬件)为重I / O优化数据库
这种情况 我有一个PostgreSQL 9.2数据库,它一直在大量更新。因此,该系统受I / O限制,我目前正在考虑进行另一次升级,我只需要一些有关从何开始改进的指导。 这是过去三个月情况的图片: 如您所见,更新操作占据了大多数磁盘利用率。这是在更详细的3小时窗口中情况的另一幅图片: 如您所见,峰值写入速率约为20MB / s 软件 服务器正在运行ubuntu 12.04和postgresql 9.2。更新类型通常是在ID标识的各个行上进行小更新。例如UPDATE cars SET price=some_price, updated_at = some_time_stamp WHERE id = some_id。我已经尽可能地删除和优化了索引,并且服务器配置(Linux内核和postgres conf)也都进行了优化。 硬件 硬件是一台专用服务器,在RAID 10阵列中具有32GB ECC ram,4个600GB 15.000 rpm SAS磁盘,由带BBU的LSI RAID控制器和Intel Xeon E3-1245 Quadcore处理器控制。 问题 对于这种口径的系统(读/写),图表显示的性能是否合理? 因此,我应该集中精力进行硬件升级还是对软件进行更深入的研究(内核调整,conf,查询等)? 如果进行硬件升级,磁盘数量是性能的关键吗? ------------------------------更新------------------- ---------------- 我现在已经用四个Intel 520 SSD而不是旧的15k SAS磁盘升级了我的数据库服务器。我正在使用相同的RAID控制器。事情已经大大改善了,从下面的内容可以看出,I / O的峰值性能提高了6到10倍左右-太好了! 但是,根据答案和新SSD的I …

6
计算连续两列或多列超过某个值的位置[篮球,双倍双倍,三倍双倍]
我玩篮球游戏,它允许将其统计信息输出为数据库文件,因此可以从中计算出在游戏中未实现的统计信息。到目前为止,我可以很轻松地计算出我想要的统计数据,但是现在我遇到了一个问题:从一个赛季的比赛统计数据中计算出一个球员本赛季创造的双打和/或双打的数量。 双精度双精度和三重精度双精度的定义如下: 双双: 双打被定义为一种表现,其中玩家在游戏中累积五个统计类别中的两个统计的两位数总数(点,篮板,助攻,抢断和盖帽)。 三双: 三重双打被定义为一种表现,其中玩家在游戏中五个统计类别中的三个统计点(得分,篮板,助攻,抢断和盖帽)中累计两位数。 四重双(为清楚起见添加) 四重双打是指在游戏中,玩家在五个统计类别中的四个统计类别中(得分,篮板,助攻,抢断和盖帽)累计两位数的表现。 “ PlayerGameStats”表存储了玩家玩的每个游戏的统计信息,外观如下: CREATE TABLE PlayerGameStats AS SELECT * FROM ( VALUES ( 1, 1, 1, 'Nuggets', 'Cavaliers', 6, 8, 2, 2, 0 ), ( 2, 1, 2, 'Nuggets', 'Clippers', 15, 7, 0, 1, 3 ), ( 3, 1, 6, 'Nuggets', 'Trailblazers', 11, …

5
PostgreSQL的最佳云平台
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为数据库管理员Stack Exchange 的主题。 6年前关闭。 当前,在我们的项目中,我们将专用服务器用于PostgreSQL数据库。 从理论上讲,我们可以在某些云平台上运行任何东西。但是,PostgreSQL配置与硬件配置严格相关。我们正在寻找具有本地PostgreSQL支持的云解决方案。 以下是所需功能的列表: 根据所选资源自动进行数据库配置调整 开箱即用的复制设置 那么,这种服务有哪些选择和最佳选择?
20 postgresql  cloud 


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.