标签: postgresql

跨表中所有数据的复杂约束

我们有一个表来记录系统上发生的处理,我们需要确保只有一行处于“处理中”状态。

我想确保结果始终为零或一:

select count(id) from jobs where status in ('P', 'G');
Run Code Online (Sandbox Code Playgroud)

我们正在使用显式事务,因此理想情况下,此检查将在提交时进行,如果不变量不成立则中止事务。对于我们来说,处理任何偶尔会引发错误的异常处理比突然以多个“正在进行”的工作结束要容易得多。

该解决方案只需要与 Postgres 一起使用,因此我们很乐意为此采用非标准解决方案。我们目前使用 8.4,但如果有任何不同,我们将在某个时候升级到 9.x。

postgresql constraint transaction data-integrity postgresql-8.4

4
推荐指数
1
解决办法
3173
查看次数

4
推荐指数
1
解决办法
2060
查看次数

如何获取 PostgreSQL 表的表定义?

我想获取 PostgreSQL 表的字段名称、每个字段的数据类型、每个字段的长度和每个字段的精度。请让我 SQL 查询以获取此信息。

postgresql

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

使用 ORDER BY 日期和文本优化简单查询

我有一个基于日期字段和数字字段的订单查询 Postgres 中的表,该表有 1000000 条记录

表的数据类型为:

fcv_id = serial
fcv_fecha_comprobante = timestamp without time zone
fcv_numero_comprobante = varchar(60)
Run Code Online (Sandbox Code Playgroud)

查询是:

SELECT fcv_id, fcv_fecha_comprobante FROM factura_venta
ORDER BY fcv_fecha_comprobante, fcv_numero_comprobante
Run Code Online (Sandbox Code Playgroud)

这个查询大约需要 5 秒,但如果我取出“order by”,查询只需要 0.499 秒

我遇到的问题是我需要在尽可能短的时间内运行这个查询,所以我在谷歌上搜索我可以做什么并使用以下查询创建一个复合索引

CREATE INDEX factura_venta_orden ON factura_venta
USING btree (fcv_fecha_comprobante ASC NULLS LAST
           , fcv_numero_comprobante ASC NULLS LAST);
ALTER TABLE factura_venta CLUSTER ON factura_venta_orden;
Run Code Online (Sandbox Code Playgroud)

但是查询花费的时间相同甚至更多。

我使用的是 Postgres 9.0.13,这里是 73436 行的 EXPLAIN

Sort  (cost=11714.03..11897.62 rows=73436 width=27) (actual time=1260.759..1579.853 rows=73436 loops=1)
  Sort Key: fcv_fecha_comprobante, fcv_numero_comprobante
  Sort Method:  external merge …
Run Code Online (Sandbox Code Playgroud)

postgresql performance index query-performance

4
推荐指数
2
解决办法
6348
查看次数

如何转储所有者没有密码的 PostgreSQL 数据库?

首先,我的设置的一些背景:

服务器已禁用根访问。因此,我以(比如说)john也属于该sudo组的身份登录,因此能够运行超级用户命令。

我创建了一个新的无密码用户#1 santa(使用命令sudo adduser --shell /bin/bash --gecos 'Santa Claus' --disabled-password santa)。

然后我将登录会话的所有者更改为santa使用以下命令:sudo su - santa并创建了一个新的 PostgreSQL 数据库 :(createdb myapp_db该数据库是在没有要求我输入密码的情况下创建的)。

现在,给定条件,如何使用命令对数据库myapp_db(其所有者是santa)进行SQL 转储pg_dump

这应该有效,但不是:

john@host:~$ pg_dump myapp_db -U santa -h localhost --no-owner -W > myapp_db_backup.sql
Password: 
Run Code Online (Sandbox Code Playgroud)

当我运行上述命令时,如您所见,它要求我输入“密码”。我应该在这里输入什么密码?创建数据库时我没有输入任何密码,数据库所有者也没有密码santa

因此,我尝试输入johnsudo 用户的密码,但出现此错误:

“致命:用户“圣诞老人”的密码验证失败”


我也试过(也没有用):

john@host:~$ su - santa
santa@host:~$ pg_dump myapp_db -U santa -h localhost --no-owner -W > myapp_db_backup.sql
Password: …
Run Code Online (Sandbox Code Playgroud)

postgresql ubuntu postgresql-9.1

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

PostgreSql 为每个连接分配内存

当我们为 Postgres DB 配置内存设置时,每个连接的推荐内存分配是多少?有什么公式可以应用吗?

我知道应该分配服务器内存的 25%。但是我们如何根据数据库连接进行分配呢?我们怎么知道,应该分配的最大连接数是多少?

同样在多节点环境中,我们是否可以为每个节点(在 Postgres-ds.xml 最大连接数中)分配比数据库中实际分配的连接更多的连接?

postgresql

4
推荐指数
1
解决办法
9200
查看次数

使用 := 运算符赋值

当我分配一个变量时

result := title || '', by '' || author;
Run Code Online (Sandbox Code Playgroud)

运行该函数需要更多时间(大约 15 秒)。
但是,当我分配变量时

result = title || '', by '' || author;
Run Code Online (Sandbox Code Playgroud)

只需要133ms。

为什么第一个场景需要更多时间?这背后的原因是什么?

下面给出了完整的功能。

CREATE OR REPLACE FUNCTION myschema.fn_get_res_no(reservation_no character varying)
  RETURNS character varying AS
$BODY$  

DECLARE  
    emd_status_firstcall varchar(2);  
    emd_status_secondcall varchar(2);
    emd_status      varchar(6);  
BEGIN  
    SELECT firstwscomplete, secondwscomplete
    INTO emd_status_firstcall, emd_status_secondcall
    FROM myschema.mytable
    WHERE respkgconfirmid = reservation_no;

    emd_status = emd_status_firstcall || ', ' || emd_status_secondcall;
    RETURN emd_status ;  

END;  
$BODY$
  LANGUAGE plpgsql VOLATILE;
Run Code Online (Sandbox Code Playgroud)

postgresql performance plpgsql postgresql-performance

4
推荐指数
1
解决办法
8152
查看次数

为什么在 pgAdmin 1.18.1 中缩短了查询结果?

我最近安装了 pgAdmin 1.18.1 并注意到一个奇怪的事情:

长 json 查询结果被缩短为 256 个符号,然后添加 '(...)'。

有人可以帮我禁用这种缩短吗?

postgresql pgadmin

4
推荐指数
1
解决办法
2225
查看次数

Engineyard 空间上的 Postgres 为 100%,pg_xlog 充满了文件

我有一个快速增长的数据库。非常迅速。我的/db目录现在是 100%,并且pg_xlog.

我的背景是 Oracle 和 MySQL。我不知道这个数据库发生了什么。我知道我需要尽快聘请 Postgres DBA。

在短期内我可以做些什么来解决我的问题?我注意到删除数据并不能缓解我的空间问题。

pg_settings 的输出是:

archive_command             /bin/true                       configuration file
archive_mode                on                              configuration file
archive_timeout             1min                            configuration file
checkpoint_segments         100                             configuration file
checkpoint_timeout          5min                            configuration file
client_encoding             UTF8                            session
DateStyle                   ISO, MDY                        configuration file
default_statistics_target   100                             configuration file
default_text_search_config  pg_catalog.english              configuration file
effective_cache_size        1358MB                          configuration file
hot_standby                 on                              configuration file
hot_standby_feedback        on                              configuration file
lc_messages                 C                               configuration file
lc_monetary                 C                               configuration file
lc_numeric                  C                               configuration file
lc_time                     C                               configuration file
listen_addresses …
Run Code Online (Sandbox Code Playgroud)

postgresql disk-space

4
推荐指数
1
解决办法
2423
查看次数

无法让我的从站 - 复制服务器启动

我的复制服务器将无法启动。我已按照此处的说明进行操作:http :
//opensourcedbms.com/dbms/setup-replication-with-postgres-9-2-on-centos-6redhat-el6fedora/

以及包括 Postgres Wiki 在内的其他几个地方,因为它们都有相同的信息。

这是发生的事情:
我对/9.2/data文件夹进行完整备份并将其移动到复制/从服务器,解压缩它。我可以启动 PostgreSQL 和 pgAdmin 并毫无问题地访问所有数据。

然后我转到有关编辑从服务器的pg_hba.conf和的说明postgresql.conf。我尝试启动它,但它失败了(红色错误 [失败]。我在任何地方都找不到任何日志来提示我为什么。

我什至验证postmaster.pid了数据文件夹中没有。

另外,我找不到任何日志文件。我需要在配置中“激活”一个日志文件吗?

因此,如果有人想对我含糊的描述一无所知,我很想听听任何建议。如果有帮助,我可以将我的 conf 文件放在 pastebin 上。

postgresql replication

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