【发布时间】:2018-03-01 07:55:05
【问题描述】:
我有 2 张桌子 type 和 name。我试图通过一个函数用 json_populate_record() 插入这些。收到以下错误:
first argument of json_populate_record must be a row type
表 type 是使用以下方法创建的:
CREATE TABLE IF NOT EXISTS "type" (
"id" TEXT NOT NULL,
"value" TEXT NOT NULL,
PRIMARY KEY ("id"),
CHECK ("id"<>'' AND "value"<>'')
);
CREATE INDEX IF NOT EXISTS "idx_type_value"
ON "type" ("value");
CREATE OR REPLACE FUNCTION "type_insertone" (
IN _a JSON
) RETURNS VOID AS $$
BEGIN
INSERT INTO "type" SELECT * FROM json_populate_record(NULL::"type", _a);
END;
$$ LANGUAGE plpgsql;
表 name 是使用以下方法创建的:
CREATE TABLE IF NOT EXISTS "name" (
"id" TEXT NOT NULL,
"value" TEXT NOT NULL,
PRIMARY KEY ("id"),
CHECK ("id"<>'' AND "value"<>'')
);
CREATE INDEX IF NOT EXISTS "idx_name_value"
ON "name" ("value");
CREATE OR REPLACE FUNCTION "name_insertone" (
IN _a JSON
) RETURNS VOID AS $$
BEGIN
INSERT INTO "name" SELECT * FROM json_populate_record(NULL::"name", _a);
END;
$$ LANGUAGE plpgsql;
当用{id: 'x', 'value': 'x'} 调用type_insertone() 时,它可以工作。
但是当我对name_insertone() 做同样的事情时,它不起作用!
我在想是否有可能在创建表之前创建函数,这可能导致它不知道表name,但我认为不是这样。
我不知道我应该在这里尝试什么。我还检查了name 不是保留关键字,type 也是。
【问题讨论】:
标签: sql postgresql plpgsql postgresql-9.6 node-postgres