小编Ada*_*tan的帖子

运行文件时PostgreSQL退出状态

当使用单个 SQL 命令运行 PostgreSQL 时,错误代码按预期返回:

% psql -c "SELECT * FROM AWDASDASDASDAS" my_db
ERROR:  relation "awdasdasdasdas" does not exist
LINE 1: SELECT * FROM AWDASDASDASDAS
% echo $?
1
Run Code Online (Sandbox Code Playgroud)

但是在运行文件时,错误被抑制:

% psql -f test.sql my_db
psql:test.sql:1: ERROR:  relation "awdasdasdasdas" does not exist
LINE 1: SELECT * FROM AWDASDASDASDAS
% echo $?
0
Run Code Online (Sandbox Code Playgroud)

知道如何恢复这些错误吗?

postgresql

16
推荐指数
1
解决办法
4249
查看次数

PostgreSQL:模式差异/补丁工具

考虑以下设置:

  • 生产数据库
  • 一个开发数据库,​​在其上进行架构更改以启用新功能

当新功能的开发完成后,我必须手动更新 prod db 模式,直到pg_dump --schema-only两个数据库上的相同为止。这个过程容易出错且乏味。

所以,我正在寻找一种可以:

  • 显示两个模式之间差异的摘要(如diff)。请注意,我不是在寻找模式的单纯文本差异,而是一个更精细的工具,可以得出诸如“表X有一个新列Y”之类的结论。
  • 自动生成将一种模式转换为另一种模式的 SQL 代码(如patch

是否有架构差异/补丁工具可以帮助我将生产架构转换为更高级的开发架构?

schema postgresql

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

PostgreSQL:COUNT(*) 使用顺序扫描,而不是索引

为什么PostgreSQL会顺序扫描表进行COUNT(*)查询,而有一个非常小的索引主键?

postgresql index count

15
推荐指数
1
解决办法
9627
查看次数

为什么 PostgreSQL 允许查询 array[0] 即使它使用基于 1 的数组?

我一直在我的一个 PostgreSQL 数据库中使用数组。

我创建了一个包含至少一个元素的几何数组的表:

CREATE TABLE test_arrays (
    polygons geometry(Polygon,4326)[],
    CONSTRAINT non_empty_polygons_chk 
        CHECK ((COALESCE(array_length(polygons, 1), 0) <> 0))
);
Run Code Online (Sandbox Code Playgroud)

我添加了几行,并在表中查询每个几何数组中的第一个元素:

SELECT polygons[0] FROM test_arrays;
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是,我得到了一个空行列表!

经过一些研究,事实证明PostgreSQL 数组是基于一个的

数组下标数字写在方括号内。默认情况下,PostgreSQL 使用基于 1 的数组编号约定,即 n 个元素的数组以 array[1] 开头,以 array[n] 结尾。

所以SELECT polygons[0] FROM test_arrays;工作并返回polygon每一行的第一行。

如果 PostgreSQL 使用基于 1 的编号约定,为什么允许查询第 0 个元素,结果是否有任何意义?

postgresql array postgresql-9.3

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

PostgreSQL:TRUNCATE 后未释放磁盘空间

我有TRUNCATE一个巨大的(~120Gb)表,名为files

TRUNCATE files;
VACUUM FULL files;
Run Code Online (Sandbox Code Playgroud)

表大小为 0,但没有释放磁盘空间。任何想法如何回收我丢失的磁盘空间?

更新: 磁盘空间在大约 12 小时后释放,我这边没有任何操作。我使用 Ubuntu 8.04 服务器。

postgresql truncate disk-space

14
推荐指数
1
解决办法
6393
查看次数

官方 PostgreSQL 大小写约定

是否有关于数据库、表和字段名称大小写的官方 PostreSQL 约定?

在官方网站上的例子表明一个小写字母和_单词的分离,我不知道这个策略是否正式。

CREATE TABLE films (
    code        char(5) CONSTRAINT firstkey PRIMARY KEY,
    title       varchar(40) NOT NULL,
    did         integer NOT NULL,
    date_prod   date,
    kind        varchar(10),
    len         interval hour to minute
);
Run Code Online (Sandbox Code Playgroud)

postgresql naming-convention

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

Postgresql:设置默认的 psql 客户端编码

当我使用 连接到 Postgresql 数据库时psql,我经常收到以下消息:

=> SELECT * FROM question_view ;
ERROR:  character with byte sequence 0xd7 0x9e in encoding "UTF8" has no equivalent in encoding "LATIN1"
Run Code Online (Sandbox Code Playgroud)

按照这个SO answer,我知道我应该相应地更改客户端编码:

SET client_encoding = 'UTF8';
Run Code Online (Sandbox Code Playgroud)

client_encoding每次连接到数据库时更改都很麻烦。有没有办法在.pgpass文件中或其他任何地方永久配置此设置?

postgresql psql configuration encoding

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

Postgresql 8.3:限制每个查询的资源消耗

我正在使用PostgreSQL 8.3 + PostGIS 1.3Ubuntu 8.04 Hardy上存储地理空间数据。

这个特定版本的 PostGIS 在计算buffer()非常复杂的段时有一个错误,这会导致查询占用越来越多的内存,直到整个机器卡住。

我正在寻找一种 PostgreSQL 机制,它可以:

  • 限制特定查询使用的内存消耗(可能还有其他资源)。
  • 自动停止执行时间超过某个阈值的查询。

有任何想法吗?

postgresql performance

12
推荐指数
1
解决办法
4566
查看次数

PostgreSQL:上次访问表的时间

我负责一个大型 PostgreSQL 数据库,有几十个表。我怀疑其中许多表从未被访问过。

检查上次访问某个表是什么时候的最佳方法是什么?我想在DELETE,INSERT和上添加触发器UPDATE,但我希望有更有效的方法。

postgresql

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

PostgeSQL 9.3:停止 VACUUM FULL 是否安全?

我在 RDS 上使用 PostgreSQL 9.3。偶尔,我会在数据库上运行VACUUM FULL操作。但是,这样的操作可能需要很长时间,并且会阻塞其他表,因此可能需要停止操作。

停止VACUUM FULL耗时太长的手术是否安全?

vacuum postgresql-9.3 amazon-rds

11
推荐指数
1
解决办法
7946
查看次数