在最新版本的 PostgreSQL 中(截至 2013 年 12 月),我们能否在两个或多个内核之间共享查询以提高性能?还是我们应该获得更快的内核?
我知道,在安装时,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)。
我将尝试通过以下示例来解释我的误解。
我不明白基本面的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) 我想知道为什么允许新创建的用户在连接到数据库后创建表。我有一个数据库,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 中存储电子邮件地址的正确数据类型是什么?
我可以使用varchar(甚至text),但我想知道电子邮件是否有更具体的数据类型。
我想将一个相当简单的、内部的、数据库驱动的应用程序从 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) 首先,我是一名开发人员,而不是 DBA 或系统管理员;请温柔:)
我正在开发一个应用程序工作流,其中单个用户操作将触发数据库中的复杂更改 - 在某些表中创建数百条记录,在其他表中更新数百条记录,等等。总而言之,大约 12 个表(大约 100 ) 被这个动作感动了。由于复杂性,我很难在运行另一个测试之前手动恢复所有更改。在我的大部分开发时间中,我可以简单地在工作流末尾插入一个“ROLLBACK”语句,但是当我接近提交我的更改时,我需要测试真实的东西。
我有要使用的生产数据库的本地副本。就我而言,测试之间的转储和恢复比编写脚本来撤消所有更改要快。它更快,但它仍然让我慢了很多(在我老化的笔记本电脑上恢复大约需要 20 分钟)。有什么办法可以保存数据库当前状态的快照,然后快速恢复它?
我保证是系统上唯一的用户,并且我有 root 访问权限。tar'ed 和 gzip'ed 后,数据库转储约为 100MB。PostgreSQL 版本是 8.3。
在此先感谢您提供任何有用的想法。
我在 PostgreSQL 9.2 上有一个数据库,它有一个包含大约 70 个表的主模式和可变数量的相同结构的每个客户端模式,每个模式有 30 个表。客户端模式具有引用主模式的外键,而不是相反。
我刚刚开始用一些从以前版本中获取的真实数据填充数据库。当我不得不在主模式的一个非常中心的表中进行批量删除时,数据库已经达到大约 1.5 GB(预计在几周内会增长到几十 GB)。所有相关的外键都标记为 ON DELETE CASCADE。
这将需要很长时间,这并不奇怪,但 12 小时后很明显,我最好重新开始,删除数据库并再次启动迁移。但是,如果我稍后需要在数据库处于活动状态且更大时重复此操作怎么办?有没有替代的、更快的方法?
如果我编写一个脚本来浏览依赖表,从离中心表最远的表开始,逐表删除依赖行,会快得多吗?
一个重要的细节是某些表上有触发器。
有没有办法监控在 PostgreSQL 中创建索引的进度。我正在一个大表上创建一个索引,我想看看这发生的速度有多快。
有没有办法监控这个?
postgresql ×10
index ×2
performance ×2
permissions ×2
datatypes ×1
delete ×1
linux ×1
parallelism ×1
plpgsql ×1
restore ×1
snapshot ×1