본문 바로가기

DB/PostgreSQL

PostgreSQL 에러해결: error: operator does not exist: uuid == unknown

에러발생

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