小编Eva*_*oll的帖子

从 bytea 列导出图像文件

我正在尝试从 PostgreSQL 数据库users_data_circulation中导出图像文件。该表有一个photo(bytea) 列。

我的命令:

copy (select encode(photo,'hex') from users_data_circulation limit 1)
    TO '/tmp/imagetest.hext';
Run Code Online (Sandbox Code Playgroud)

在操作系统中:

$> xxd -p -r /tmp/imagetest.hex > /tmp/imagetest.jpg
$> file /tmp/imagetest.jpg
/tmp/imagetest.jpg: ASCII TEXT
Run Code Online (Sandbox Code Playgroud)

我无法打开jpg文件。我怎样才能把这个文件转换成jpg?

devinim@devinimpostgresql:~$ hexdump -C /tmp/image.hex | more
00000000  5c 5c 33 37 37 5c 5c 33  33 30 5c 5c 33 37 37 5c  |\\377\\330\\377\|
00000010  5c 33 34 30 5c 5c 30 30  30 10 4a 46 49 46 5c 5c  |\340\\000.JFIF\\|
00000020  30 30 …
Run Code Online (Sandbox Code Playgroud)

postgresql export postgresql-9.3 bytea

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

如何在没有递归的情况下使用触发器更新同一行上的列?

SQL Server 2012。

每当我的表中的记录发生更改时,我都需要使用当前日期和时间更新列 [LastUpdated]。目前我有:

CREATE TRIGGER Trig_LastUpdated ON Contact AFTER UPDATE
AS
SET NOCOUNT ON

UPDATE ct
SET LastUpdated = GETDATE()
FROM Contact ct
INNER JOIN Inserted i
    ON ct.IDContact = i.IDContact
Run Code Online (Sandbox Code Playgroud)

但这是递归的,我不希望这样,会导致死锁和其他奇怪的事情。我无法全局关闭递归触发器。我看到 INSTEAD OF 触发器是非递归的,但是如果我这样做,我是否必须检查 Inserted 中的所有其他列以查看它是否已更新,或者 SQL Server 是否会为我处理?做到这一点的最佳方法是什么?

trigger sql-server deadlock sql-server-2012 row-modification-time

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

查找使用了哪些函数

我有一个PostgreSQL包含数百个函数的旧数据库模式。我知道其中一些不再使用了,我想删除它们。

查找有时执行哪些过程而哪些不执行的最简单方法是什么?PostgreSQL 中是否有任何关于过程使用的统计数据?

使用的引擎版本为 PostgreSQL 9.5。

postgresql statistics functions postgresql-9.5

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

何时需要 FROM 子句中的 COLUMN 别名?

FROM提供column_alias,SQL 规范调用这些<derived column list>子句。这就是 postgres 文档对它们的描述,

FROM包含别名的项目的替代名称。别名用于简洁或消除自联接(多次扫描同一个表)的歧义。当提供别名时,它完全隐藏了表或函数的实际名称;例如 given FROM foo AS f, 的其余部分SELECT必须将此FROM项目称为fnot foo。如果编写了别名,还可以编写列别名列表来为表的一列或多列提供替代名称。

什么时候需要这些?我什么时候不能只使用 COLUMN 别名?

SELECT t.*
FROM table_name AS t (a,b,c);
Run Code Online (Sandbox Code Playgroud)

对比

SELECT t.col1 AS a, t.col2 AS b, t.col3 AS c
FROM table_name AS t;
Run Code Online (Sandbox Code Playgroud)

这个例子取自@ypercube 选择的答案??这似乎不太有用。

上述上下文中的 FROM 别名不会提供真正的好处,除非您是

  • 依赖部分别名(不别名整个表)
  • 这取决于升序列排序
  • 你的表有超过三列(或者你可以在 from 子句中明确地写出来)。

这样做似乎依赖于常规t.*堆叠的危害,并增加了晦涩。那么什么时候FROM别名有用呢?

postgresql alias

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

如何解析 PostgreSQL 中的地址?

例如,假设我想为 Chicken Ranch 解析这些地址

Chicken Ranch
10511 Homestead Rd
Pahrump, NV 89061

Chicken Ranch
1600 Pennsylvania Avenue
NW Washington, D.C. 20500
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,我都想摆脱RdAvenue。例如,在第一种情况下,我想获得“Homestead”,而在第二个“Pennsylvania”中。不过,并非每个地址都有这样的名称。

postgresql address

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

如何使用隐式 DISTINCT 创建聚合函数,如 sum?

我们有一个 ERP 系统,它允许使用聚合(例如SUM(foo))但不允许使用 DISTINCT(例如SUM(DISTINCT foo).

是否可以创建一个聚合函数 ( SUM_DISTINCT),它返回与 相同的结果SUM(DISTINCT foo),所以SUM_DISTINCT(foo) = SUM(DISTINCT foo)

postgresql aggregate distinct

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

确定 IP 是否在 IPv4 CIDR 块内

确定 IP 是否包含在 CIDR 块中的最快方法是什么?

目前,每当我存储 CIDR 地址时,我还会为起始和结束 IP 地址创建两列。开始和结束 ip 地址已编入索引。如果我想查看哪个网络包含地址,那么我看起来where ip between start_ip and end_ip似乎不太理想。

在我看来,我可以存储正确移位的数字,并且可以匹配类似移位的 IP 地址(@cidr 的情况下为 660510)...

select @cidr, inet_aton(substring_index(@cidr,'/',1))>>(32-substring_index(@cidr,'/',-1));
+---------------+-----------------------------------------------------------------------------+
| @cidr         | inet_aton(substring_index(@cidr,'/',1))>>(32-substring_index(@cidr,'/',-1)) |
+---------------+-----------------------------------------------------------------------------+
| 10.20.30.0/24 |                                                                      660510 |
+---------------+-----------------------------------------------------------------------------+
1 row in set (0.00 sec)

set @ip:='10.20.30.40';
Query OK, 0 rows affected (0.00 sec)

select @ip, inet_aton(@ip)>>(32-substring_index(@cidr,'/',-1));
+-------------+----------------------------------------------------+
| @ip         | inet_aton(@ip)>>(32-substring_index(@cidr,'/',-1)) |
+-------------+----------------------------------------------------+
| 10.20.30.40 |                                             660510 |
+-------------+----------------------------------------------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

为了以索引方式从中受益,我需要知道子网掩码(要移动的位数)。否则,我要么系统地比较位移位(即,盲目位移每个可能的网络掩码(从 0 位到 …

mysql index datatypes range-types

6
推荐指数
2
解决办法
4921
查看次数

Postgres 9.6 将数据库结构导出为pdf

是否有任何工具/软件可以将数据库中的所有表结构(列名,其数据类型)导出为 pdf/excel/word.txt 文件。额外的图表导出将增加优势。

postgresql erd export database-diagrams postgresql-9.6

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

在字段上创建不区分大小写和重音/变音符号不敏感的搜索

我想知道在使用全文搜索时创建一个结合两个函数的索引是否有意义:lower(name)f_unaccent(name)Wheref_unaccent只是我的包装器,使 unaccent 函数不可变。

我确实有一个正在处理的索引:f_unaccent(name)使用varchar_pattern_ops. 我的问题是:组合lowerunaccent函数的索引是否会被 full_text_search 触发lower(f_unaccent(name))

我不知道该lower函数是否对全文搜索算法有用。

postgresql index full-text-search unaccent case-sensitive

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

如何检查数组的多维数组包含数组?

我有一组数组 [ID, TYPE]。

所有值都是整数。数组可以是integer[]jsonb类型。

SELECT array[[442,2],[443,2]]

SELECT to_jsonb(array[[1,2],[3,4]])
Run Code Online (Sandbox Code Playgroud)

如何检查此数组是否包含数组 [443,2]?

编辑 这里描述的检查方法之一。

1# SELECT array[[442,2],[443,2]] @> array[443,2] -- returns True
2# SELECT array[[442,2],[443,2]] @> array[2,443] -- returns True too
Run Code Online (Sandbox Code Playgroud)

对于我的情况,我想得到 False 2#

postgresql array

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