Questions tagged «postgresql-9.2»

PostgreSQL 9.2版

3
为什么允许新用户创建表?
我想知道为什么允许新创建的用户连接到数据库后创建表。我有一个数据库,project2_core: postgres=# \l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges ---------------+--------------+-----------+-------------+-------------+------------------------------- postgres | postgres | SQL_ASCII | C | C | project2_core | atm_project2 | UTF8 | de_DE.UTF-8 | de_DE.UTF-8 | project2=CTc/project2 template0 | postgres | SQL_ASCII | C | C | …

5
在PostgreSQL中非常慢的DELETE,解决方法?
我在PostgreSQL 9.2上有一个数据库,该数据库的主结构包含约70个表,并且每个客户机模式的结构相同的变量数量各不相同,每个表有30个表。客户端模式具有引用主模式的外键,而不是相反的方式。 我刚刚开始使用从先前版本中获取的一些真实数据填充数据库。当我不得不在主模式的非常中央的表中进行批量删除时,数据库已达到约1.5 GB(预计数周之内将增长到几十GB)。所有相关的外键都标记为ON DELETE CASCADE。 这将花费很长时间也就不足为奇了,但是在12个小时之后,很明显,我最好从头开始,删除数据库并再次启动迁移。但是,如果我需要在数据库正常运行并且更大时再重复此操作,该怎么办?是否有其他更快的方法? 如果我编写了一个脚本,该脚本将浏览从属表,从中央表最远的表开始,逐表删除从属行,会更快吗? 一个重要的细节是某些表上有触发器。

1
VACUUM将磁盘空间返回给操作系统
VACUUM除某些特殊情况外,通常不会将磁盘空间返回给操作系统。 从文档: 标准形式的VACUUM删除表和索引中的死行版本,并标记可用于将来重用的空间。但是,它不会将空间返回给操作系统,除非在特殊情况下,表末尾的一个或多个页面变得完全空闲,并且可以轻松获得独占表锁。相反,VACUUM FULL通过编写没有死角的表文件的全新版本来主动压缩表。这样可以最大程度地减少表的大小,但是会花费很长时间。在操作完成之前,表的新副本还需要额外的磁盘空间。 问题是:如何实现该数据库状态one or more pages at the end of a table become entirely free?可以通过完成此操作VACUUM FULL,但是我没有足够的空间来实现它。那么还有其他可能性吗?

4
为什么Postgres会生成一个已经使用的PK值?
我正在使用Django,偶尔我会收到此错误: IntegrityError:重复的键值违反了唯一约束“ myapp_mymodel_pkey” 详细信息:键(id)=(1)已存在。 实际上,我的Postgres数据库确实有一个myapp_mymodel对象,其主键为1。 为什么Postgres会再次尝试使用该主键?或者,这很可能是我的应用程序(或Django的ORM)引起的吗? 刚刚,此问题连续发生了3次。我发现的是,对于给定的表,它确实发生了一次或多次,然后不再发生。它似乎在每个表完全停止运行几天之前就发生了,每个表至少发生一分钟左右才发生,并且只是间歇地发生(并非所有表都立即发生)。 这个错误是如此断断续续的事实(在2周内仅发生了3次左右-数据库上没有其他负载,只是我测试了我的应用程序)使我非常警惕低级问题。

4
升级到Postgres 9.2时无法关闭旧的postmaster
我正在从9.1.4升级到Postgres 9.2.2。当我尝试使用以下方法升级数据库时: pg_upgrade -b /usr/local/Cellar/postgresql/9.1.4/bin -B /usr/local/Cellar/postgresql/9.2.2/bin -d /usr/local/var/postgres91 -D /usr/local/var/postgres 我收到以下错误消息: Performing Consistency Checks ----------------------------- Checking current, bin, and data directories ok There seems to be a postmaster servicing the old cluster. Please shutdown that postmaster and try again. Failure, exiting 我正在尝试停止服务器,但无法使升级命令正常工作。如何关闭旧的邮政局长?



1
为什么SELECT *比按名称选择所有列(以不同的列顺序)要快得多?
在具有a,b,c,d,e,f,g,h,i,j,k列的表上,我得到: select * from misty order by a limit 25; Time: 302.068 ms 和: select c,b,j,k,a,d,i,g,f,e,h from misty order by a limit 25; Time: 1258.451 ms 有没有一种方法可以使按列选择速度如此之快? 更新: 在表上没有索引,新创建了一个 这是EXPLAIN ANALYZE,似乎不太有用: explain analyze select * from misty order by a limit 25; Limit (cost=43994.40..43994.46 rows=25 width=190) (actual time=404.958..404.971 rows=25 loops=1) …

2
如果操作是由带有UPDATE CASCADE的FK约束引起的,则FOR EACH STATEMENT触发器多久执行一次?
我了解FOR EACH STATEMENT在执行时,表t上定义的触发器将运行一次UPDATE t ...。 现在,当使用t定义时FOREIGN KEY ... REFERENCES a ... ON UPDATE CASCADE,我更新的N行a,这会导致触发器被调用一次或N次吗? 换句话说,由FK约束级联的表更改更像是单个UPDATE,还是更像一系列UPDATEs?


1
是否存在用于远程访问PostgreSQL数据库的超时选项?
我正在通过 pgAdmin III在远程PostgreSQL数据库上工作。经过很短的一段时间(例如10-15分钟)之后,却没有在pgAdmin中进行任何操作,连接将自动失效。因此,我收到一条错误消息,询问是否要重新连接。这大约需要10秒。并且数据库结构崩溃了,所以我必须重新打开之前打开的架构。 有没有办法在某个地方更改超时参数,以防止连接较长时间过期?

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
CLUSTER对性能的影响
我正在尝试优化我的Postgres 9.2数据库以加快具有日期限制的查询。 我有一timestamp列,但大多数情况下我都想找一天,所以我创建了一个timestamp要date解析的索引: CREATE INDEX foo_my_timestamp_idx ON foo USING btree ((my_timestamp::date) DESC); 现在,为了提高性能,我CLUSTER foo使用上面的索引表: CLUSTER foo USING foo_my_timestamp_idx; 根据SQL-CLUSTER上的手册,该表 根据索引信息进行物理重新排序 我想知道使用表PK(请说id_foo)对其他查询的性能是否有影响。有没有缺点?

1
使用CTE INSERT的结果进行插入以提供唯一的ID值
我正在写一份工作,将数据从旧设计转换为新设计。在此过程中,我需要从插入中获取ID到单独的表中,并在插入目标表中使用它,如下所示: CREATE TABLE t1 { t1_id BIGSERIAL, col1 VARCHAR }; CREATE TABLE t2 { t2_id BIGSERIAL, col2 VARCHAR, -- renamed from col1 to avoid confusion t1_id BIGINT REFERENCES t1.t1_id }; 我定义了与以下形式匹配的SQL: WITH ins AS ( INSERT INTO t1 (t1_id) VALUES (DEFAULT) RETURNING t1_id ) INSERT INTO t2 (col1, t1_id) SELECT …

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.