标签: postgresql

查询以识别 postgresql 数据库表中使用的所有数据类型

我不想知道所有数据类型,只想知道我的数据库中使用的所有数据类型。这个信息可以查询吗?

PostgreSQL 8.4 和 9.x 版本

我目前需要知道公共(和其他模式)中 200 多个表的所有数据类型

postgresql datatypes information-schema

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

确定合适的隔离级别

这是一道作业题。

对于以下事务,说明将在不降低数据库完整性的情况下最大化吞吐量的隔离级别。解释答案。

将 coursed_id = 'CPSC1350' 标识的课程从一个部门更改为另一个部门。

Courses 表包含有关课程的信息:课程 ID、名称、提供课程的部门、讲师的 ID 以及可以参加课程的最大学生人数 (max_size)。课程(coursed_id:string,cname:string,dept:string,instructor_id:string,max_size:integer) – 主键:coursed_id – 外键:instructor_id 引用 Instructors

假设使用 PostgreSQL。

我相信可以使用提交的读来完成事务,因为

  • 脏读不好,因为有更新正在进行,因此涉及读取
  • 不可重复读取是可以的,因为其他人不太可能更改该值
  • 幻影是可以的,因为没有SELECT陈述

我在正确的轨道上吗?

rdbms postgresql optimization isolation-level

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

当 postgresql 发现触发器文件并将它自己从从服务器提升到主服务器时,实际发生了什么?

我在两个 postgres 服务器(主服务器:服务器 A,从服务器:服务器 B)之间进行了流式复制设置。我想知道当我触摸触发器文件并且从设备接管作为主设备时,引擎盖下实际发生了什么?我想知道的一件事是,在教程或文档中似乎没有人提到任何地方,如果我在完成后重新启动以前的奴隶(现在是主人)怎么办?事情不会变得一团糟,因为 .conf 文件仍然反映了旧的从站设置(例如 hot_standby = on)?在我可以安全地重新启动服务器之前,我应该更新那个 .conf 吗?

背景:我所处的情况让我想知道这一切是我需要更换我主控上的硬盘。这是我打算这样做的方式:

  • 故障转移到从站(服务器 B)
  • 更改主(服务器 A)上的硬盘并重新安装
  • 将重新安装的服务器A作为slave启动
  • A服务器赶上B服务器后,将A服务器改回master,然后再把B服务器改回slave

(顺便说一句。如果您对更好的工作流程有建议,请告诉我)

postgresql replication failover

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

识别类似于mysqlcheck的postgres db健康工具

我想对postgresql中的数据库进行检查,以验证服务器崩溃后一切正常。在 mysql 上,它将是 mysqlcheck。我想知道 postgres 的等价物。

postgresql

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

多个表的一个触发器

我在 PostgreSql 9.1 中有一个触发器,我想在插入多个表时触发它。是否可以让它影响所有这些表而不是为所有这些表创建触发器?我有 58 个表,我想使用调用触发器函数的同一个插入触发器,所以我一直在使用

create trigger tuweke 
after insert on product 
for each row execute procedure tuwekeAdjustextract(); 
create trigger tuweke 
after insert on caneweightment 
for each row execute procedure tuwekeAdjustextract(); 
...
Run Code Online (Sandbox Code Playgroud)

对所有这些表都这样做,然后我们有多个模式,所以工作量很大,这可以在一个查询中完成吗?然后影响该模式或整个数据库中的所有表?

postgresql trigger database-design postgresql-9.1

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

与 pgBouncer 斗争

我有 Postgres 9.2 和 PgBouncer('stack builder' 附带的版本)。我有一个通过 Npgsql 2.0.12 版在 win7 机器上连接的 .net 应用程序。

我的应用程序可以直接连接到 postgres 服务器,但总是无法通过 pgbouncer 连接。

我到 npgsql 的连接字符串(经过一些替换)

Sslmode=Prefer;Timeout=40;Server={0};Port={3};User Id={4};Password={1};Database={2};Pooling=False;
Run Code Online (Sandbox Code Playgroud)

(我也尝试过使用 Protocol=3 显式连接到 PgBounce,但没有奏效。)

pgBounce ini 的数据库行是:

[databases]
something = host=localhost port=5433 dbname=somethingelse user=someone password=aaa
Run Code Online (Sandbox Code Playgroud)

在 userlist.txt 中,我根据需要有“某人”“aaa”。

当我的应用程序运行时,npgsql 显示“连接被强制关闭”并且 pgbouncer 错误日志显示:

2013-02-06 20:16:57.594 2444 LOG File descriptor limit: -1 (H:-1), max_client_conn: 1000, max fds possible: 1030
2013-02-06 20:16:57.649 2444 LOG listening on ::/6433
2013-02-06 20:16:57.657 2444 LOG listening on 0.0.0.0:6433
2013-02-06 20:16:57.659 2444 LOG process …
Run Code Online (Sandbox Code Playgroud)

postgresql postgresql-9.2 pgbouncer

6
推荐指数
2
解决办法
6924
查看次数

PostgreSQL 8.4:如何判断是否安装了过程语言?

我有一个安装程序,需要 plpgsql 在 PostgreSQL 8.4 数据库中安装存储过程。我需要确保安装了语言,否则应用程序将失败。我不想放弃语言并重新添加它,因为这可能会搞砸其他一些事情。

有没有办法“轻轻”安装语言?
CREATE LANGUAGE IF NOT EXISTS似乎无效。

postgresql plpgsql functions postgresql-8.4 postgresql-extensions

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

PostgreSQL 9.1 流式复制问题:replica 无法正确使用索引

我们在主服务器上的 Ubuntu Linux 12.04 上使用 PostgreSQL 9.1.7,在副本服务器上的 FreeBSD 9.0-RELEASE 上使用 PostgreSQL 9.1.7。副本服务器和主服务器对同一 SQL 查询返回不同的结果。查询计划显示使用索引(BTree 索引,我们根本不使用哈希索引)来获取结果,因此看起来索引在副本服务器上处于不一致或不完整状态。主服务器上的查询:

db1=# select id from users where email='xxxx@xxxx.net';
   id    
---------
 1698116
(1 row)

db1=#
Run Code Online (Sandbox Code Playgroud)

在副本服务器上的查询:

db1=> select id from users where email='xxxx@xxxx.net';
 id 
----
(0 rows)

db1=> select created_at from users where id=1698116;
         created_at         
----------------------------
 2013-03-04 10:40:05.221214
(1 row)

db1=>
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,副本数据库已经包含一个具有正确 ID 的用户,因此数据已就位,但由于某种原因尚未编入索引。我们仔细检查了副本是否处于接收/重新应用状态,因此这不是暂时中断。用户从未被编入索引。我们也曾在 CentOS 5.6 上使用 PostgreSQL 9.0 遇到过类似问题,因此我们认为这不是 FreeBSD 或 PostgreSQL 9.1 特定的问题。

我们使用副本服务器运行大量繁重的 SQL 查询,这可能是问题的根源吗?无论如何,我们如何才能有效地检测和防止将来发生此类情况?副本今天没有停机,日志中没有任何错误行,所以我们只是偶尔检测到这种不一致。

postgresql replication postgresql-9.1

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

使用多个并发进程时如何提高 PostgreSQL 的性能?

在我们的 Python 应用程序上看到查询性能并不令人满意,该应用程序运行多个SQLAlchemy core用于访问 PostgreSQL 9.2 数据库的进程。我们可能有大约 100-200 个或更多并发进程对数据库执行查询

我们没有像pgpoolIIpgbounce当前安装的连接池系统。

我测试了查询,可以采取的顺序1-10秒,从我们的应用程序,它运行在何时psql最多20毫秒

我们认为这个问题与并发连接有关,特别是因为上述行为,并且因为我们在访问系统中的不同表时看到这些性能下降。但是,我们对此并不确定,可以很容易地接受替代建议或解决方案。

处理来自单个数据库服务器的多个进程的并发连接的常用方法是什么,以使查询能够快速执行?

postgresql concurrency

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

PgBouncer 是否为每个数据库配置条目创建一个单独的池?

如果我设置了一个包含多个数据库条目的 pgbouncer.ini 配置文件,pgBouncer 是否会为每个条目创建一个单独的池?我会这么认为,但无法证实这一点。

例如,有这样的事情:

[数据库]
db1 = ...
db2 = ...

[pgbouncer]

.
.
.
max_client_conn = 480

default_pool_size = 250

每个数据库的默认池为 250 个最大为 480 个,还是总共250 个默认和最大 480 个连接在两者之间共享?

非常感谢!

postgresql database-design max-connections pgbouncer

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