当使用单个 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)
知道如何恢复这些错误吗?
考虑以下设置:
当新功能的开发完成后,我必须手动更新 prod db 模式,直到pg_dump --schema-only两个数据库上的相同为止。这个过程容易出错且乏味。
所以,我正在寻找一种可以:
diff)。请注意,我不是在寻找模式的单纯文本差异,而是一个更精细的工具,可以得出诸如“表X有一个新列Y”之类的结论。patch)为什么PostgreSQL会顺序扫描表进行COUNT(*)查询,而有一个非常小的索引主键?
我一直在我的一个 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 个元素,结果是否有任何意义?
我有TRUNCATE一个巨大的(~120Gb)表,名为files:
TRUNCATE files;
VACUUM FULL files;
Run Code Online (Sandbox Code Playgroud)
表大小为 0,但没有释放磁盘空间。任何想法如何回收我丢失的磁盘空间?
更新: 磁盘空间在大约 12 小时后释放,我这边没有任何操作。我使用 Ubuntu 8.04 服务器。
是否有关于数据库、表和字段名称大小写的官方 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 数据库时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 8.3 + PostGIS 1.3在Ubuntu 8.04 Hardy上存储地理空间数据。
这个特定版本的 PostGIS 在计算buffer()非常复杂的段时有一个错误,这会导致查询占用越来越多的内存,直到整个机器卡住。
我正在寻找一种 PostgreSQL 机制,它可以:
有任何想法吗?
我负责一个大型 PostgreSQL 数据库,有几十个表。我怀疑其中许多表从未被访问过。
检查上次访问某个表是什么时候的最佳方法是什么?我想在DELETE,INSERT和上添加触发器UPDATE,但我希望有更有效的方法。
我在 RDS 上使用 PostgreSQL 9.3。偶尔,我会在数据库上运行VACUUM FULL操作。但是,这样的操作可能需要很长时间,并且会阻塞其他表,因此可能需要停止操作。
停止VACUUM FULL耗时太长的手术是否安全?
postgresql ×9
amazon-rds ×1
array ×1
count ×1
disk-space ×1
encoding ×1
index ×1
performance ×1
psql ×1
schema ×1
truncate ×1
vacuum ×1