Questions tagged «postgresql»

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

2
PostgreSQL UPSERT问题与NULL值
我在使用Postgres 9.5中的新UPSERT功能时遇到问题 我有一个表,用于汇总来自另一个表的数据。复合键由20列组成,其中10列可以为空。下面,我为我遇到的问题创建了一个较小的版本,尤其是NULL值。 CREATE TABLE public.test_upsert ( upsert_id serial, name character varying(32) NOT NULL, status integer NOT NULL, test_field text, identifier character varying(255), count integer, CONSTRAINT upsert_id_pkey PRIMARY KEY (upsert_id), CONSTRAINT test_upsert_name_status_test_field_key UNIQUE (name, status, test_field) ); 根据需要运行此查询(首先插入,然后随后的插入仅增加计数): INSERT INTO test_upsert as tu(name,status,test_field,identifier, count) VALUES ('shaun',1,'test value','ident', 1) ON CONFLICT …

1
为什么PostgreSQL选择较昂贵的联接顺序?
PostgreSQL使用默认值,加上 default_statistics_target=1000 random_page_cost=1.5 版 PostgreSQL 10.4 on x86_64-pc-linux-musl, compiled by gcc (Alpine 6.4.0) 6.4.0, 64-bit 我已经吸尘并进行了分析。该查询非常简单: SELECT r.price FROM account_payer ap JOIN account_contract ac ON ap.id = ac.account_payer_id JOIN account_schedule "as" ON ac.id = "as".account_contract_id JOIN schedule s ON "as".id = s.account_schedule_id JOIN rate r ON s.id = r.schedule_id WHERE …

1
为什么这个LEFT JOIN的表现比LEFT JOIN LATERAL差很多?
我有以下表格(来自Sakila数据库): 电影:film_id是pkey 演员:actor_id是pkey film_actor:film_id和actor_id是影片/演员的键 我正在选择一部特定的电影。对于这部电影,我还希望所有演员都参与该电影。我对此有两个查询:一个带有a LEFT JOIN和一个带有a LEFT JOIN LATERAL。 select film.film_id, film.title, a.actors from film left join ( select film_actor.film_id, array_agg(first_name) as actors from actor inner join film_actor using(actor_id) group by film_actor.film_id ) as a on a.film_id = film.film_id where film.title = 'ACADEMY DINOSAUR' order by film.title; select film.film_id, …

1
Windows 10秋季更新后,PostgreSQL 9.5无法启动
我已经安装了Windows 10 Fall更新(1709),现在我的PostgreSQL 9.5服务器无法启动。它昨天在更新之前有效,并且我没有对配置进行任何更改。 我检查了事件查看器,发现以下错误消息: 2017-10-19 11:32:32 CEST LOG: invalid value for parameter "lc_monetary": "Czech_Czech Republic.1250" 2017-10-19 11:32:32 CEST LOG: invalid value for parameter "lc_numeric": "Czech_Czech Republic.1250" 2017-10-19 11:32:32 CEST LOG: invalid value for parameter "lc_time": "Czech_Czech Republic.1250" 2017-10-19 11:32:32 CEST FATAL: configuration file "C:/Program Files/PostgreSQL/9.5/data/postgresql.conf" contains errors 似乎Microsoft随着Fall更新更改了语言环境名称,我找不到可用的语言环境名称的任何列表,因此我决定安装Postgres 10,它证实了我的怀疑,Postgres …

7
分组或窗口
我有一种情况,我认为可以使用窗口函数解决,但我不确定。 想象一下下表 CREATE TABLE tmp ( date timestamp, id_type integer ) ; INSERT INTO tmp ( date, id_type ) VALUES ( '2017-01-10 07:19:21.0', 3 ), ( '2017-01-10 07:19:22.0', 3 ), ( '2017-01-10 07:19:23.1', 3 ), ( '2017-01-10 07:19:24.1', 3 ), ( '2017-01-10 07:19:25.0', 3 ), ( '2017-01-10 07:19:26.0', 5 ), …

1
从GIN索引的TSVECTOR列获取部分匹配
我想通过查询获得结果: SELECT * FROM ( SELECT id, subject FROM mailboxes WHERE tsv @@ plainto_tsquery('avail') ) AS t1 ORDER by id DESC; 这可以正常工作并返回tsv包含的行Available。但是,如果我使用avai(放置lable),它什么也找不到。 所有查询都必须在字典中吗?我们不能只查询这些字母吗?我有一个包含电子邮件正文(内容)的数据库,我希望它随着每秒的增长而快速发展。目前我正在使用 ... WHERE content ~* 'letters`

1
在Debian / Ubuntu上安装PgAdmin 4 [关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为数据库管理员Stack Exchange 的主题。 3年前关闭。 PgAdmin 4 1.0刚刚发布,但是在Linux的下载页面上,只有指向yum安装程序的链接。 有人知道是否有计划创建deb安装程序吗?或者如果已经有一个?

1
如何无缝升级AWS RDS postgres数据库的主要版本?
今天早上,我参与了在AWS RDS上升级PostgreSQL数据库的工作。我们想从9.3.3版升级到9.4.4版。我们已经在登台数据库上“测试”了升级,但是登台数据库小得多,并且不使用多可用区。事实证明,该测试还远远不够。 我们的生产数据库使用多可用区。过去,我们已经进行了次要版本升级,在这种情况下,RDS将首先升级备用数据库,然后将其升级为主数据库。因此,在故障转移期间仅发生的停机时间约为60秒。 我们假设主要版本升级会发生同样的情况,但是哦,我们错了。 有关设置的一些详细信息: db.m3.large 预置IOPS(SSD) 300 GB的存储空间,其中已使用139 GB 我们的RDS OS升级非常出色,我们想批量进行此升级,以最大程度地减少停机时间 以下是我们执行升级时记录的RDS事件: 数据库CPU在大约08:44到10:27之间已用尽。RDS似乎大部分时间都被RDS占用了,以进行升级前和升级后快照。 该AWS文档不警告这样的反响,尽管从阅读他们很显然,我们在处理一个明显的缺陷是,我们没有创建的副本生产的多AZ建立数据库,并尝试将其升级为试运行 总的来说,这非常令人沮丧,因为RDS很少提供给我们有关它在做什么以及可能需要花费多长时间的信息。(再次,进行试运行会有所帮助...) 除此之外,我们想从这次事件中学习,所以这里是我们的问题: 在RDS上进行主要版本升级时,这种情况正常吗? 如果我们想在将来以最少的停机时间进行主要版本升级,我们将如何处理?是否有某种巧妙的方式使用复制来使复制更加无缝?

1
获得客户的百分之十和百分之九十
我有一个包含客户和得分的表(基于不同的因素,在这种情况下不相关;一个客户可以有多个得分),看起来像这样: customer_id | score | score_giver_id ==================================== 1 | 100 | 1 1 | 102 | 1 1 | 101 | 1 1 | 140 | 1 2 | 131 | 3 1 | 44 | 1 3 | 223 | 1 3 | 1 | 2 3 | 201 …

1
为什么新用户能够在PostgreSQL中创建表?
我遵循了两个教程来使用以下内容创建数据库: 完全特权的用户链接 只读用户链接 然后,我从CJ Estel的教程中获得了一条提示,指出“ 即使我们从未明确将其提供给新用户,您也可能继承了创建表的功能”。果然,只读用户能够创建和拥有表! CJ Estel指出了根本原因,即模板数据库。但是创建表的功能破坏了您通过搜索“只读用户postgres”获得的大多数教程,包括postgresql.org上托管的教程。您的用户不仅具有只读权限! 为什么新用户具有此功能?撤消该特权后,数据库对于该用户是否真正是只读的?

1
如何调试空闲查询?
我有一个每天在数据库上运行的批处理查询。但是,它似乎陷入了空闲状态,并且调试发生的事情非常困难。 该查询是同时插入的表上的聚合,我猜这与问题有关。(聚合是基于前几天的数据,因此插入不会影响结果。) 线索 我正在使用sqlalchemy在python脚本中运行它。但是,我已将事务级别设置为自动提交,因此我认为事情不会卷入事务中。另一方面,在sql终端中手动运行查询时,我看不到查询挂起。 通过查询pg_stat_activity,查询最初以形式进入数据库state='active'。大约15秒钟后,状态更改为“空闲”,此外,xact_start设置为NULL。等待标志永远不会设置为true。 在弄清楚sqlalchemy的事务级别自动提交之前,它会挂在状态'idle in transaction'而不是'idle'。自进行更改以来,它挂起的频率可能会稍微降低一些? 我觉得我没有能力对此进行更深入的研究。任何反馈,甚至在不给出明确答案的情况下,甚至解释更多有关不同状态和相关postgres内部的信息,都将不胜感激。

1
授予对数据库所有表的访问权限
我最近想与服务器的一个用户共享定期访问权限和我认识到,一个简单的CREATE USER和GRANT ALL ON DATABASE命令没有让他运行一个简单SELECT的数据。 我想将给定数据库中所有表的权限授予指定用户,但是我不确定授予他对整个模式的访问权限是否是最好的主意,public因为我不知道是否允许某种特权升级。还有其他办法吗?

2
Postgres不完整的启动包错误
我正在尝试在Ubuntu 14.04上安装Postgres 9.3,并且在启动时遇到一个令人讨厌的错误。这是我所看到的: $ sudo service postgresql restart * Restarting PostgreSQL 9.3 database server * Error: could not exec /usr/lib/postgresql/9.3/bin/pg_ctl /usr/lib/postgresql/9.3/bin/pg_ctl start -D /var/lib/postgresql/9.3/main -l /var/log/postgresql/postgresql-9.3-main.log -s -o -c config_file="/etc/postgresql/9.3/main/postgresql.conf" : [fail] 因此,我使用以下输出检查了日志文件: 2015-01-05 21:50:05 EST LOG: database system was shut down at 2015-01-05 21:50:03 EST 2015-01-05 21:50:05 EST LOG: …

1
更新另一个表中的所有列
我需要从另一个表更新一个表,并且需要更新所有列。除了列出SET子句中的每一列之外,还有没有办法一次更新所有列?像这样: update tableA set * = tableB.* from tableB where tableA.id = tableB.id 我在psql中尝试过,它不起作用。我必须像这样列出每一列: update tableA set c1 = tableB.c1, c2 = tableB.c2, ... from tableB where tableA.id = tableB.id tableB被创建使用create .. like tableA。因此,它们基本上是相同的。我这样做的原因是,我需要将.csv数据加载到临时表中tableB,然后tableA根据中的新数据进行更新tableB。tableA需要尽可能少地锁定,并且tableA需要保持完整性。我不确定“先删除然后插入”是否是一个好选择?

3
可以将DISTINCT FROM与ANY或ALL结合吗?
是结合一个Postgres的方式IS DISTINCT FROM与ANY或得到同样结果的其他一些巧妙的方法? select count(*) from (select 'A' foo union all select 'Z' union all select null) z where foo <> any(array[null, 'A']); count ------- 1 (1 row) select count(*) from (select 'A' foo union all select 'Z' union all select null) z where foo is distinct from any(array[null, 'A']); …

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.