Надеясь, что свежая пара глаз может определить, что я делаю неправильно, или указать, где я могу исследовать мою проблему дальше. Я создаю функцию, которая включает параметр, переданный как строка json.Postgresql - необъяснимая синтаксическая ошибка в json-операнде
Использование json-оператора ->
для доступа к элементу данных в json сообщает о синтаксической ошибке, которая меня пугает. Вот моя функция (вкратце):
CREATE OR REPLACE FUNCTION createUser(
email_f character varying(50),
mobile_f integer,
salt_f character(16),
hash_f character(16),
encryption_f smallint,
iterations_f smallint,
fnam_f character varying(16),
lnam_f character varying(16),
nickname_f character varying(16),
fb_f json
) RETURNS json AS $$
/* Example /me response from FB
{
id: "101...", email: "[email protected]", verified: true,
name: "test testlast", first_name: "test", last_name: "testlast", gender: "male",
link: "https://www.facebook.com/app_scoped_user_id/101.../",
locale: "en_US", timezone: -5, updated_time: "2014-07-01T14:48:27+0000"
}
*/
BEGIN
IF fnam_f IS NULL THEN
SET fnam_f = fb_f->'first_name';
SET lnam_f = fb_f->'last_name';
END IF;
INSERT INTO users (email,mobile,salt,hash,encryption,iteration,username,fbid)
SELECT email_f,mobile_f,salt_f,hash_f,encryption_f,iteration_f,nickname_f,null
RETURNING row_to_json(row(*));
END;
$$ LANGUAGE 'plpgsql';
Выполнение этого запроса возвращает ошибку синтаксиса:
ERROR: syntax error at or near "->"
LINE 24: SET fnam_f = fb_f->'first_name';
Я нахожу это заблуждение, потому что я, кажется, использует JSon операнд правильно в соответствии с документацией: http://www.postgresql.org/docs/9.3/static/functions-json.html
Благодаря
Опубликовать вывод 'select version()' –