Questions tagged «postgresql»

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


3
在数据库中强制执行“至少一个”或“完全一个”的约束
假设我们有用户,每个用户可以有多个电子邮件地址 CREATE TABLE emails ( user_id integer, email_address text, is_active boolean ) 一些样本行 user_id | email_address | is_active 1 | foo@bar.com | t 1 | baz@bar.com | f 1 | bar@foo.com | f 2 | ccc@ddd.com | t 我要强制执行一个约束,即每个用户都只有一个活动地址。如何在Postgres中做到这一点?我可以这样做: CREATE UNIQUE INDEX "user_email" ON emails(user_id) WHERE is_active=true; 这样做可以防止用户拥有多个活动地址,但我相信不能防止其所有地址都设置为false。 如果可能的话,我宁愿避免使用触发器或pl / …

2
提高大型PostgresSQL表中COUNT / GROUP-BY的性能?
我正在运行PostgresSQL 9.2,并具有12列的关系,大约有6,700,000行。它包含3D空间中的节点,每个节点都引用一个用户(创建它的用户)。为了查询哪个用户创建了多少个节点,我执行以下操作(添加explain analyze以获得更多信息): EXPLAIN ANALYZE SELECT user_id, count(user_id) FROM treenode WHERE project_id=1 GROUP BY user_id; QUERY PLAN --------------------------------------------------------------------------------------------------------------------------- HashAggregate (cost=253668.70..253669.07 rows=37 width=8) (actual time=1747.620..1747.623 rows=38 loops=1) -> Seq Scan on treenode (cost=0.00..220278.79 rows=6677983 width=8) (actual time=0.019..886.803 rows=6677983 loops=1) Filter: (project_id = 1) Total runtime: 1747.653 ms 如您所见,这大约需要1.7秒。考虑到数据量,这还算不错,但是我想知道是否可以改进。我试图在用户列上添加一个BTree索引,但这没有任何帮助。 您还有其他建议吗? 为了完整起见,这是完整的表定义及其所有索引(没有外键约束,引用和触发器): Column …

4
使用row_to_json创建JSON时将名称设置为属性
仅对某些列f1, f2, f3...使用row_to_json函数时,是否可以重命名默认名称? 我可以 row_to_json(customers) 返回 {"id_customer":2,"first_name":"bla","last_name":"second_bla"} 但是,如果我只想要没有的名称id_customer,则必须使用 row_to_json(row(first_name, last_name)) 然后我得到 {"f1":"bla","f2":"second_bla"} 我想使用默认列名或我自己的列名来获得此结果。我知道我可以创建自己的复合类型并使用 row_to_json(row(first_name, last_name))::my_custom_type 但是在不创建该类型的情况下在查询中是否可以正确执行呢?
24 postgresql 

6
更改实时生产数据库上的表
此问题是从Stack Overflow 迁移而来的,因为可以在Database Administrators Stack Exchange上回答。 迁移 7年前。 大多数“流行的”(MySQL,Postgres ...)数据库系统如何处理更改实时生产数据库上的表(如添加,删除或更改列的类型)? 我知道正确的方法是备份所有计划停机时间,然后进行更改。 但是...当前的数据库系统是否支持“在线”执行这些操作而不停止任何操作?(也许只是延迟引用刚被更改/删除的列的查询) 当我ALTER TABLE...在实时运行的数据库上进行操作时,会发生什么?发生这种情况时,一切都会停止吗?数据会损坏吗?等等 同样,我主要指的是Postgres或MySQL,因为它们是我遇到的。 (是的,是的,我必须在做“正确的方式”之前做任何事情,备份事情,安排例行工作……。但是我只是想知道是否有可能做这样的事情,而事情“很快又脏”或是否有任何数据库系统实际上支持“快速,活动和脏”模式更改) 有人刚才建议的在线模式修改为MySQL从Facebook脚本(有教程这里和源在这里)......似乎是一个很好的方式来自动执行了一套“哈克”的方式来做到这一点...有没有人用它在类似于生产吗?

2
pgAdmin询问的维护数据库是什么?
用于添加新数据库连接的pgAdmin对话框要求输入“维护数据库”。 为了能够连接,我将其设置为要连接的数据库(而且,我也有权连接)。 那么,为什么将其命名为“维护数据库”而不是“数据库”或“数据库”?



6
如何获得用户所属的所有角色(包括继承的角色)?
假设我有两个Postgresql数据库组,即“作者”和“编辑”,以及两个用户,“ maxwell”和“ ernest”。 create role authors; create role editors; create user maxwell; create user ernest; grant authors to editors; --editors can do what authors can do grant editors to maxwell; --maxwell is an editor grant authors to ernest; --ernest is an author 我想编写一个性能函数,该函数返回maxwell所属角色(最好是其oid)的列表,如下所示: create or replace function get_all_roles() returns oid[] …

1
是否在SQL:2008标准中指定了CTE(WITH查询)的优化隔离行为?如果是这样,在哪里?
我看到对WITH查询(公用表表达式或CTE)的频繁引用充当了优化隔离,不允许服务器将过滤器下推到CTE查询中,将常用表达式从CTE中拉出,等等。成为SQL标准要求的行为。 CTE 绝对是PostgreSQL中的优化栅栏……但这是标准要求的,还是实际上只是实现细节? 例如,这些邮件列表张贴声明或表明它是标准的: http://www.digipedia.pl/usenet/thread/11566/101385/ 在评论中提到它之后,我被问到了它的指定位置-在查看了SQL:2008的唯一草稿后,我获得了访问它的机会,但运气并不好。 我尚未深入研究该标准,因此希望有人提出以下建议:标准实际上需要PostgreSQL中CTE的优化范围吗?如果是这样,它在哪里指定?还是Pg邮件列表上的语句有误? 另请参阅待办事项列表上的线程CTE优化围栏?。

3
如何在PostgreSQL 8.4中安装pgcrypto?
我正在使用Ubuntu Server 10.10,并且已使用安装了PostgreSQL 8.4 apt-get install postgresql。我想使用内置sha1()功能,但似乎必须先安装pgcrypto。但是我不知道如何安装。 没有pgcrypto,如果我尝试使用安装它apt-get install pgcrypto,我不找到以任何文件pgcrypto在我的系统(我想find / -name "pgcrypto*")。 如何安装pgcrypto,以便可以digest('word-to-hash','sha1')在数据库查询中使用该功能? 更新:我正在努力在另一台Ubuntu计算机上安装pgcrypto。使用sudo apt-get install postgresql-contrib-8.4如何安装软件包后,如何将其安装到当前的PostgreSQL数据库中?

2
Postgres多列到JSON
我正在运行PostgreSQL 9.3.4。我有一个包含3个字段的表格: id name addr --- ---- ---- 1 n1 ad1 2 n2 ad2 ... 我需要将数据移动到具有以下字段的新表中: id data --- ---- 1 {'name': 'n1', 'addr': 'ad1'} 2 {'name': 'n2', 'addr': 'ad2'} ... row_to_json对我来说不是解决方案,因为它也会SELECT t.id, row_to_json(t) as data FROM (select id, name, addr from myt) t增加id结果。有没有办法在我的数据字段中选择我需要的字段(名称和地址)?
23 postgresql  json  row 

3
在Postgres中替换实例化视图
我有一个物化视图Postgres 9.3,我想用新的列进行更新。但是,其他实例化视图也依赖于此视图,并且错误消息表明,当其他对象依赖该视图时,则无法删除该视图。 错误:无法删除实例化视图latest_charges,因为其他对象依赖它 从文档中还可以看出,REPLACE关键字对于实例化视图无效。除了删除所有依赖对象并重建每个依赖对象之外,还有没有捷径可走?

2
从Postgres批量删除行的最有效方法
我想知道最有效的方法是从PostgreSQL删除大量行,这一过程每天都会是将数据批量导入(插入和删除的增量)到表中的一项重复任务。可能要删除数千行,甚至数百万行。 我有一个主键文件,每行一个。我所考虑的两个选项与以下内容类似,但我对PostgreSQL的内部知识了解不足/不了解,无法做出明智的决定,这是最佳选择。 DELETE使用简单WHERE的主键对文件中的每一行执行查询(或n使用IN()子句分批对删除进行分组) 使用COPY命令将主键导入到临时表中,然后使用连接从主表中删除 任何建议将不胜感激!

2
如何存储时间序列数据
我有一个时间序列数据集(如果我错了,请纠正我),该数据集具有许多关联值。 一个示例是对汽车进行建模并在旅途中跟踪其各种属性。例如: 时间戳| 速度 行驶距离| 温度| 等等 什么是存储此数据的最佳方法,以便Web应用程序可以有效地查询字段以查找最大值,最小值并绘制随时间变化的每个数据集? 我开始分析数据转储并缓存结果,这样就永远不必存储它们了。但是,经过一番尝试之后,由于内存限制,此解决方案似乎无法长期扩展,如果要清除缓存,则需要重新解析并重新缓存所有数据。 另外,假设每秒跟踪数据的可能性极低,可能超过10小时,那么通常建议通过每N秒采样一次来截断数据集吗?

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.