Questions tagged «postgresql»

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


1
PostgreSQL公用表表达式与临时表?
WITH的PostgreSQL文档显示以下示例: WITH regional_sales AS ( SELECT region, SUM(amount) AS total_sales FROM orders GROUP BY region ), top_regions AS ( SELECT region FROM regional_sales WHERE total_sales > (SELECT SUM(total_sales)/10 FROM regional_sales) ) SELECT region, product, SUM(quantity) AS product_units, SUM(amount) AS product_sales FROM orders WHERE region IN (SELECT region FROM top_regions) GROUP …
11 postgresql 

1
为什么CTE比内联子查询差很多
我试图更好地了解查询计划程序在postgresql中的工作方式。 我有这个查询: select id from users where id <> 2 and gender = (select gender from users where id = 2) order by latest_location::geometry <-> (select latest_location from users where id = 2) ASC limit 50 它在我的数据库上运行的时间不到10ms,在users表中有大约500k条目。 然后,我认为为避免重复的子选择,我可以将查询重写为CTE,如下所示: with me as ( select * from users where id = 2 …

1
将可为空的列添加到表的时间超过10分钟
我在表上添加新列时遇到问题。 我尝试运行几次,但是运行了十多分钟后,由于锁定时间,我决定取消查询。 ALTER TABLE mytable ADD mycolumn VARCHAR(50); 有用的信息: PostgreSQL版本:9.1 行数:〜250K 列数:38 可为空的列数:32 约束数量:5(1 PK,3 FK,1 UNIQUE) 索引数:1 操作系统类型:Debian Squeeze 64 我发现了有关PostgreSQL管理可空列的方式的有趣信息(通过HeapTupleHeader)。 我的第一个猜测是,因为此表已经具有8位的32个可空列MAXALIGN,所以HeapTupleHeader的长度为4个字节(未经验证,我不知道该怎么做)。 因此,添加新的可为空的列可能需要在每行上更新HeapTupleHeader以添加新的8位MAXALIGN,这可能会导致性能问题。 因此,我尝试更改可为空的列之一(实际上并不是真正可为空的),以便将可为空的列的数量减少到31,以检查我的猜测是否正确。 ALTER TABLE mytable ALTER myothercolumn SET NOT NULL; 不幸的是,这种更改也需要很长时间,超过5分钟,因此我也中止了它。 您是否知道会导致这种性能损失的原因?

2
用来自另一个表的数据更新列
我正在研究复杂的问题,但是我将简化为这个问题。 我有两张桌子 A [ID, column1, column2, column3] B [ID, column1, column2, column3, column4] 我想更新第三个: C [ID, column1, column2,column3] 我正在使用此查询更新另一个第三张表。 UPDATE C set column1=t.firstTab, column2=t.secondTab, column3=t.thirdTab from (select A.column1 as firstTab, B.column2 as secTab, (A.column1 + B.column2) thirdTab from A, B limit 1; ) as t ; 我有: UPDATE 0 当我运行此查询时: …

2
限时降低ORDER BY
我有这个查询: SELECT * FROM location WHERE to_tsvector('simple',unaccent2("city")) @@ to_tsquery('simple',unaccent2('wroclaw')) order by displaycount 我对此感到满意: "Sort (cost=3842.56..3847.12 rows=1826 width=123) (actual time=1.915..2.084 rows=1307 loops=1)" " Sort Key: displaycount" " Sort Method: quicksort Memory: 206kB" " -> Bitmap Heap Scan on location (cost=34.40..3743.64 rows=1826 width=123) (actual time=0.788..1.208 rows=1307 loops=1)" " Recheck Cond: (to_tsvector('simple'::regconfig, unaccent2((city)::text)) …

2
查看Postgresql内存使用情况
我在Ubuntu服务器上运行Postgresql,需要能够监视其内存使用情况。目前,我有一个脚本在一分钟的cron作业中运行,以监视/记录各种统计信息,并且还需要监视/记录Postgresql的当前内存使用情况。我已经四处搜寻,但找不到很多东西,除了Postgresql善用共享内存,这样的程序(例如“ top”)给出的值并不准确。 如何在任何给定时间监视Postgresql的总内存使用量?以后将使用这些数据来创建图形进行分析。

2
PostgreSQL:不可变,易变,稳定
我不清楚IMMUTABLE,VOLATILE和STABLE函数的定义的真正含义。 我阅读了文档,特别是每个文档的定义。 IMMUTABLE指示该函数无法修改数据库,并且 在给定相同的参数值时始终返回相同的结果;也就是说,它不执行数据库查找或以其他方式使用其参数列表中不直接存在的信息。如果指定了此选项,则可以使用函数值立即替换具有全常数参数的任何函数调用。 STABLE表示该函数无法修改数据库,并且在单个表扫描中它将针对相同的参数值一致地返回相同的结果,但其结果可能会在SQL语句之间发生变化。对于其结果取决于数据库查找,参数变量(例如当前时区)等的函数,这是适当的选择。(对于希望查询当前命令修改的行的AFTER触发器来说,这是不合适的。)还请注意, current_timestamp系列功能符合稳定条件,因为它们的值在事务中不会更改。 VOLATILE表示该功能值即使在一次表扫描中也可以更改,因此无法进行优化。从这个意义上说,相对来说很少有数据库函数是易变的。一些示例是random(),currval(),timeofday()。但是请注意,任何具有副作用的函数都必须归类为易失性,即使其结果是可以预测的,也可以防止调用被优化。一个示例是setval()。 我的困惑来自与不可改变的条件,稳定的功能总是或始终返回相同的结果给出了相同的论点。 IMMUTABLE定义指出该函数不进行数据库查找或以其他方式使用未直接存在于其参数列表中的信息。因此,对我而言,这意味着此类函数用于操作客户端提供的数据,并且不应具有SELECT语句……尽管这听起来有点奇怪。 使用STABLE时,定义是相似的,因为它表示应始终返回相同的结果。因此,对我来说,这意味着每次使用相同的参数调用该函数时,它应返回相同的结果(相同的行,每次相同)。 因此,对我来说...意味着对表或可更新表执行SELECT的任何函数都应仅是易失性的。 但是,再次...对我来说听起来不对。 回到我的用例,我正在编写函数,这些函数在不断添加的表上执行带有多个JOIN的SELECT语句,因此,即使每次调用时,即使使用相同的参数,也希望函数调用返回不同的结果。 。 那么,这是否意味着我的功能应该是挥发性的?即使文档表明在这种意义上相对较少的数据库功能也是易失的? 谢谢!

1
PostgreSQL:SSL SYSCALL错误:检测到EOF
首先,我已经搜索并找到了与该错误有关的几篇文章,并且其中大多数都指向RAM问题或SSL问题,我尝试通过在命令行中添加sslmode = disabled来克服SSL的可能性: psql -U waypoint -d waypoint -W -c "alter table telemetria_data.historico alter clase type smallint, alter valor type real[], alter power type smallint, alter voltaje type real;" -h localhost -v sslmode=disable 但是出现了相同的消息: SSL SYSCALL error: EOF detected connection to server was lost 关于可能的内存问题,我不知道如何解决它。 数据结构就是此问题中描述的结构,您可能会发现这将是一个运行时间很长的查询,可以完成所有继承表上的完整alter table。 作业系统: Linux ip-10-1-0-9 …

2
从表中任何列字段为空的行中删除
有没有一种方法可以从表中删除任何行字段为空的行,而无需明确指定哪一列为空? 我正在使用postgreSQL。 这是我的关系模式: Column | Type | Modifiers --------------+---------+---------------------------------------------------------------------- id | integer | not null default nextval('aurostat.visitor_center_id_seq'::regclass) date | date | persons | integer | two_wheelers | integer | cars | integer | vans | integer | buses | integer | autos | integer | 谢谢
11 postgresql 


1
为什么不信任PL / Python?
根据文档: PL / Python仅作为一种“不受信任的”语言提供,这意味着它不提供任何限制用户可以执行的操作的方式,因此被称为plpythonu。如果在Python中开发了安全的执行机制,则将来可能会使用受信任的变体plpython。 为什么要为Python开发安全的执行机制而不是为Perl这样的其他语言开发安全的执行机制到底为什么呢?

2
列的数字与整数-大小和性能
我有一个使用PostgreSQL表的应用程序。该表非常大(数十亿行),并且有一列是整数。 该integer可高达6个位数,即0-999,999,没有底片。 我考虑过将其更改为numeric(6,0)。 这是个好主意吗?会numeric(6,0)占用更少的字节吗?性能如何(该表被查询很多)?
11 postgresql 

3
从表中获取最后一行的最快方法是什么?
我有一个PostgreSQL表Prices,其中包含以下列: price (十进制) product_id (整数) 也有created_at和updated_at列。 价格会定期更新,我将旧价格保留在表格中。对于给定的产品,表中的最后一个价格是当前价格。 获得特定产品最后价格的最有效方法是: 索引product_id并查询最后一条记录 添加第三列active(布尔值)以标记最新价格,并创建一个复合索引(product_id和active) 或者是其他东西?

3
从集合中设置随机值
我需要将一些随机值放入数据库中,但是我不想最终得到完全随机化的文本(例如7hfg43d3)。相反,我想随机选择我自己提供的值之一。

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.