标签: postgresql

单个 PostgreSQL 查询可以使用多个内核吗?

在最新版本的 PostgreSQL 中(截至 2013 年 12 月),我们能否在两个或多个内核之间共享查询以提高性能?还是我们应该获得更快的内核?

postgresql performance parallelism query-performance

64
推荐指数
3
解决办法
7万
查看次数

功能表现

来自 MySQL 背景,其中存储过程性能(旧文章)可用性值得怀疑,我正在评估 PostgreSQL 为我公司的新产品。

我想做的一件事是将一些应用程序逻辑移到存储过程中,所以我在这里询问有关在 PostgreSQL (9.0) 中使用函数的 DO 和 DON'T(最佳实践),特别是关于性能陷阱。

postgresql best-practices plpgsql

63
推荐指数
4
解决办法
4万
查看次数

PostgreSQL:删除用户 postgres 的密码要求

我知道,在安装时,PostgreSQL 的 db root 用户 (postgres) 没有密码:

postgres=# select usename, passwd is null from pg_shadow;
 usename  | ?column? 
----------+----------
 postgres | t
(1 row)
Run Code Online (Sandbox Code Playgroud)

...建议将其设置为:

alter role postgres password '<<very-secret>>';
Run Code Online (Sandbox Code Playgroud)

(然后相应地更新pg_hba.conf文件)

我的问题是:当 user 不需要密码时,使用什么 SQL 来恢复到以前的情况postgres

一般来说,我如何删除任何角色的密码要求?我不是在问如何更改密码,而是在问如何删除密码要求(passwd表中的空列pg_shadow)。

postgresql linux postgresql-9.1

61
推荐指数
2
解决办法
14万
查看次数

理解“位图堆扫描”和“位图索引扫描”

我将尝试通过以下示例来解释我的误解。

我不明白基本面Bitmap Heap Scan Node。考虑SELECT customerid, username FROM customers WHERE customerid < 1000 AND username <'user100';计划如下的查询:

Bitmap Heap Scan on customers  (cost=25.76..61.62 rows=10 width=13) (actual time=0.077..0.077 rows=2 loops=1)
  Recheck Cond: (((username)::text < 'user100'::text) AND (customerid < 1000))
  ->  BitmapAnd  (cost=25.76..25.76 rows=10 width=0) (actual time=0.073..0.073 rows=0 loops=1)
        ->  Bitmap Index Scan on ix_cust_username  (cost=0.00..5.75 rows=200 width=0) (actual time=0.006..0.006 rows=2 loops=1)
              Index Cond: ((username)::text < 'user100'::text)
        ->  Bitmap Index Scan on customers_pkey  (cost=0.00..19.75 rows=1000 width=0) (actual …
Run Code Online (Sandbox Code Playgroud)

postgresql index

61
推荐指数
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           | =c/postgres                  +
               |              |           |             |             | postgres=CTc/postgres
 template1     | postgres     | SQL_ASCII | C           | C           | =c/postgres                  +
               |              |           |             |             | postgres=CTc/postgres
(5 rows) …
Run Code Online (Sandbox Code Playgroud)

postgresql permissions postgresql-9.2

60
推荐指数
3
解决办法
6万
查看次数

在 PostgreSQL 中存储电子邮件地址的最佳方法是什么?

在 PostgreSQL 中存储电子邮件地址的正确数据类型是什么?

我可以使用varchar(甚至text),但我想知道电子​​邮件是否有更具体的数据类型。

postgresql database-design datatypes

59
推荐指数
4
解决办法
4万
查看次数

如何在数据库和架构上管理用户的默认权限?

我想将一个相当简单的、内部的、数据库驱动的应用程序从 SQLite3 迁移到 PostgreSQL 9.3,并在执行过程中收紧数据库中的权限。

该应用程序当前包含一个用于更新数据的命令;和一个查询它。当然,我还需要以其他方式维护数据库(创建新表、视图、触发器等)。

虽然此应用程序一开始将是唯一托管在服务器上的应用程序,但我更愿意假设它将来可能会托管在具有其他数据库的服务器上,而不是在以后有必要时进行争夺未来。

我认为这些将是一组相当常见的要求,但我很难找到一个简单的教程来解释如何在 PostgreSQL 中设置一个新数据库,并使用这种用户/权限分离。参考资料详细介绍了组、用户、角色、数据库、模式和域;但我觉得他们很困惑。

这是我到目前为止尝试过的(从内部psql作为“postgres”):

CREATE DATABASE hostdb;
REVOKE ALL ON DATABASE hostdb FROM public;
\connect hostdb
CREATE SCHEMA hostdb;
CREATE USER hostdb_admin WITH PASSWORD 'youwish';
CREATE USER hostdb_mgr   WITH PASSWORD 'youwish2';
CREATE USER hostdb_usr WITH PASSWORD 'youwish3';

GRANT ALL PRIVILEGES ON DATABASE hostdb TO hostdb_admin;
GRANT CONNECT ON DATABASE hostdb TO hostdb_mgr, hostdb_usr;
ALTER DEFAULT PRIVILEGES IN SCHEMA hostdb GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO hostdb_mgr;
ALTER DEFAULT PRIVILEGES …
Run Code Online (Sandbox Code Playgroud)

postgresql database-design permissions

59
推荐指数
1
解决办法
6万
查看次数

是否可以使用 PostgreSQL 快速创建/恢复数据库快照?

首先,我是一名开发人员,而不是 DBA 或系统管理员;请温柔:)

我正在开发一个应用程序工作流,其中单个用户操作将触发数据库中的复杂更改 - 在某些表中创建数百条记录,在其他表中更新数百条记录,等等。总而言之,大约 12 个表(大约 100 ) 被这个动作感动了。由于复杂性,我很难在运行另一个测试之前手动恢复所有更改。在我的大部分开发时间中,我可以简单地在工作流末尾插入一个“ROLLBACK”语句,但是当我接近提交我的更改时,我需要测试真实的东西。

我有要使用的生产数据库的本地副本。就我而言,测试之间的转储和恢复比编写脚本来撤消所有更改要快。它更快,但它仍然让我慢了很多(在我老化的笔记本电脑上恢复大约需要 20 分钟)。有什么办法可以保存数据库当前状态的快照,然后快速恢复它?

我保证是系统上唯一的用户,并且我有 root 访问权限。tar'ed 和 gzip'ed 后,数据库转储约为 100MB。PostgreSQL 版本是 8.3。

在此先感谢您提供任何有用的想法。

postgresql snapshot restore

58
推荐指数
3
解决办法
3万
查看次数

PostgreSQL 中的 DELETE 非常慢,解决方法?

我在 PostgreSQL 9.2 上有一个数据库,它有一个包含大约 70 个表的主模式和可变数量的相同结构的每个客户端模式,每个模式有 30 个表。客户端模式具有引用主模式的外键,而不是相反。

我刚刚开始用一些从以前版本中获取的真实数据填充数据库。当我不得不在主模式的一个非常中心的表中进行批量删除时,数据库已经达到大约 1.5 GB(预计在几周内会增长到几十 GB)。所有相关的外键都标记为 ON DELETE CASCADE。

这将需要很长时间,这并不奇怪,但 12 小时后很明显,我最好重新开始,删除数据库并再次启动迁移。但是,如果我稍后需要在数据库处于活动状态且更大时重复此操作怎么办?有没有替代的、更快的方法?

如果我编写一个脚本来浏览依赖表,从离中心表最远的表开始,逐表删除依赖行,会快得多吗?

一个重要的细节是某些表上有触发器。

postgresql performance delete postgresql-9.2

58
推荐指数
4
解决办法
8万
查看次数

监控PostgreSQL索引构建进度

有没有办法监控在 PostgreSQL 中创建索引的进度。我正在一个大表上创建一个索引,我想看看这发生的速度有多快。

有没有办法监控这个?

postgresql index

57
推荐指数
4
解决办法
3万
查看次数