Questions tagged «postgresql»

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

2
吐司表生长失控-FULLVAC无效
最近,我已经将PostgreSQL 8.2.11服务器升级到8.4,以便利用自动清理功能并与30台其他PGSQL服务器保持一致。这是由管理硬件的独立IT小组完成的,因此在其他任何升级方面我们没有太多选择(暂时不会看到9+)。该服务器存在于非常封闭的环境(隔离的网络,有限的root特权)中,并在RHEL5.5(i686)上运行。升级后,数据库每天不断增长,达到5-6 GB。通常,数据库总体上约为20GB;目前,它约为89GB。我们还有其他几个服务器,它们运行等效的数据库,并实际上通过第3方应用程序将记录彼此同步(其中一个我无法访问内部工作)。其他数据库大约应该是20GB。 运行下面的SQL,很明显特定表,尤其是TOAST表存在问题。 SELECT nspname || '.' || relname AS "relation", pg_size_pretty(pg_relation_size(C.oid)) AS "size" FROM pg_class C LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace) WHERE nspname NOT IN ('pg_catalog', 'information_schema') ORDER BY pg_relation_size(C.oid) DESC LIMIT 20; 产生: 关系| 尺寸 ------------------------------------ + --------- pg_toast.pg_toast_16874 | 89 GB littles00.warmstates | …

1
为什么pg_lsclusters没有列出我的Postgres集群?
我apt-get安装了Postgres 9.2.4(使用PPA)。 我曾经pg_dropcluster --stop 9.2 main删除默认的数据库集群,因为我打算在刚刚挂载的单独的SSD卷(Rackspace块存储卷)上创建一个新集群。 我创建了一个新集群,其数据驻留在我的SSD卷上(并ps显示了该集群的所有正常Postgres进程,并且我能够打开Postgres Shell并运行SQL-即运行良好)。现在,当我运行时pg_lsclusters,没有列出任何内容。 main在删除群集之前,列出的群集还不错。为什么即使新群集正在运行,我的群集也不会出现?我什至重启了服务器(以防万一)。

1
监听/通知权限
我有一个单一的postgres数据库,有两个用户。爱丽丝和鲍勃。 我希望能够在NOTIFY alice_channel 'sensitive data'不让Bob偷偷摸摸的情况下进行操作LISTEN,只需猜测频道名称为“ alice_channel”即可。 在实践中,频道名称是很难猜测,但是这是安全通过朦胧的最好的。 我是否认为没有办法阻止数据库用户使用(滥用)LISTEN&是正确的NOTIFY吗?即似乎没有可以授予或撤销的任何关联特权。 这是死胡同吗?

1
PostgreSQL计数器的并发增量
我需要维护一个项目的统计表,该表由项目列表及其用途组成(想想一个类似网站的网站,您希望在其中计算综合浏览量)。每次实例化一个项目时,我都需要增加特定项目的使用率。 我的第一个实现是: statistics( id integer NOT NULL, name character varying(255) NOT NULL, usage integer NOT NULL DEFAULT 0, ); UPDATE statistics SET usage = usage + 1 WHERE name = '<name>'; 我关心的是性能和并发性。更新过程将由数十个(也许是80-120)设备实例化,并且每秒可能会发生几次,所以我的问题是: 1)这种方法会保留并发性吗?(即,如果有多个设备“同时”请求更新,是否将每个请求都计入?) 2)您能建议一种实现结果的最佳方法吗?我希望在编写更新时会负担很多,而阅读会更频繁。是否存在增加值的特定功能?我正在查看“序列”,但不确定是否正确。 提前非常感谢您的任何建议

2
如何删除PostgreSQL联接表中的重复记录?
我有一个具有这样的架构的表: create_table "questions_tags", :id => false, :force => true do |t| t.integer "question_id" t.integer "tag_id" end add_index "questions_tags", ["question_id"], :name => "index_questions_tags_on_question_id" add_index "questions_tags", ["tag_id"], :name => "index_questions_tags_on_tag_id" 我想删除重复的记录,即它们既具有相同记录tag_id又question_id具有另一个记录。 SQL看起来像什么?

2
将Postgresql数据库从一台服务器移动到另一台服务器
我已经在家里创建了一个数千兆字节的(空间)数据库,我想将整个数据库从我的工作计算机中的一台计算机上移走。 没什么,我将在工作计算机上创建一个新的postgresql / postgis数据库实例。db用户在两台计算机上的名称可能相同也可能不同。 可能吗?我应该注意些什么?我该如何缓解疼痛? 我正在使用带有postgis扩展名的postgresql v9.1.5。Ubuntu12.04(内核3.2.0-31)


1
Postgres客户端复制(\ copy)命令没有访问临时表的权限?
我正在生成SQL命令列表,以导出一些最终使用psql -f运行的数据。所有查询都获得相同的数据子集,所以我认为我会考虑将资格限定在内,并在诸如此类的临时表中放入合格用户ID的列表。 create temporary table tmp_export_users as (select id from users where ...) 然后参考我的\ copy命令中的内容 \copy (select ... from table where user_id in (select id from tmp_export_users)) TO 'filename.csv' WITH CSV HEADER 这些都在同一个文件中,每行一个,然后运行它们-f我得到了以下错误:复制命令看不到临时表,因此我猜想客户端复制命令实际上不能使用相同的postgres会话为psql。 那是对的吗?有没有办法改变这种行为?

2
COMMIT是否可以在PostgreSQL 9.5的匿名plgpsql函数中工作?
我正在将大量大文件导入到许多表中,这些表将使用匿名plpgsql代码块内的循环进行分区$do$。 $do$ BEGIN FOR yyyy in 2012..2016 THEN EXECUTE $$COPY table$$||yyyy||$$ FROM 'E:\data\file$$||yyyy||$$.csv DELIMITER ',' CSV;$$; END LOOP; END; $do$ LANGUAGE plpgsql 整个过程大约需要15个小时,我希望如果某个时刻出现导入错误,所有导入都不会回滚。 IIRC COMMIT在存储的函数中不起作用,因为整个函数被视为单个事务。 从文档中$do$ 将代码块视为没有参数的函数的主体,并返回void。它被解析并执行一次。 我假设这意味着整个$do$事务是一个事务,因此在该块内的提交将不起作用。我对么?

1
哈希联接vs哈希半联接
PostgreSQL 9.2 我想明白之间的差别Hash Semi Join,只是Hash Join。 这是两个查询: 一世 EXPLAIN ANALYZE SELECT * FROM orders WHERE customerid IN (SELECT customerid FROM customers WHERE state='MD'); Hash Semi Join (cost=740.34..994.61 rows=249 width=30) (actual time=2.684..4.520 rows=120 loops=1) Hash Cond: (orders.customerid = customers.customerid) -> Seq Scan on orders (cost=0.00..220.00 rows=12000 width=30) (actual time=0.004..0.743 rows=12000 loops=1) …

1
太多的空闲连接会影响PostgreSQL 9.2的性能吗?
我的数据库服务器上的某些查询似乎需要很长时间才能响应,而且我认为CPU使用率很高。运行时ps aux,我看到约250个“空闲”连接(我认为数量太多)。我还没有开始做完整的诊断,但是我想知道这是否是一个开始寻找的好地方。 我还在事务级池中使用PgBouncer。我怀疑可以idle通过调整池大小来轻松减少连接数。但是,除非有充分的理由,否则我不想开始进行太多更改。 idlePostgreSQL 9.2中的许多连接会影响性能吗? 非常感谢!

2
Postgres会执行视图中未选择的计算列的计算吗?
我试图了解从视图中选择数据的性能影响,其中视图中的列之一是原始表中其他数据的功能。 不管计算的列是否在所选列的列表中,都可以执行计算吗? 如果我有一个表并且视图这样声明 CREATE TABLE price_data ( ticker text, -- Ticker of the stock ddate date, -- Date for this price price float8, -- Closing price on this date factor float8 -- Factor to convert this price to USD ); CREATE VIEW prices AS SELECT ticker, ddate, price, factor, price …

1
在单个表上使用多个唯一约束是否被认为是不良设计?
我查看了PostgreSQL的INSERT INTO .. ON CONFLICT (..) DO UPDATE ..语法并意识到,您不能使用它进行多个唯一的约束检查。我的意思是,您可以通过列名引用复合唯一索引ON CONFLICT (Name, Symbol)(如果为这两列定义了唯一索引),或者您可以使用主键。如果为列定义两个单独的唯一索引,则只能检查一个。 CREATE TABLE student (Id int primary key, Name varchar(50), Symbol varchar(50), CONSTRAINT col1_unique UNIQUE (Name), CONSTRAINT col2_unique UNIQUE (Symbol) ); INSERT INTO student (Id, Name, Symbol) VALUES (1, 'John', 'J'), (2, 'David', 'D'), (3, 'Will', 'W'); INSERT INTO …

2
对于相等性查找,哈希索引如何不快于Btree?
对于支持哈希索引的每个Postgres版本,都有警告或注意,至少在8.3版之前,哈希索引比btree索引“相似或更慢”或“不更好” 。从文档: 版本7.2: 注意:由于哈希索引的用途有限,因此通常应优先选择B树索引而不是哈希索引。我们没有足够的证据表明即使进行=比较,哈希索引实际上也比B树更快。而且,散列索引需要更粗的锁。参见第9.7节。 版本7.3(以及最高8.2): 注意:测试表明PostgreSQL的哈希索引与 B树索引相似或比B树索引慢,并且哈希索引的索引大小和构建时间要差得多。在高并发下,哈希索引的性能也很差。由于这些原因,不鼓励使用哈希索引。 版本8.3: 注意:测试表明PostgreSQL的哈希索引的性能并不比B树索引好,并且哈希索引的索引大小和构建时间要差得多。此外,哈希索引操作目前还没有进行WAL记录,因此在数据库崩溃后可能需要使用REINDEX重建哈希索引。由于这些原因,目前不鼓励使用哈希索引。 他们声称在此版本8.0线程中,从未发现哈希索引实际上比btree更快的情况。 即使是在9.2版中,根据该博客文章(2016年3月14日): AndréBarbosa撰写的Postgres哈希索引,除编写实际索引外,其他任何方面的性能提升也几乎没有。 我的问题是那怎么可能? 根据定义,哈希索引是一个O(1)操作,其中btree是一个O(log n)操作。那么,O(1)查找比查找正确的分支然后查找正确的记录要慢(或什至类似于)的可能性如何呢? 我想知道索引理论到底有什么可能!

3
如何取消嵌套和GROUP BY元素的JSON数组?
给定该band表,其中包含json一个数组的列: id | people ---+------------- 1 | ['John', 'Thomas'] 2 | ['John', 'James'] 3 | ['James', 'George'] 如何列出每个名字所属的乐队数量? 所需的输出: name | count -------+------------ John | 2 James | 2 Thomas | 1 George | 1

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.