Я пытаюсь выполнить этот запрос, чтобы вставить новую строку в таблицу Users из моего кода C, используя PQexec() (libpq)
INSERT INTO Users
VALUES ((
SELECT MIN(s.id)
FROM generate_series(1,(
SELECT GREATEST(MAX(Id) + 1,1) FROM Users
)) AS s(id)
WHERE NOT EXISTS (SELECT 1 FROM Users WHERE Id = s.id))
, 'Tester', 27)
RETURNING Id;
Он выполняет то, что мне нужно, когда я запускаю его в терминале psql, но из C он возвращает
Error executing query: ERROR: relation "users" does not exist
Я проверил статус подключения, и это удалось, используя того же пользователя, к которому я подключаюсь с терминала. Почему он не может найти таблицу пользователей?
РЕДАКТИРОВАТЬ: добавление соединения C-кода:
sprintf(connect_param,"host=address dbname=%s user=%s password=%s",
USERNAME, USERNAME, PASSWORD);
conn = PQconnectdb(connect_param);
Запрос:
sprintf(cmd, "INSERT INTO Users "
"VALUES (( "
"SELECT MIN(s.id) "
"FROM generate_series(1,( "
"SELECT GREATEST(MAX(Id) + 1,1) FROM Users "
" )) AS s(id) "
"WHERE NOT EXISTS (SELECT 1 FROM Users WHERE Id = s.id)) "
" , \'%s\', %d) "
"RETURNING Id;", Name, Age);
res = PQexec(conn,cmd);
USERNAME
в коде, который вы разместили, один раз дляdbname=%s
и один раз дляuser=%s
. - person Ian Abbott   schedule 15.12.2016SELECT GREATEST(MAX(Id) + 1,1) FROM Users
противSELECT GREATEST(MAX(Users.Id) + 1,1)
. - person Ian Abbott   schedule 15.12.2016