plpgsql相关内容
我有一个 post 表中有列 id,owner 我有另外一个表 action with columns user_id,post_id 表 user with columns id post_id - > post.id 和 user_id - > user.id 也是 post.owner - > user.id 现在我想约束 post(post_id).id!= use
..
我确定这是常见的地方,但Google并没有帮助。我试图在PostgreSQL 9.1中编写一个简单的存储过程,它将从父 cpt 表中删除重复的条目。父表 cpt 由一个子表实验室引用,定义为: CREATE TABLE lab( recid serial NOT NULL, cpt_recid integer, ........ CONSTRAINT cs_cpt FOREIGN
..
如果满足某些条件,如何引发PostgreSQL SQL语句的错误? 我尝试过下面的代码,但出现错误。 创建或替换功能“exec”(text) 返回文本AS $ BODY $ BEGIN EXECUTE $ 1; 返回$ 1; END; $ BODY $ LANGUAGE plpgsql VOLATILE; - 错误:“raise”或附近的语法错误
..
我在PostgreSQL 9.2中有一个plpgsql函数返回一个表。该函数运行多个SELECT,返回与函数相同的列,然后返回这些结果或引发异常,具体取决于某些检查。我可以看到这样做的唯一方法是使用FOR ... LOOP,但是我无法找到一种方便的方式来返回该行。 我想做这样的事情: 创建或替换函数my_function() RETURNS TABLE(column1 integer
..
在Firebird中,我们可以声明自定义异常: CREATE EXCEPTION EXP_CUSTOM_0“异常:自定义异常”; 这些都存储在数据库级。在存储过程中,我们可以像这样引发异常: EXCEPTION EXP_CUSTOM_0; PostgreSQL中有一个等价物吗? 解决方案 不,不是这样。但是你可以提高和维护自己的例外,没有问题: CREATE
..
要放弃阅读整个问题,我的基本问题是: PostgreSQL中是否有一个功能可以转义字符串中的正则表达式字符? 我已经浏览了文档(但也许不够彻底),但无法找到这样的功能。 这是完整的问题: 在PostgreSQL数据库中,我有一个列,其中包含唯一的名称。我还有一个进程定期在这个字段中插入名字,并且为了防止重复,如果需要输入一个已经存在的名称,它将附加一个空格和一个计数结尾的括
..
我使用emacs编辑我的sql代码。我在postgresql plpgsql代码上工作99%的时间。所有我的扩展名为.sql的文件都包含postgresql。我很好奇有一种方法来设置SQL注入默认值而不是ANSI SQL,因为每次打开文件时切换模式非常烦人。 解决方案 通常在emacs中,如果要在每次打开某个模式时更改设置,都可以使用挂钩。与此类似的应该有效: (add-to-lis
..
X-45454545 X- 20045 X-45454545 X- 20045 X-454545 X-454545 X-454545新新新新新新新新新新新新旗200新新新新旗新新旗200新新新旗新新旗200新新新新新新旗200新新新新旗新新旗2001-新新新新旗新新旗200新新新新旗新新旗200新新新新旗新新旗200新新新新旗新1992新新旗新1992新新旗新1992:新新200新200新200新
..
我有责任将代码从sqlite切换到postgres。我遇到的一个疑问是在下面复制。 INSERT INTO group_phones(group_id,phone_name) SELECT g.id,p.name FROM phones AS p,groups as g WHERE g.id IN($ add_groups)AND p.name IN($ phones);
..
我有一个使用临时表的函数,如果存在的话必须被删除。 drop table if exists t_xy; 创建临时表t_xy在提交下降为select ...; 随后我在视图中使用这个功能。该功能在选择正在进行时被多次调用。我喜欢使用“raise notice”命令,因为它几乎是在调试目的中报告函数中任何变量的唯一可靠的方法。问题是我必须搜索巨大的不必要的行,如:
..
我需要将以下tsql函数代码转换成一个plpgsql函数,我完全不知道如何: BEGIN DECLARE @StartDate DATETIME DECLARE @ResultDate DATETIME SET @StartDate = CONVERT(DATETIME,0) SET @ResultDate = CASE @Type WHEN 0 THEN D
..
我需要检查以前的记录元素,以确保查询日期不在开始日期前7天之间的特定范围内。我有以下代码: 创建或替换函数八(日期)返回文本为$$ 声明 r记录; checkDate别名$ 1; 开始 在 中选择*从期间 顺序由startDate 循环 如果(r.startDate和r.endDate之间的checkDate)然后 return q3(r.id); elsif(checkDa
..
我正在尝试在plpgsql中获取以下内容: select day_in_month(2); 预期输出 code> 28 有没有内置的,我在postgres中缺少这样做? 解决方案 SELECT DATE_PART('days', DATE_TRUNC ('month',NOW()) +'1 MONTH':: INTERVAL
..
我最近可以四舍五入到几分钟? 这是我的尝试: DECLARE _stamp ALIAS FOR $ 1; - 时间戳 _nearest ALIAS FOR $ 2; - 分钟(整数) _minutes decimal; _ret时间戳 BEGIN _ret:= date_trunc('minute',_stamp); SELECT EXTRACT(分钟FRO
..
我有一个PostgreSQL函数来计算日期差异: 创建或替换函数testDateDiff()RETURNS int AS $ BODY $ DECLARE startDate TIMESTAMP; DECLARE endDate TIMESTAMP; DECLARE diffDatePart int; BEGIN 选择evt_start_date从事件where evt_i
..
我有一个名为 get_forecast_history(integer,integer)的SQL函数,它有两个参数,一个月和一年。该函数返回一个创建自定义类型: CREATE TYPE fcholder AS(y integer,m integer,product varchar,actual real) ; 函数定义的第一行是: CREATE OR REPLA
..
我有一个表 address_all ,它被几个地址表继承。 address_history 继承自父表 history_all 并保留当前地址信息。我正在创建继承 address_all 表的新表,并将信息从 address_history 复制到新表。 我的存储过程如下所示。当我打电话给我时,我有一些错误。为了更好地解释错误,我使用行号。 1创建或替换功能somefunc() 2
..
我定义了一个函数,总是给我下个星期天的日期。它的工作正常,这里是代码: CREATE FUNCTION nextSunday()RETURNS date AS $$ DECLARE dia_semana INT:= CAST(EXTRACT(DOW FROM CURRENT_DATE)as INT); dia INT:= 7 - dia_semana; BEGIN 返
..
我在表上有一个延迟的 AFTER UPDATE 触发器,当某列被更新时设置为触发。这是一个整数类型,我用作一个计数器。 我不是100%确定,但看起来像是在事务中增加特定列100次,触发器在事务结束时排队等待执行100次。 我希望触发器每行只能安排一次,不管我多少次,这个列增加了。 我可以这样做吗? 或者如果触发的触发器必须排队,无论它们是否重复,可以在触发器的第一次运行期间清除
..
我尝试使用检查序列是否存在postgres(plpgsql)。 创建序列(如果不存在)。两次运行此代码会导致异常: 序列...已存在。 仅当不存在时才能创建序列? 如果序列不存在,则不应写入消息不应该出现错误,所以我不能在这个问题的其他答案中使用存储过程,因为如果顺序存在,它每次写入消息到日志文件。 code> do $$ begin SET search
..