사용자 정의 유형이 PostgreSQL에 이미 있는지 확인

Shihab Sikder 2023년6월20일
  1. PostgreSQL에서 사용자 정의 유형 생성
  2. 사용자 정의 유형이 이미 있는지 확인하고 있으면 삭제
사용자 정의 유형이 PostgreSQL에 이미 있는지 확인

사용자 정의 유형이 이미 정의되어 있는지 여부를 exists 쿼리를 사용하여 확인할 수 있습니다. 또한, 우리는 다른 일을 할 수 있습니다. 유형이 존재하는 경우 유형을 삭제하십시오.

PostgreSQL에서 사용자 정의 유형 생성

사용자 정의 유형은 C 및 C++의 struct와 비슷합니다. 다양한 유형의 데이터를 포함하는 데이터 유형을 생성할 수 있습니다.

다음은 Postgres 공식 문서의 예입니다.

typedef struct Complex {
    double      x;
    double      y;
} Complex;

실수 부분과 비현실 부분이 있는 복소수를 저장하고 싶다고 가정해 보겠습니다. 이들은 x와 y에 적절하게 저장되어야 했습니다.

테이블에 두 개의 열을 추가하는 대신 Complex 데이터 유형을 사용할 수 있습니다.

여기에 다음 표가 있습니다.

create table Users (
  id INT,
  name VARCHAR(50),
  gender VARCHAR(50),
  age INT
);

-- Perform Some insert command
insert into Users values (1, 'Tymothy Blezard', 'Polygender', 21);
insert into Users values (2, 'Carlynne Renak', 'Female', 30);
insert into Users values (3, 'Hewitt Mylechreest', 'Male', 26);
insert into Users values (4, 'Griswold Geer', 'Male', 30);
insert into Users values (5, 'Kelley Vines', 'Female', 22);
insert into Users values (6, 'Ted Haizelden', 'Male', 27);
insert into Users values (7, 'Bonita Glewe', 'Female', 27);
insert into Users values (8, 'Edgar Hambers', 'Male', 22);
insert into Users values (9, 'Johnathan Dwelley', 'Male', 22);
insert into Users values (10, 'Fritz Rylance', 'Male', 22);
-- Insertion

SELECT * from Users;

Output:

 id |        name        |   gender   | age
----+--------------------+------------+-----
  1 | Tymothy Blezard    | Polygender |  21
  2 | Carlynne Renak     | Female     |  30
  3 | Hewitt Mylechreest | Male       |  26
  4 | Griswold Geer      | Male       |  30
  5 | Kelley Vines       | Female     |  22
  6 | Ted Haizelden      | Male       |  27
  7 | Bonita Glewe       | Female     |  27
  8 | Edgar Hambers      | Male       |  22
  9 | Johnathan Dwelley  | Male       |  22
 10 | Fritz Rylance      | Male       |  22

(10 rows)

이제 Person 유형을 생성합니다. users 테이블에서 여러 값을 갖고 싶다고 가정해 보겠습니다. 함수의 반환 유형으로 Person을 사용할 수 있습니다.

유형 Person 작성:

CREATE TYPE Person AS (
    id INT,
    name VARCHAR,
    age  INT
);

이제 사용자 ID를 입력으로 사용하고 ID, 이름 및 나이를 반환하는 함수를 만들어 보겠습니다. Person을 반환합니다.

CREATE OR REPLACE FUNCTION get_person (input_id int)
    RETURNS Person AS
$$
SELECT
    id,
    name,
    age
FROM
    users
WHERE
    users.id = input_id ;
$$
LANGUAGE SQL;
 id |     name      | age
----+---------------+-----
 10 | Fritz Rylance |  22
(1 row)

사용자 정의 유형이 이미 있는지 확인하고 있으면 삭제

Postgres에는 위에서 생성한 Person 유형이 있습니다. 이제 유형이 있는 경우 유형을 삭제합니다.

다음은 한 가지 방법입니다.

DROP TYPE IF EXISTS Person;

Error:

ERROR:  cannot drop type person because other objects depend on it
DETAIL:  function get_person(integer) depends on type person
HINT:  Use DROP ... CASCADE to drop the dependent objects too.

여기서는 다른 기능이 사용하고 있기 때문에 오류가 표시되었습니다. 따라서 계단식 삭제를 수행해야 합니다.

따라서 이것은 유형이 Postgres에 있고 사용되었음을 나타냅니다.

유형이 존재하는지 여부를 감지하는 또 다른 방법은 pg_type 테이블을 쿼리하는 것입니다.

select exists (select 1 from pg_type where typname = 'person');

Person이라는 사용자가 만든 유형이 있으면 true를 반환합니다. 출력은 다음과 같습니다.

 exists
--------
 t
(1 row)

PostgreSQL 사용자 정의 유형에 대한 자세한 내용은 이 공식 문서를 참조하십시오.

Shihab Sikder avatar Shihab Sikder avatar

I'm Shihab Sikder, a professional Backend Developer with experience in problem-solving and content writing. Building secure, scalable, and reliable backend architecture is my motive. I'm working with two companies as a part-time backend engineer.

LinkedIn Website