例如,假设我想为 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)
在这两种情况下,我都想摆脱Rd和Avenue。例如,在第一种情况下,我想获得“Homestead”,而在第二个“Pennsylvania”中。不过,并非每个地址都有这样的名称。
我们有一个 ERP 系统,它允许使用聚合(例如SUM(foo))但不允许使用 DISTINCT(例如SUM(DISTINCT foo).
是否可以创建一个聚合函数 ( SUM_DISTINCT),它返回与 相同的结果SUM(DISTINCT foo),所以SUM_DISTINCT(foo) = SUM(DISTINCT foo)?
确定 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 位到 …
是否有任何工具/软件可以将数据库中的所有表结构(列名,其数据类型)导出为 pdf/excel/word.txt 文件。额外的图表导出将增加优势。
如何授予模式中所有类型的 USAGE 权限?对于表和函数,我们可以使用ALL TABLES IN SCHEMA schema_name,但类型不支持:
GRANT { USAGE | ALL [ PRIVILEGES ] }
ON TYPE type_name [, ...]
TO role_specification [, ...] [ WITH GRANT OPTION ]
Run Code Online (Sandbox Code Playgroud)
我知道我可以设置默认权限,但在这种情况下,我已经安装了许多类型的扩展,然后再这样做。
我有一组数组 [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#
所以,我有类似的表:
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)
除了对每种颜色使用单独的查询之外,该怎么做?
谢谢
PostgreSQL 有一个属性LEAKRPOOF,你可以用它来声明一个函数,
LEAKPROOF表示该函数没有副作用。除了返回值外,它不显示有关其参数的任何信息。例如,对于某些参数值而不是其他参数值抛出错误消息的函数,或者在任何错误消息中包含参数值的函数都不是防漏的。这会影响系统对使用该security_barrier选项创建的视图或启用了行级安全性的表执行查询的方式。系统将在用户提供的包含非防漏功能的查询本身的任何条件之前强制执行安全策略和安全屏障视图中的条件,以防止数据意外暴露。标记为防漏的函数和操作符被认为是可信的,并且可以在安全策略和安全屏障视图的条件之前执行。
查询计划器在处理没有副作用的函数时具有更大的灵活性。此类函数称为
LEAKPROOF,并且包括许多简单、常用的运算符,例如许多相等运算符。查询规划器可以安全地允许在查询执行过程中的任何点评估此类函数,因为在用户不可见的行上调用它们不会泄漏有关不可见行的任何信息。此外,不接受参数或未从安全屏障视图传递任何参数的函数不必标记为LEAKPROOF被推下,因为它们永远不会从视图接收数据。相比之下,根据作为参数接收到的值可能抛出错误的函数(例如在溢出或被零除时抛出错误的函数)不是防漏的,并且可以提供关于看不见的行的重要信息如果在安全视图的行过滤器之前应用。
是下面的LEAKRPOOF函数
CREATE FUNCTION foo_leakproof(bar int)
RETURNS int AS $$
SELECT bar;
$$
IMMUTABLE LEAKPROOF
LANGUAGE sql;
Run Code Online (Sandbox Code Playgroud)
曾经有过不同的计划,或者它是否使用与LEAKPROOF缺乏替代方案不同的运行时配置文件运行,
CREATE FUNCTION foo_leaky(bar int)
RETURNS int AS $$
SELECT bar;
$$
IMMUTABLE
LANGUAGE sql;
Run Code Online (Sandbox Code Playgroud) 在CREATE ACCESS METHODPostgreSQL中的DDL上下文中,
CREATE ACCESS METHOD name
TYPE access_method_type
HANDLER handler_function
Run Code Online (Sandbox Code Playgroud)
什么是“访问方法”及其用途的高级描述?
我一直在网上寻找答案,但真的不知道如何正确地制定我想要实现的目标以及是否可能,如果问题听起来很愚蠢,请抱歉。我正在使用 Postgresql。
我每天都有价格数据。
CREATE TEMP TABLE Price (id,Day, Price) AS
VALUES
(1, 1, 40),
(2, 1, 20),
(3, 1, 50),
(4, 1, 10),
(5, 1, 20),
(6, 1, 60),
(7, 2, 10),
(8, 2, 40),
(9, 2, 10),
(10,2, 20),
(11,2, 10);
Run Code Online (Sandbox Code Playgroud)
我想根据日期和价格总和为价格数据分配数字(1、2、3...)。每当总和 > 60 时,总和计算再次开始 + 每次到达新的一天时,总和计算再次开始。例如:
第 1 行 [第 1 天,价格 40] = 1。然后对于第 2 行 [第 1 天,价格 20],价格总和为 20 + 40 < 61,因此第 2 行也被分配给 1。然后对于第 3 行 [第 1 天, price 50] 价格总和是 20 …
postgresql ×8
datatypes ×2
index ×2
mysql ×2
address ×1
aggregate ×1
array ×1
distinct ×1
erd ×1
export ×1
functions ×1
performance ×1
permissions ×1
range-types ×1
rank ×1
sum ×1
terminology ×1