小编32b*_*oat的帖子

如何在 PostgreSQL 中使用 aes-encryption?

我使用以下语句尝试了 aes-encryption:

SELECT encrypt('test', 'key', 'aes');
Run Code Online (Sandbox Code Playgroud)

这有效,但我无法解密该值。我将它插入到数据类型bytea的字段中,但我不确定这是否正确。

SELECT decrypt(pw, 'key', 'aes') FROM table WHERE ID = 1;
Run Code Online (Sandbox Code Playgroud)

给我错误

错误:函数解密(bytea,未知,未知)不存在第
1 行:选择解密(密码,'key','aes')FROM tabelle WHERE ID = 7; ^
提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。

这是否真的意味着 encrypt() 是一个现有的函数,但不是decrypt()?我还能如何检索 aes 加密的值?

postgresql encryption functions postgresql-9.1

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

为什么全文搜索返回的行数少于 LIKE

我没有按照我的意愿进行全文搜索,而且我不明白结果列表中的差异。

示例语句:

SELECT `meldungstext`
FROM `artikel`
WHERE `meldungstext` LIKE '%punkt%'
Run Code Online (Sandbox Code Playgroud)

返回 92 行。我在meldungstext 列中收到具有匹配项的行,例如“Punkten”、“Zwei-Punkte-Vorsprung”和“Treffpunkt”。

我在“meldungstext”列上设置了全文索引并尝试了这个:

SELECT `meldungstext`
FROM `artikel`
WHERE MATCH (`meldungstext`)
AGAINST ('*punkt*')
Run Code Online (Sandbox Code Playgroud)

这仅返回 8 行。我只收到与“Punkt”本身或我认为在“i-Punkt”中被视为“Punkt”的单词匹配的行。

然后我尝试了布尔模式:

SELECT `meldungstext`
FROM `artikel`
WHERE MATCH (`meldungstext`)
AGAINST ('*punkt*' IN BOOLEAN MODE)
Run Code Online (Sandbox Code Playgroud)

返回 44 行。我收到的行在列 meldungstext 中包含“Zwei-Punkte-Vorsprung”或“Treffpunkt”,但没有包含“Punkten”的行。

为什么会发生这种情况,如何设置“完全”工作的全文搜索以防止在 where 子句中使用 LIKE '%%'?

mysql myisam full-text-search

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

防止查询等待表级锁的方法

将客户的数据库移动到额外的服务器后,我们遇到了问题。这应该会对站点的性能产生积极的影响,但是 MyISAM 中的表锁定存在问题。(我听说过使用 InnoDB 代替 MyISAM,但我们不能在不久的将来更改引擎)。
我们可以发现它是一个更新查询,当主持人在文章站点上激活评论时执行该查询。这是过程:

  • 处理更新查询 SET status = 1 WHERE id = 5(设置索引)
  • 页面缓存文件被删除

此时整个页面变得缓慢。数据库本身忙了几分钟。我取了几次进程列表,看到大约 60 个不同选择查询的条目,它们都处于等待表级锁定的状态。

1.我不明白为什么表上的这个更新article_comments会影响表的选择语句article以等待表级锁。在 processlist 中,几乎所有等待的查询都来自该表。我已经读过更新/插入比选择更受欢迎的事实,这可能会导致此类问题,但是当评论被激活时,文章表本身不会更新,因此选择不应该等待。我误解了吗?
2. 除了更改为 InnoDB 之外,还有什么可以防止这种行为或至少是为了获得更好的平衡吗?我对在将数据库移动到新服务器之前没有出现这个问题感到非常恼火。我想有一些配置错误,但我不知道如何识别。

mysql myisam performance mysql-5.5 locking

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

PostgreSQL 中关键字“ID”的用途是什么?

我是 PostgreSQL 的新手,在使用以下查询时遇到了问题:

SELECT * FROM table1 WHERE ID = 1
Run Code Online (Sandbox Code Playgroud)

错误:列“id”不存在第 2 行:WHERE ID = 1

其中 ID 是我通过 GUI 工具添加的列。

然后我发现 ID 是我当前版本的 PSQL 中的一个关键字,应该被引用。但我无法识别这个 ID 是做什么用的。

在链接页面上有以下通知:

在学习表 C-1 之前,重要的是要了解在 PostgreSQL 中没有保留关键字 (==true) 的事实并不意味着与该词相关的功能没有实现。

所以,ID 没有被标记为 PostgreSQL 关键字,似乎有一个功能与之相关,但我找不到哪个。SELECT ID 本身变成与上面发布的相同的错误消息。

postgresql syntax features reserved-word postgresql-9.1

3
推荐指数
1
解决办法
1673
查看次数

创建根据枚举值插入行的触发器?

我对触发器很陌生,我遇到了一般问题。我想实现这一目标:

CREATE TABLE `searcharticles` (
 `articleID` int(11) unsigned NOT NULL,
 `ean` char(13) COLLATE utf8_unicode_ci DEFAULT NULL,
 `manufacturerNumber` varchar(20) COLLATE utf8_unicode_ci NOT NULL,  
 PRIMARY KEY (`articleID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci


CREATE TABLE `addresses` (
 `articleID` int(11) unsigned NOT NULL,
 `shop` enum('shop1','shop2') COLLATE utf8_unicode_ci NOT NULL,
 `url` varchar(255) COLLATE utf8_unicode_ci NULL,
 `status` tinyint(3) NOT NULL DEFAULT '0',
 `createTime` datetime NOT NULL,
 `updateTime` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
 PRIMARY KEY (`articleID`,`shop`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci 
Run Code Online (Sandbox Code Playgroud)

searcharticles 中插入新行时,应填充表 …

mysql trigger syntax

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

警告:即使没有限制,为什么带有限制子句的语句也不安全?

由于 mysql 错误日志中的一些警告,我有点恼火。示例 1:

[Warning] Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. 
The statement is unsafe because it uses a LIMIT clause. 
This is unsafe because the set of rows included cannot be predicted. 
Statement: UPDATE `table` SET `status` = '1' WHERE `ID` = '15800' LIMIT 1
Run Code Online (Sandbox Code Playgroud)

我的同事写了这些语句,我一直想知道在使用显式 ID 时限制语句的目的。尽管如此,使用 LIMIT也会出现此警告。
示例 2:

[Warning] Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. 
The statement is …
Run Code Online (Sandbox Code Playgroud)

mysql innodb replication logs mysql-5.5

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