小编Eva*_*oll的帖子

查找使用了哪些函数

我有一个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
查看次数

SQL Server 中标识符的尾随美元符号“$”有何意义?

转储一些内部视图,例如sys.system_objects在此问题中完成的我看到某些标识符以美元符号结尾$

CREATE VIEW sys.system_objects AS
    -- cutout
    FROM sys.sysschobjs$ o -- XXX: HERE
    LEFT JOIN sys.syspalnames n
    -- not relevant
Run Code Online (Sandbox Code Playgroud)

而且,这也有效

SELECT * FROM sys.sysschobjs$;
Run Code Online (Sandbox Code Playgroud)

即使只是按照惯例,这里的规则是什么?我应该在我自己的代码中使用它吗?

搜索我看到很多关于 Excel(无关)和 Money 文字(也无关)的内容。

我发布了另一个我认为无关的问题,但我相信这个终端$会对此有更多的了解。请随意检查该问题以获取一些混淆的示例

sql-server naming-convention database-internals

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

什么是 SQL Server“GDR”?

Microsoft 提供主机两个存储库,

在这种情况下,GDR 代表什么。

你可以在微软网站上找到它,但他们没有解释

SQL Server 2016 SP1 的 GDR 更新包

你也可以在这里看到。

sql-server linux terminology update

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

规范是否允许 INSERT 上的列数不匹配?

我只是想知道如果您插入列数少于表提供列数,规范是否允许在INSERT语句中排除 column-list 子句我看到 PostgreSQL 有,而 MySQL 和 SQL Server 没有。

使用 PostgreSQL,(有效)

# CREATE TABLE t (a int, b int);
CREATE TABLE
# INSERT INTO t VALUES (42);  -- (b is set to DEFAULT)
INSERT 0 1
Run Code Online (Sandbox Code Playgroud)

使用 SQL Server,我得到

Msg 213 Level 16 State 1 Line 1
Column name or number of supplied values does not match table definition.
Run Code Online (Sandbox Code Playgroud)

使用 MariaDB,我得到

Column count doesn't match value count at row …
Run Code Online (Sandbox Code Playgroud)

postgresql mariadb sql-server insert sql-standard

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

如何获取每组最新2条记录

所以,我有类似的表:

sn color value
1  red   4
2  red   8
3  green 5
4  red   2
5  green 4
6  green 3
Run Code Online (Sandbox Code Playgroud)

现在我需要每种颜色的最新 2 行,例如:

2  red   8
4  red   2
5  green 4
6  green 3
Run Code Online (Sandbox Code Playgroud)

除了对每种颜色使用单独的查询之外,该怎么做?

谢谢

mysql greatest-n-per-group rank

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

MySQL / MariaDB 中的十六进制和二进制文字?

我的另一个问题仅与&字符串类型有关。这个问题是关于用B''或构造的二进制字符串文字X''

MariaDB 支持二进制和十六进制文字,

SELECT X'01', B'00000001', X'01' = B'00000001';
| X'01' | B'00000001' | X'01' = B'00000001' |
+-------+-------------+---------------------+
|    X  |       X     |                   1 |

* Using `X` because StackExchange strips the non-printable character.
Run Code Online (Sandbox Code Playgroud)

然而,有趣的是,当我通过二元运算符传递它们时,它们并不相同

SELECT X'01' & B'00000001', X'01' & X'01', B'00000001' & B'00000001';
| X'01' & B'00000001' | X'01' & X'01' | B'00000001' & B'00000001' |
+---------------------+---------------+---------------------------+
|                   0 |             0 |                         1 |
Run Code Online (Sandbox Code Playgroud)

所以,如果他们是位字符串处理它没有任何意义(因为其结果应该是1,如果他们作为字符串处理,因为实际的字符串,它是没有意义的 …

mysql mariadb mariadb-10.1 bit-manipulation

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