是否有区别:
CREATE TABLE p(
product_no integer,
name text UNIQUE,
price numeric
);
Run Code Online (Sandbox Code Playgroud)
和:
CREATE TABLE p(
product_no integer,
name text,
price numeric
);
CREATE UNIQUE INDEX customername
ON p
USING btree
(name COLLATE pg_catalog."default");
Run Code Online (Sandbox Code Playgroud)
在这两种情况下名称都是唯一的吗?当索引唯一时意味着什么?
编辑:Postgres 唯一约束与索引没有回答我的问题。它考虑了 FK 的情况。我的问题与 FK 无关。我只想知道这两个操作在这个不涉及 FK 的例子中是否等效。
我需要编写一个函数来检查一个数字是否在10%另一个数字的范围内.
我写了这个函数:
def IsCloseEntough(num1, num2 ):
percent = num1/100
if num1-percent < num2 and num2< num1+percent:
return True;
else:
return False;
Run Code Online (Sandbox Code Playgroud)
它返回True如果 num1-10% of num1 < num2 < num1+10%.这解决了问题,但感觉这个代码不是非常"Python Like".有没有办法让它更简单?
我有以下查询:
select case when count(*)>0 then true else false end
from tab
where param in ('a','b') and position('T' in listofitem)>0
Run Code Online (Sandbox Code Playgroud)
这将检查'T'列中是否存在,listofitem如果计数是> 0.基本上它是搜索子字符串.
这在私人案件中运作良好.不过我的真实情况是我text[]调用了sub_array多个值进行检查.如何修改查询以处理sub_array类型?我更喜欢在查询而不是带LOOP的函数中使用它.
我真正需要的是:
select case when count(*)>0 then true else false end
from tab
where param in ('a','b') and position(sub_array in listofitem)>0
Run Code Online (Sandbox Code Playgroud)
这是因为sub_array 类型不起作用Text[]
我有一个包含电子邮件字段和 30K 记录的表。我发现许多用户输入了无效的电子邮件地址,其中包含以下字符:
<,@@等...
PostgreSQL 有没有办法运行一个查询来显示所有无效的电子邮件地址?我知道如何用正则表达式做到这一点
[a-z,A-z,0-9,'.']*@[a-z,A-z,0-9]*.com
Run Code Online (Sandbox Code Playgroud)
[a-z,A-z,0-9,'.']*@[a-z,A-z,0-9]*.xx|xxx.xx 对于类似.co.uk或这样的地址.org.it
如何在查询中完成此操作?我只想获取所有无效地址的列表,以便我可以要求修复他们的记录。
我知道我可以做plpgsql:RAISE Exception '%', variable_name;
但我需要用两个值引发异常:
raise exception 'values %, % are incorrect please check.'(val1,val2);
Run Code Online (Sandbox Code Playgroud)
无论我尝试什么,我仍然得到syntax error
手册没有说明如何做到这一点: https ://www.postgresql.org/docs/current/static/plpgsql-errors-and-messages.html
我该如何正确设置?
我知道我有一个列"fortyid"的表,但我不记得它是哪个表,我在数据库中有350个表.有没有办法找到所有以"fortyid"为列的表格?(与类型无关)
我有一个用 plpythonu 编写的函数。
CREATE OR REPLACE FUNCTION temp(t_x integer[])
RETURNS void AS
$BODY$
.
.
.
x=plpy.execute("""select array_to_string(select id from A where id=any(array%s) ), ',')"""%t_x)
Run Code Online (Sandbox Code Playgroud)
在某些情况下,当 t_x 为空时,我会收到错误消息:
错误:无法确定空数组的类型
我如何解决它?
我按顺序列出了这个项目表:
orderitemid orderid itemid quantity price createdate
1 1 12 5 15.5 2016-12-04 11:35:02.06629
2 1 17 5 13.2 2016-12-04 11:32:02.06629
3 2 12 2 12.5 2016-12-05 11:35:02.06629
4 2 17 1 12.6 2016-12-05 11:35:02.06629
5 2 18 15 14.5 2016-12-04 11:35:02.06629
6 3 12 45 3 2015-12-04 11:35:02.06629
Run Code Online (Sandbox Code Playgroud)
我有一个查询,它给出了每个项目的最新顺序,所以:
select distinct on (itemid) *
from orderitems
order by itemid,createdate
Run Code Online (Sandbox Code Playgroud)
这给了:
orderitemid orderid itemid quantity price createdate
3 2 12 2 12.5 2016-12-05 11:35:02.06629
4 2 17 1 12.6 2016-12-05 …Run Code Online (Sandbox Code Playgroud)