postgresql - 尝试使用 plpgsql 将数据插入时间戳字段时出错

标签 postgresql timestamp plpgsql

我有以下 plpgsql 函数:

CREATE OR REPLACE FUNCTION test_func(OUT pid bigint)
    RETURNS bigint AS
  $BODY$
    DECLARE
      current_time timestamp with time zone = now();
    BEGIN
      INSERT INTO "TEST"(
        created)
        VALUES (current_time) RETURNING id INTO pid;
    END
  $BODY$
  LANGUAGE plpgsql;

select * from test_func();

上面给出了一个错误:

column "created" is of type timestamp with time zone but expression is of type time with time zone

没有函数的插入查询:

INSERT INTO "TEST"(
        created)
        VALUES (now()) RETURNING id INTO pid;

或者如果 now() 直接使用而不定义变量,它就可以工作。

最佳答案

CURRENT_TIMEreserved word (和一个特殊的功能),你不能用它作为变量名。此处不需要变量:

CREATE OR REPLACE FUNCTION test_func(OUT pid bigint) AS
$func$
BEGIN
   INSERT INTO "TEST"(created)
   VALUES (now())
   RETURNING id
   INTO   pid;
END
$func$
LANGUAGE plpgsql;

now() 是一个 STABLE 函数。它不会在同一笔交易中发生变化。无需将结果捕获到变量中。

关于postgresql - 尝试使用 plpgsql 将数据插入时间戳字段时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30984498/

相关文章:

sql - 如何计算所有列的平均值?

oracle - 时间戳和企业架构师 (sparx)

postgresql - 在每月的特定日期运行 PostgreSQL 函数

xml - 将 xml 转换为表 postgresql 9.2 时出错

sql - 如何在查询的 AS 部分包含一个函数?

python - Homebrew 无法安装 postgresql; python 64位错误

javascript - 如何在不使用任何库的情况下从前端和后端连接到数据库(PostgreSQL)

python - Django 测试错误 "Permission denied to create database"- 使用 Heroku Postgres

java - SimpleDateFormat 中是否有自 1970 年以来的毫秒数字母?

php - 如何将 LDAP 时间戳转换为 Unix 时间戳