Questions tagged «postgresql»

PostgreSQL的所有版本。如果该上下文很重要,请添加其他特定于版本的标记,例如postgresql-11。

1
varchar(n)的开销是多少?
我想从Postgres文档中询问有关varchar(n)类型的片段的含义: 短字符串(最多126个字节)的存储要求是1个字节加上实际的字符串,其中包括在字符情况下的空格填充。较长的字符串的开销为4个字节,而不是1个字节。 假设我有一个varchar(255)字段。现在,以下语句: 如果此字段包含10个字节的字符串,则开销为1个字节。因此该字符串将使用11个字节。 如果该字段使用140个字节保存字符串,则开销为4个字节。因此该字符串将使用144个字节。 以上这些陈述是正确的吗?这里有人理解文档相同的方式,我不过这里有人指出的开销总是4个字节在这里?


1
日期范围的唯一性约束
考虑具有prices以下列的表: id integer primary key product_id integer -- foreign key start_date date not null end_date date not null quantity integer price numeric 我希望数据库执行以下规则,即在日期范围内(通过where <date> BETWEEN start_date AND end_date)某种产品在特定数量上只能有一个价格。 这种基于范围的约束可行吗?

3
最有效的UUID列类型是什么
为了存储128位UUID,有多种存储选项: 字节[16]列 两个bigint / long(64位)列 CHAR(36)列-32个十六进制数字+ 4个破折号。 UUID数据库特定的列(如果数据库支持) 从索引的角度来看,哪些是最有效的?如果数据库不支持专用的uuid类型,则1,2,3中的哪一个是最佳候选者?

1
修复表结构以避免出现“错误:重复的键值违反唯一约束”
我有这样创建的表: -- -- Table: #__content -- CREATE TABLE "jos_content" ( "id" serial NOT NULL, "asset_id" bigint DEFAULT 0 NOT NULL, ... "xreference" varchar(50) DEFAULT '' NOT NULL, PRIMARY KEY ("id") ); 稍后,插入一些指定ID的行: INSERT INTO "jos_content" VALUES (1,36,'About',...) 稍后,将插入一些没有id的记录,它们将失败并显示错误: Error: duplicate key value violates unique constraint。 显然,id被定义为一个序列: 每个失败的插入都会增加序列中的指针,直到它递增到不再存在的值并且查询成功为止。 SELECT nextval('jos_content_id_seq'::regclass) 表定义有什么问题?解决此问题的明智方法是什么?

1
如何在PostgreSQL中使用AES加密?
我通过使用以下语句尝试了aes-encryption: SELECT encrypt('test', 'key', 'aes'); 哪个有效,但我无法解密该值。我将它插入了一个数据类型bytea的字段中,但是我不确定这是否正确。 SELECT decrypt(pw, 'key', 'aes') FROM table WHERE ID = 1; 给我错误 错误:函数delete(bytea,未知,未知)不存在第 1行:从Tabelle WHERE ID = 7;中选择解密(pw,'key','aes');^ 提示:没有函数与给定的名称和参数类型匹配。您可能需要添加显式类型转换。 这是否真的意味着crypto()是现有函数,而不是crypto()?我还能如何检索aes加密的值?



1
pg_restore期间检查点的发生过于频繁
在PostgreSQL 9.2.2(Windows 32位)下,我有一个pg_restore命令,该命令系统地导致有关检查点频率的日志警告,例如: LOG: checkpoints are occurring too frequently (17 seconds apart) HINT: Consider increasing the configuration parameter "checkpoint_segments". 该数据库大小约为3.3 Gb,具有112个表/ 160个视图,并在大约14分钟内恢复。 这在正常情况下发生是正常的pg_restore吗?

2
Postgres中的快速汉明距离查询
我有一个大型数据库(1600万行),其中包含图像的感知哈希。 我希望能够在合理的时间内按汉明距离搜索行。 目前,据我所知,我认为最好的选择是自定义SP-GiST实现,该实现可实现BK-Tree,但这似乎需要大量工作,但我仍然对实用性感到困惑正确实现自定义索引的详细信息。计算汉明距离很容易,但是我确实知道C。 基本上,这里合适的方法是什么?我需要能够在哈希的特定编辑距离内查询匹配项。据我了解,长度相等的字符串的Levenshtein距离在功能上是汉明距离,因此,尽管没有明确的方法可以从中创建索引(请记住,我正在查询的值),至少存在一些对我想要的支持。我无法预先计算与固定值的距离,因为那只会对那个值有用。 哈希当前存储为64个字符的字符串,其中包含哈希的二进制ASCII编码(例如“ 10010101 ...”),但是我可以很容易地将它们转换为int64。真正的问题是我需要能够相对快速地进行查询。 似乎可以通过达成与我想要的目标类似的东西pg_trgm,但是我不清楚三联词匹配机制的工作原理(特别是,它返回的相似性度量实际上代表了什么?看起来有点像编辑距离)。 插入性能并不关键(计算每行的哈希值在计算上非常昂贵),因此我主要关心搜索。

1
log_min_duration_statement设置被忽略
我Postgresql 9.1在Ubuntu上运行。确切的Postgresql版本9.1+129ubuntu1如我的软件包管理器所示。 我有2个正在积极使用的数据库,它们是从远程服务器使用的。 我希望记录执行时间较长的查询。所以我在/etc/postgresql/9.1/main/postgresql.conf文件中设置以下参数 log_min_duration_statement = 10000 log_statement = 'mod' 因此Postgresql将记录超过10秒的查询。 但是当我reload使用postgres配置时,Postgresql开始记录每个适合log_statement值的查询。我将持续时间设置为100秒以确保 log_min_duration_statement = 100000 但是Postgresql会记录所有适合log_statement值的查询,无论log_min_duration_statement值如何。 设置log_statement为none似乎停止记录。 我有什么想念的配置吗?

4
即使零行匹配,也让SELECT返回恒定值
考虑以下选择语句: SELECT *, 1 AS query_id FROM players WHERE username='foobar'; 它返回query_id带有值的列1以及玩家的其他列。 如何将一个至少让上面的SQL回报query_id的1,即使选择,反而找不到行那场比赛? 顺便说一句,它是PostgreSQL 8.4。

2
ALTER TABLE上的数据库“冻结”
今天早上,我们的生产环境只是冻结*一段时间,当更改表格时,实际上添加了一列。 令人反感的SQL:ALTER TABLE cliente ADD COLUMN topicos character varying(20)[]; *登录到我们的系统需要从同一张表中进行选择,因此在更改表期间没有人可以登录。实际上,我们必须终止进程以使系统恢复正常运行。 表结构: CREATE TABLE cliente ( rut character varying(30) NOT NULL, nombre character varying(150) NOT NULL, razon_social character varying(150) NOT NULL, direccion character varying(200) NOT NULL, comuna character varying(100) NOT NULL, ciudad character varying(100) NOT NULL, codigo_pais character varying(3) NOT NULL, …


1
删除其他表中未引用的行
我在PostgreSQL 9.3数据库中有两个表:表link_reply有一个名为which_group指向table 的外键link_group。 我要删除link_group不link_reply存在相关行的所有行。听起来很基本,但我一直在努力。 这样简单吗(不起作用)? DELETE FROM link_group WHERE link_reply = NULL;

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.