에러발생
Nodejs REST API 서버에서 postgreSQL 에서 삭제쿼리를 다음과 같이 사용합니다. 삭제할 id 타입은 uuid 입니다.
/**
* Delete A JsonLD
* @param {object} req
* @param {object} res
* @returns {void} status code 204
*/
async delete(req, res) {
const id = req.params.jsonldid;
if (!id || !helper.isValidUuid(id))
return res.status(400).send({
message: '삭제할 ID가 올바르지 않습니다.',
});
try {
const deleteQuery = 'DELETE FROM did_json_ld WHERE json_ld_id==$1 RETURNING *';
const { rows } = await db.query(deleteQuery, [id]);
return res.status(204).send(); //204는 response에 data를 넣을 수 없음
} catch (error) {
console.error(error)
return res.status(400).send(error);
}
},
과정에서 다음과 같은 에러발생
{ error: operator does not exist: uuid == unknown
at Connection.parseE (/opt/gopath/src/github.com/hyperledger/bc-platform-did/node_modules/pg/lib/connection.js:614:13)
at Connection.parseMessage (/opt/gopath/src/github.com/hyperledger/bc-platform-did/node_modules/pg/lib/connection.js:413:19)
at Socket.<anonymous> (/opt/gopath/src/github.com/hyperledger/bc-platform-did/node_modules/pg/lib/connection.js:129:22)
at emitOne (events.js:116:13)
at Socket.emit (events.js:211:7)
at addChunk (_stream_readable.js:263:12)
at readableAddChunk (_stream_readable.js:250:11)
at Socket.Readable.push (_stream_readable.js:208:10)
at TCP.onread (net.js:601:20)
name: 'error',
length: 202,
severity: 'ERROR',
code: '42883',
detail: undefined,
hint: 'No operator matches the given name and argument type(s). You might need to add explicit type casts.',
position: '41',
internalPosition: undefined,
internalQuery: undefined,
where: undefined,
schema: undefined,
table: undefined,
column: undefined,
dataType: undefined,
constraint: undefined,
file: 'parse_oper.c',
line: '726',
routine: 'op_error' }
해결방안
/**
* Delete A JsonLD
* @param {object} req
* @param {object} res
* @returns {void} status code 204
*/
async delete(req, res) {
const id = req.params.jsonldid;
if (!id || !helper.isValidUuid(id))
return res.status(400).send({
message: '삭제할 ID가 올바르지 않습니다.',
});
try {
const deleteQuery = 'DELETE FROM did_json_ld WHERE json_ld_id=$1 RETURNING *';
const { rows } = await db.query(deleteQuery, [id]);
return res.status(204).send(); //204는 response에 data를 넣을 수 없음
} catch (error) {
console.error(error)
return res.status(400).send(error);
}
},
delete 함수에서 deleteQuery 를 `DELETE FROM did_json_ld WHERE json_ld_id==$1 RETURNING *` 에서`DELETE FROM did_json_ld WHERE json_ld_id=$1 RETURNING *` 으로 수정했습니다.
UUID는 텍스트 문자열이 아닌 바이너리 유형으로 PostgreSQL에 저장되므로 비교할 때 like 가 아닌 '==' 가 아닌 '=' 로 비교되어야 합니다.
'DB > PostgreSQL' 카테고리의 다른 글
PostgreSQL 에러해결: error: permission denied for relation users (0) | 2020.12.30 |
---|---|
PostgreSQL 이란 (0) | 2017.12.28 |