我想知道在PosgreSQL中使用非顺序UUID作为表中主键的性能影响.
在使用集群存储来存储表记录的DBMS中,一旦表太大,使用UUID会增加插入成本,因为必须从磁盘读取以查找要执行插入的数据页.留在记忆中.据我了解,Postgres不会在插入上维护行聚类,所以我想在Postgres中使用UUID PK不会损害该插入的性能.
但我认为它会使插入到索引中的主键约束一旦表很大就会变得更加昂贵,因为它必须不断地从磁盘读取以在插入新数据时更新索引.而使用顺序键,索引只会在尖端更新,而尖端始终在内存中.
假设我正确理解了对索引的性能影响,有没有办法解决这个问题,或者UUID在一个大的,未分区的表上是不是一个好的PK?
如何使用pgcrypto addon加密postgres数据库中的列?
我正在使用postgres 9.3,我需要加密我的一个专栏,postgres是否也支持Aes加密或任何意思我可以实现它?
我使用EnterpriseDB中的图形安装程序在我的Mac Book上安装了PostgreSql 9.3.4.
我只是使用PostgreSql进行开发,我只是从localhost使用它,但是,我发现postgres进程之一是继续使用网络.即使我没有从我的应用程序或pgAdmin连接postgres,活动监视器中的sent和rcvd数据包也会继续增长.
这是什么?数据发送到哪里?
我在Ubuntu Server计算机上运行EC2实例。从1个月起,就在其上安装并部署了Tomcat和MySQL Java Web应用程序。在将近1个月的时间里,它一直运行良好且性能出色,但是现在我的应用程序响应速度非常慢。另外,需要指出的是:以前,我以前通过PuTTY登录Ubuntu服务器时,速度很快,但是现在即使我输入Ubuntu密码也要花些时间。
有什么解决办法吗?
有些东西我对Amazon RDS(PostrgreSQL版本)并不是很了解.有些查询需要花费大量时间来显示结果.我已设置所有相关索引(如EXPLAIN所示).所以我认为这不是由于我的架构设计.
我不使用大机器(m3.xlarge),因为大机器太贵了.我的数据库大小约为300GB.
似乎Postgres没有使用所有可用内存(仅约5GB,控制台的"可用内存"报告显示总有~10GB可用内存...).我尝试按照tune -your-postgres-rds-instance的建议调整我的"参数组" ,特别是将EFFECTIVE_CACHE_SIZE设置为70%.但它没有改变任何东西.
我可能在某个地方错了......任何想法?
当试图在文档中找到"Harrison Ford"时,pg_search将返回包含"Harrison"和"Ford"的任何文本,例如:
pg_search_scope :search_by_full_name, :against => [:first_name, :last_name]
Run Code Online (Sandbox Code Playgroud)
People.search_by_full_name("哈里森福特")
可以返回:
乔治哈里森驾驶福特福克斯
我怎样才能确保只'Harrison Ford'返回完全匹配?
给定一个文本元素数组,我想计算出现的次数并将它们作为带有文本键和整数值的子对象返回。(PostgreSQL 9.4)
情况 1 - 没有参考集
SELECT ARRAY['3G','2G','2G','3G','3G','3G','3G','4G']
Run Code Online (Sandbox Code Playgroud)
应该转化为
SELECT '{"2G": 2, "3G": 5, "4G": 1}'::jsonb
Run Code Online (Sandbox Code Playgroud)
案例 2 - 使用参考集
给定一组可能的条目ARRAY['2G','3G','4G'],返回的 json 还应包含计数为零的元素。
SELECT ARRAY['3G','2G','2G','3G','3G','3G','3G']
Run Code Online (Sandbox Code Playgroud)
应该转变为
SELECT '{"2G": 2, "3G": 5, "4G": 0}'::jsonb
Run Code Online (Sandbox Code Playgroud)
我通过使用非常接近案例 1 和 2
-- case 1
SELECT json_object( array_agg(r.a)::text[],array_agg(r.num)::text[] )
FROM (
SELECT a, count(a) as num
FROM unnest( ARRAY['3G','2G','2G','3G','3G','3G','3G','4G'] ) a
GROUP BY a ORDER BY a
) r;
--case 2
SELECT json_object( array_agg(r.ref)::text[],array_agg(r.num)::text[] )
FROM (
SELECT ref, count(a) as num
FROM …Run Code Online (Sandbox Code Playgroud) 想象一下,我有一张这样的桌子:
account_id date value
1 1/1/2015 5
1 1/3/2015 7
1 1/7/2015 8
3 1/2/2015 4
Run Code Online (Sandbox Code Playgroud)
如果我想执行ORDER BY DATE和GROUP BY account_id并使用之前的行值更新每一行,该怎么办?
所以最终的结果应该是:
account_id date value prev_value
1 1/1/2015 5 null
1 1/3/2015 7 5
1 1/7/2015 8 7
3 1/2/2015 4 null
Run Code Online (Sandbox Code Playgroud)
在单个查询中执行此操作的任何好方法?
在Postgres 9.5中使用xpath时,有没有办法将返回的XML数组转换为INT数组?它似乎让我在使用之前将它分配给INT数组,但我无法弄清楚如何直接在where子句中使用它.以下是我目前如何使用它的示例.
CREATE OR REPLACE FUNCTION people_get_by_ids(_xml XML)
RETURNS SETOF people AS
$$
DECLARE
_ids INT[] = (xpath('/ITEMS/ITEM/VALUE/text()', _xml));
BEGIN
RETURN QUERY
SELECT *
FROM people
WHERE id = ANY(_ids);
END
$$ LANGUAGE plpgsql STABLE;
Run Code Online (Sandbox Code Playgroud)
我会这样称呼它
SELECT * FROM people_get_by_ids('<ITEMS><ITEM><VALUE>488</VALUE></ITEM><ITEM><VALUE>489</VALUE></ITEM></ITEMS>');
Run Code Online (Sandbox Code Playgroud)
如果有一种简单而高效的方法可以不使用_ids变量并将xpath部分放在where子句中,那就太好了.
我需要在几个地方执行此操作,并计划创建一个函数来包装该(xpath('/ITEMS/ITEM/VALUE/text()', _xml))部分.
我将 JSON 数据存储在我的 postgresql 9.5 DB 的 JSONB 字段中。
有没有办法在不知道哪一列是子对象的情况下制作子对象列?
有问题的 JSON 示例:
{
"a":1,
"b":[1,2,3],
"c":"bar",
"d":{
"key1":"value1",
"key2":"value2"
}
}
Run Code Online (Sandbox Code Playgroud)
我可以使用以下内容从 JSON 对象中获取所有键。
SELECT * FROM json_object_keys('{"a":1,"b":[1,2,3],"c":"bar", "d":{"key1":"value1", "key2":"value2"}}')
那时我可以使用 json_to_record() 但我想将列拆分为它们自己的单独字段。
select * from json_to_record('{"a":1,"b":[1,2,3],"c":"bar", "d":{"key1":"value1", "key2":"value2"}}') as x(a int, b text, c text, d text)
得到我
a| b | c | d
1| [1,2,3] | bar | {"key1":"value1", "key2":"value2"}
Run Code Online (Sandbox Code Playgroud)
有没有办法让这样的东西回来,最好是在一个查询中?
--------------------------------------------------------------------
a| b | c | d | key1 | key2
1| [1,2,3] | bar | …Run Code Online (Sandbox Code Playgroud) Postgres 9.4
我有一个像这样的 JSONB 值的记录:
{
"attributeA": 1,
"attributeB": "Foo",
"arrayAttribute": [
{"attributeC": 95, "attributeD": 5},
{"attributeC": 105, "attributeD": 5}
]
}
Run Code Online (Sandbox Code Playgroud)
我想写一个查询,它说:
查找其中 attributeA = 1、attributeB = 'Foo' 的任何项目,并且对于 arrayAttribute 数组中的每个元素,attributeC 在某个值 X 的 10 点范围内。因此,如果 X 为 100,则上述记录将匹配(95 和105 与 100 相差 10 分)。
不幸的是,我真的在 JSONB 查询语法上苦苦挣扎。做到这一点的最佳方法是什么?
postgresql ×10
performance ×3
database ×2
json ×2
aes ×1
aggregate ×1
amazon-ec2 ×1
amazon-rds ×1
arrays ×1
casting ×1
encryption ×1
indexing ×1
jsonb ×1
mysql ×1
networking ×1
pg-search ×1
pgcrypto ×1
psql ×1
ruby ×1
ubuntu ×1
uuid ×1
xml ×1