Questions tagged «postgresql»

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

5
确定PostgreSQL数据库的最新更改时间
我正在查看如何更改备份方式,并且想知道是否有一种方法可以确定postgreql集群中的哪些数据库最近没有更改? 我不想使用pg_dumpall,而是想使用pg_dump并仅转储自上次备份以来已更改的数据库(某些数据库不会经常更新),其想法是,如果没有任何更改,则当前备份应还是不错。 有谁知道一种确定特定数据库上次更新/更改时间的方法? 谢谢... 更新: 我希望不必在所有地方编写触发器,因为我无法控制一个特定集群中数据库的创建(更不用说在数据库中创建db对象了)。 进一步挖掘,似乎$ PGDATA / global / pg_database文件的内容(特别是第二个字段)与$ PGDATA / base下的目录名称之间存在关联。 一路走来,我猜想pg_database文件的第二个字段是数据库oid,每个数据库在$ PGDATA / base下都有自己的子目录(子目录名带有oid)。那是对的吗?如果是这样,将$ PGDATA / base / *下文件中的文件时间戳用作触发备份是否合理? ...或者,还有更好的方法? 再次感谢...



1
为什么需要将NULL强制转换为列类型?
我有一个帮助程序,它为我生成一些代码以进行批量更新并生成如下所示的SQL: (活动字段和核心字段均为类型boolean) UPDATE fields as t set "active" = new_values."active","core" = new_values."core" FROM (values (true,NULL,3419), (false,NULL,3420) ) as new_values("active","core","id") WHERE new_values.id = t.id; 但是,它失败了: ERROR: column "core" is of type boolean but expression is of type text 我可以通过添加::booleannull 来使其正常工作,但这似乎很奇怪,为什么将NULL视为类型TEXT? 同样,转换起来有点棘手,因为它需要大量的代码重做才能知道它应该将NULL转换为哪种类型(列和值的列表当前是从一个简单的JSON对象数组自动生成的) 。 为什么这是必需的,并且有一个更优雅的解决方案,不需要生成的代码知道NULL的类型? 如果相关,我正在使用Node.JS上的续集来执行此操作,但在Postgres命令行客户端中也得到了相同的结果。
10 postgresql  null  cast 

5
自助加入的替代方法
我在这里提出了一个问题:https : //stackoverflow.com/questions/43807566/how-to-divide-two-values-from-the-same-column-but-at-different-rows 关于从同一表,同一列,不同行划分值的问题。现在,我遇到的问题是,我有更多的分子和分母(具有不同的uns)。仍然是self join解决这一问题在Postgres或有更好的解决方案的好办法? 例: | postcode | value | uns | |----------|-------|-----| | AA | 40 | 53 | | BB | 20 | 53 | | AA | 10 | 54 | | AA | 20 | 55 | | AA | 10 | 56 | | …

2
为什么复合外键需要单独的唯一约束?
这是一个简单的表,其中的记录可以引用同一表中的父记录: CREATE TABLE foo ( id SERIAL PRIMARY KEY, parent_id INT NULL, num INT NOT NULL, txt TEXT NULL, FOREIGN KEY (parent_id) REFERENCES foo(id) ); 在附加要求下,num父记录和子记录之间的其他字段值之一必须相同,我认为应该使用复合外键来解决问题。我将最后一行更改为 FOREIGN KEY (parent_id, num) REFERENCES foo(id, num) 并得到错误:没有唯一的约束条件匹配给定表“ foo”的键。 我可以轻松添加此约束,但是当所引用的列(id)中的一个已被保证是唯一的时,我不明白为什么有必要这样做?从我的角度来看,新约束将是多余的。

1
pgAdmin在任何远程操作上都非常慢
我从本地pgAdmin远程连接到我们的开发服务器运行此查询: select * from users order by random() limit 1; 它挂了17秒并显示 Total query runtime: 148 ms. 1 row retrieved. 它也挂在任何操作上:甚至右键单击表格。 之后,我通过RDP连接并在相同的pgAdmin版本中运行相同的查询,并立即使用显示结果query time: 32 ms。 然后我再次从本地pgAdmin运行查询: Total query runtime: 337 ms. 1 row retrieved. 我向服务器ping了130毫秒。连接速度应该足够,因为我可以在那里通过FTP上传文件。 使用本地psql运行相同的查询会在几秒钟内完成,并包括连接时间。 我的本地pgAdmin中带有本地数据库副本的相同查询也立即完成。 pgAdmin版本是1.20.0。还检查了最新的1.22-仍然相同。 我该怎么做才能加快pgAdmin? 请注意,psql可以正常工作,我在那里看不到相同的延迟。 pgAdmin日志进行17秒查询运行: 2016-02-06 16:18:03 INFO : queueing : select * from users …

2
高效合并(删除重复项)数组
我有两个表,left2和right2。两个表都将很大(1-10M行)。 CREATE TABLE left2(id INTEGER, t1 INTEGER, d INTEGER); ALTER TABLE left2 ADD PRIMARY KEY (id,t1); CREATE TABLE right2( t1 INTEGER, d INTEGER, arr INTEGER[] ); ALTER TABLE right2 ADD PRIMARY KEY(t1,d); 我将执行这种类型的查询: SELECT l.d + r.d, UNIQ(SORT((array_agg_mult(r.arr))) FROM left2 l, right2 r WHERE l.t1 = r.t1 GROUP BY l.d …

2
psql:SELECT *…除了一列
我寻找一种简单的方法来选择除psql中的所有列以外的所有列。 随着psql我的意思是交互式命令行。 我对扩展*到带引号的列名列表的工具感到满意。然后,我可以删除专栏以手动删除。 我的问题只是关于psql的交互用法。这与那些对sql标准不满意的人以及想要执行“ select * -foo”之类的问题的问题不是重复的。
10 postgresql  psql 

3
添加子查询时,PostgreSQL查询非常慢
我对具有150万行的表进行了相对简单的查询: SELECT mtid FROM publication WHERE mtid IN (9762715) OR last_modifier=21321 LIMIT 5000; EXPLAIN ANALYZE 输出: Limit (cost=8.84..12.86 rows=1 width=8) (actual time=0.985..0.986 rows=1 loops=1) -> Bitmap Heap Scan on publication (cost=8.84..12.86 rows=1 width=8) (actual time=0.984..0.985 rows=1 loops=1) Recheck Cond: ((mtid = 9762715) OR (last_modifier = 21321)) -> BitmapOr (cost=8.84..8.84 rows=1 …

1
为什么postgresql pg_dump将视图导出为表?
我正在使用PostgreSQL 9.3 pg_dump工具使用以下方法仅提取公共模式定义: pg_dump -s -n public -h host -U postgres --dbname=db > ./schema.sql 但是当我检查schema.sql我们的一种观点时,它出现在CREATE TABLE声明中而不是CREATE VIEW声明中。 但是,如果我pg_dump使用以下特定视图: pg_dump -s -t myview -h host -U postgres --dbname=db > ./schema.sql 然后schema.sql包含实际的视图定义。 那么,为什么会这样呢?感谢大伙们!

1
PostgreSQL上的只读单表访问权限最少
以下是似乎可以用来创建新用户(登录)并为PostgreSQL上的一个指定表授予只读访问权限的命令列表。 假设这些命令是在具有足够特权的登录时执行的(即postgres默认安装中的登录)。 CREATE ROLE user_name NOSUPERUSER NOCREATEDB NOCREATEROLE NOINHERIT LOGIN PASSWORD 'pwd' VALID UNTIL 'infinity'; 现在,我想授予数据库select上的表的权限,因此就可以了(通过PgAdmin或类似方法将数据库选择为当前数据库):tab_abcdb_xyzdb_xyz grant select on tab_abc to user_name; 现在的问题是:这是足够的,或者应该有更多的赠款(数据库connect,usage也许)? 这些命令似乎对我有用,但是我的默认安装具有默认的安全设置。如果服务器管理员配置了更强的安全性,我还应该添加哪些其他赠款? 看来,我不需要批准connect,也没有usage-而授予是implicite select?总是这样吗?

1
如何使用索引加快Postgres中的排序
我正在使用postgres 9.4。 的messages具有以下模式:消息属于FEED_ID,并且具有posted_at,还消息可以具有(在答复的情况)的父消息。 Table "public.messages" Column | Type | Modifiers ------------------------------+-----------------------------+----------- message_id | character varying(255) | not null feed_id | integer | parent_id | character varying(255) | posted_at | timestamp without time zone | share_count | integer | Indexes: "messages_pkey" PRIMARY KEY, btree (message_id) "index_messages_on_feed_id_posted_at" btree (feed_id, posted_at DESC NULLS …

1
如何在Amazon RDS PostgreSQL中临时禁用外键?
我正在将现有测试环境迁移到Amazon RDS PostgreSQL。测试框架具有将某些表中的数据重新加载到较早状态的功能。为此,它将禁用外键,删除现有数据,加载保存状态并再次启用外键。 当前,测试框架通过禁用所有触发器来禁用外键(当然,这需要超级用户): alter table tablename disable trigger all; 在RDS上,此操作失败并显示: 错误:权限被拒绝:“ RI_ConstraintTrigger_a_20164”是系统触发器 如何在Amazon RDS PostgreSQL中临时禁用外键? 注意:已经问过类似的问题(RDS上的PostgreSQL:如何在FK约束下批量导入数据?),但这是专门针对脱机导入的,解决方案也针对脱机导入。

2
取消等待锁定的PostgreSQL ALTER TABLE查询是否安全?
我们在ALTER TABLE几个小时前开始查询,直到最近(通过pg_stat_activity)才意识到它正在等待锁。我们发现了另一个查询,该查询在我们要更改的表上拥有一个锁,并且不让它走。 我们的查询是一个“简单”查询(更改列数据类型),但是它在大型表上运行。 我们决定杀死而不是杀死保持锁定状态的进程,而不是杀死ALTER TABLE。 我们并没有包裹ALTER TABLE在一个事务中。 据我了解,我们的查询正在等待锁的事实意味着它一直在等待锁,并且从未更改过任何内容。 这是真的?我们完全取消ALTER TABLE查询是否安全?还是查询已经修改了某些内容并取消它会使我们的数据库处于某种中间状态? PS:计划使用取消它SELECT pg_cancel_backend(pid);。如果这是个坏主意,请告诉我。

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.