Oracle® 사용자를 PostgreSQL용 Cloud SQL로 마이그레이션: 데이터 유형, 사용자, 테이블

이 문서는 PostgreSQL용 Cloud SQL 버전 12로 Oracle® 11g/12c 데이터베이스 마이그레이션 계획 및 수행과 관련된 핵심 정보와 지침을 제공하는 시리즈의 일부입니다. 이 시리즈에는 소개 설정 부분 외에도 다음 부분이 포함됩니다.

데이터 유형

PostgreSQL용 Cloud SQL에서는 Oracle에서 제공하는 데이터 유형과 완전히 동일하거나 유사한 여러 데이터 유형을 제공합니다. 다음 표에는 Oracle 기본 데이터 유형과 해당 PostgreSQL용 Cloud SQL 데이터 유형을 비교한 가장 일반적인 PostgreSQL 데이터 유형이 나와 있습니다. 여기서 데이터 유형이 지원되지 않는 경우 다른 데이터 유형이 나열됩니다.

PostgreSQL용 Cloud SQL 12 기본 데이터 유형

PostgreSQL용 Cloud SQL 데이터 유형 계열 PostgreSQL용 Cloud SQL 데이터 유형 이름 데이터 유형 사양
문자열/문자 CHAR(n) 정확히 n자를 저장합니다. CHARACTER(n) 별칭입니다.
CHARACTER(n) 정확히 n자를 저장합니다.
VARCHAR(n) 가변 문자 수를 최대 n자까지 저장합니다. CHARACTER VARYING(n) 별칭입니다.
CHARACTER VARYING(n) 가변 문자 수를 최대 n자까지 저장합니다.
TEXT 문자 수 상한을 지정할 필요가 없는 VARCHAR의 특정 변형입니다. 저장할 수 있는 가장 긴 문자 문자열은 1GB입니다(모든 문자열 문자 데이터 유형에 동일).
숫자 SMALLINT 최솟값은 -32768이고 최댓값은 32767입니다.
INTEGER 최솟값은 -2147483648이고 최댓값은 2147483647입니다.
BIGINT 최솟값은 -2^63이고 최댓값은 2^63-1입니다.
REAL 단일 정밀도 부동 소수점 수(4바이트)입니다.
DOUBLE PRECISION 배정밀도 부동 소수점 수(8바이트)입니다.
DECIMAL (p,s) 전체 자릿수가 p이고 소수점 자릿수가 s인 값을 저장할 수 있습니다.
NUMERIC(p,s) 전체 자릿수가 p이고 소수점 자릿수가 s인 값을 저장할 수 있습니다.
SMALLSERIAL 자동 증분 정수입니다. 최솟값은 1이고 최댓값은 32767입니다.
SERIAL 자동 증분 정수입니다. 최솟값은 1이고 최댓값은 2147483647입니다.
BIGSERIAL 자동 증분 정수입니다. 최솟값은 1이고 최댓값은 2^63-1입니다.
금융 MONEY 고정 소수부 정밀도의 통화 금액입니다. 최솟값은 -92233720368547758.08이고 최댓값은 +92233720368547758.07입니다.
날짜 및 시간 DATE - 시간 부분 없이 날짜 부분만 있는 값입니다.
- 지원 범위는 4713 BC~5874897 AD로, 해상도는 1일입니다.
TIMESTAMP (p) - 날짜 및 시간 부분이 모두 포함된 값입니다.
- 지원되는 범위는 4713 BC~294276 AD입니다.
- 해상도는 p 소수부 자리수(초 단위)입니다(지정되지 않은 경우 1마이크로초).
TIMESTAMP (p) with time zone - 날짜, 시간, 시간대를 모두 포함하는 값입니다.
- 지원되는 범위는 4713 BC~294276 AD입니다.
- 해상도는 p 소수부 자리수(초 단위)입니다(지정되지 않은 경우 1마이크로초).
TIME (p) - 시간 부분은 있지만 날짜 부분이 없는 값입니다.
- 지원되는 범위는 00:00:00~24:00:00입니다.
- 해상도는 p 소수부 자리수(초 단위)입니다(지정되지 않은 경우 1마이크로초).
TIME (p) with time zone - 시간과 시간대는 있지만 날짜 부분이 없는 값입니다.
- 지원되는 범위는 00:00:00~24:00:00입니다.
- 해상도는 p 소수부 자리수(초 단위)입니다(지정되지 않은 경우 1마이크로초).
INTERVAL (p) - 시간 간격
- 지원되는 범위는 -178000000~178000000입니다.
- 해상도는 p 소수부 자리수(초 단위)입니다(지정되지 않은 경우 1마이크로초).
JSON JSON 텍스트 JSON 데이터
JSONB 바이너리 JSON 데이터입니다.
XML XML XML 데이터입니다.

기하
GEOMETRY 다음 데이터 모델을 사용할 시기를 지정하는 열 유형입니다.
POINT (x,y) 값입니다.
LINE Ax + By + C = 0, A, B가 모두 0이 아닌 (A, B, C) 튜플입니다.

또는

다음 형식의 1포인트 및 2포인트:

[ ( x1 , y1 ) , ( x2 , y2 ) ]
( ( x1 , y1 ) , ( x2 , y2 ) )
( x1 , y1 ) , ( x2 , y2 )
x1 , y1 , x2 , y2

LSEG 선 세그먼트 ((x1,y1),(x2,y2))입니다.
BOX 직사각형 상자 ((x1,y1),(x2,y2))입니다.
PATH 포인트 ((x1,y1),...)의 시퀀스입니다.
POLYGON 실제로 폐쇄된 경로로 표시되는 일련의 점입니다.
CIRCLE (x,y),r)(중심점 및 반경)
논리 BOOLEAN - true, false 또는 null 값을 포함합니다.
- yes, true, t, on, 1과 같은 값을 true로 사용합니다.
비트/바이너리 데이터 BIT (n) 고정 길이 비트 문자열
BYTEA 바이너리 데이터/바이트 배열입니다.
네트워크 주소 유형 CIDER IPv4 및 IPv6 네트워크입니다.
INET IPv4 및 IPv6 호스트와 네트워크입니다.
MACADDR MAC 주소입니다.
MACADDR8 MAC 주소(EUI-64 형식)입니다.
기타 PG_LSN PostgreSQL용 Cloud SQL 로그 시퀀스 번호입니다.
TSQUERY 텍스트 검색어
TSVECTOR 텍스트 검색 문서
TXID_SNAPSHOT 사용자 수준 트랜잭션 ID 스냅샷
UUID 범용 고유 식별자

Oracle에서 PostgreSQL용 Cloud SQL 데이터 유형 변환

Oracle 데이터 유형 계열 Oracle 데이터 유형 이름 Oracle 데이터 유형 사양 Oracle과 동등한 PostgreSQL용 Cloud SQL PostgreSQL용 Cloud SQL 해당/대체
문자열/문자 CHAR(n) 최대 크기는 2,000바이트입니다. CHAR(n)
CHARACTER(n) 최대 크기는 2,000바이트입니다. CHARACTER(n)
NCHAR(n) 최대 크기는 2,000바이트입니다. 아니요 CHAR(n)
VARCHAR(n) 최대 크기는 2,000바이트입니다. VARCHAR(n)
NCHAR VARYING(n) 4,000바이트의 가변 길이 UTF-8 문자열
최대 크기입니다.
아니요 CHARACTER VARYING(n)
VARCHAR2(n) 11g 최대 크기는 4,000바이트입니다(PL/SQL의 경우 최대 크기는 32KB). 예* VARCHAR(n)
VARCHAR2(n)
12g
최대 크기는 32,767바이트 MAX_STRING_SIZE= EXTENDED입니다. 예* VARCHAR(n)
NVARCHAR2(n) 최대 크기는 4,000바이트입니다. 아니요 VARCHAR(n)
LONG 최대 크기는 2GB입니다. 예* TEXT
RAW(n) 최대 크기는 2,000바이트입니다. 예* BYTEA
LONG RAW 최대 크기는 2GB입니다. 예* BYTEA
숫자 NUMBER 부동 소수점 수입니다. 예* NUMERIC(p,s)
NUMBER(*) 부동 소수점 수입니다. 예* DOUBLE PRECISION
NUMERIC(p,s) 가능한 정밀도 범위는 1~38입니다. NUMERIC(p,s)
FLOAT(p,s) 부동 소수점 수입니다. 예* DOUBLE PRECISION
DEC(p,s) 고정 소수점 수입니다. DEC(p,s)
DECIMAL(p,s) 고정 소수점 수입니다. DECIMAL(p,s)
INT 38자릿수 정수입니다. INT
INTEGER 38자릿수 정수입니다. INTEGER
SMALLINT 38자릿수 정수입니다. SMALLINT
REAL 부동 소수점 수입니다. 예* DOUBLE PRECISION
DOUBLE PRECISION 부동 소수점 수입니다. DOUBLE PRECISION
날짜 및 시간 DATE 날짜 및 시간 데이터(연도, 월, 일, 시간, 분, 초)를 저장합니다. 예* TIMESTAMP(0)
TIMESTAMP(p) 분할 부분이 포함된 날짜 및 시간입니다. TIMESTAMP(p)
TIMESTAMP(p) WITH TIME ZONE 분할 부분과 시간대가 포함된 날짜 및 시간입니다. TIMESTAMP (p) WITH TIME ZONE
INTERVAL YEAR(p) TO MONTH 날짜 간격입니다. 예* INTERVAL YEAR TO MONTH
INTERVAL DAY(p) TO SECOND(s) 날짜 및 시간 간격입니다. 예* INTERVAL DAY TO SECOND(s)
논리 BOOLEAN TRUE, FALSE, NULL 값 데이터베이스 테이블 열에 할당될 수 없습니다. BOOLEAN
XML XMLTYPE XML 데이터입니다. 아니요 XML
LOB BFILE 최대 크기가 4GB인 바이너리 파일에 대한 포인터입니다. 아니요 VARCHAR(255)
CLOB 최대 파일 크기가 4GB인 문자 대형 객체입니다. 아니요 TEXT
BLOB 최대 크기가 4GB인 바이너리 대형 객체입니다. 아니요 BYTEA
NCLOB 최대 파일 크기가 4GB인 가변 길이 유니코드 문자열입니다. 아니요 TEXT
ROWID ROWID 물리적 행 주소입니다. 아니요 CTID
UROWID(n) 논리 행 주소의 범용 행 ID입니다. 아니요 CTID
공간 SDO_ GEOMETRY 공간 객체의 도형 설명입니다. Postgres에는 point, line, path, polygon, circle 등 다양한 도형 유형이 있습니다.
SDO_TOPO_ GEOMETRY 토폴로지 도형을 설명합니다. PostGIS는 널리 사용되는 Postgres 확장 프로그램으로, 여러 가지 토폴로지 유형을 제공합니다.
SDO_GEORASTER 래스터 그리드 또는 이미지 객체가 단일 행에 저장됩니다. PostGIS는 널리 사용되는 Postgres 확장 프로그램으로, 래스터 파일을 데이터베이스에 로드하는 도구를 제공합니다.
미디어 유형 ORDDicom Digital Imaging and Communications in Medicine(DICOM) 파일 저장 및 관리를 지원합니다. 예(해결 방법 있음) Postgres는 대형 객체를 저장할 수 있도록 바이너리 유형 bytea를 제공합니다.
ORDDoc 모든 유형의 미디어 유형의 저장 및 관리를 지원합니다. 예(해결 방법 있음) Postgres는 대형 객체를 저장할 수 있도록 바이너리 유형 bytea를 제공합니다.
ORDImage 이미지 데이터의 저장 및 관리를 지원합니다. 예(해결 방법 있음) Postgres는 대형 객체를 저장할 수 있도록 바이너리 유형 bytea를 제공합니다.
ORDVideo 비디오 데이터의 저장 및 관리를 지원합니다. 해결 방법 Postgres는 대형 객체를 저장할 수 있도록 바이너리 유형 bytea를 제공합니다.

* PostgreSQL용 Cloud SQL의 해당 데이터 유형 대부분은 Oracle과 호환되지만 다른 이름을 사용합니다.

사용자 정의 유형

Oracle은 사용자 정의 유형(UDT)을 PL/SQL을 사용하여 관리되는 OBJECT TYPES로 표시합니다. 사용자 정의 유형을 사용하면 기본 제공되는 Oracle 데이터 유형 목록을 기준으로 하고 이로부터 확장되는 애플리케이션 전용의 복합 데이터 유형을 사용자가 만들 수 있습니다.

Oracle 사용자 정의 유형 Oracle 개요 또는 구현 PostgreSQL용 Cloud SQL 지원 PostgreSQL용 Cloud SQL 해당 또는 대체 솔루션
추상 데이터 유형(ADT) CREATE TYPE ADT_DEMO AS OBJECT (
ID NUMBER(6),
NAME VARCHAR2(20)
);
부분적으로 다른 구문 사용 PostgreSQL용 Cloud SQL 복합 유형은 속성 이름과 데이터 유형의 목록으로 지정됩니다.

CREATE TYPE ADT_DEMO AS
(
ID NUMERIC(6),
NAME VARCHAR(20)
);

VARRAY 유형 CREATE TYPE VARRAY_DEMO AS VARRAY (5) OF VARCHAR2(25); 아니요 해결 방법으로, PostgreSQL용 Cloud SQL을 사용하여 열을 배열로 정의할 수 있습니다.

CREATE TABLE VARRAY_TABLE (
NAME VARCHAR(25)[]
);

중첩 테이블 유형 CREATE TYPE NTT_DEMO AS OBJECT (
ID NUMBER(6),
NAME VARCHAR2(20)
) ;
CREATE TYPE NTT_TABLE AS TABLE OF NTT_DEMO;
아니요 해결 방법으로, PostgreSQL용 Cloud SQL에서 복합 유형과 배열 열 정의 조합을 사용하여 Oracle의 중첩 테이블 유형과 비슷한 기능을 수행합니다.

CREATE TYPE NTT_DEMO AS
(
ID NUMERIC(6),
NAME VARCHAR(20)
);
CREATE TABLE NTT_TABLE (
RECORD NTT_DEMO[]
);

불완전 유형 불완전한 유형은 속성과 메서드가 없는 유형입니다. 다른 유형에서 참조할 수 있습니다. 하지만 사용하기 전에 유형 정의를 제공해야 합니다.

CREATE TYPE INCOMPLETE_DEMO;

아니요 N/A

사용자

이 섹션에서는 사용자를 만들고 사용자에게 권한을 할당하고 Oracle 테이블을 PostgreSQL용 Cloud SQL 테이블로 변환해야 하는 이유를 설명합니다.

사용자 만들기 및 권한

Oracle 데이터베이스 사용자 계정(Oracle '사용자'와 '스키마'가 동일)을 사용하여 인증을 수행하고 데이터베이스 세션에 연결할 수 있습니다. 승인 액세스는 특정 데이터베이스 객체/권한에 대한 각 사용자의 개별 수준에서 설정됩니다.

일반적으로 데이터베이스 사용자에는 두 가지 유형이 있습니다.

  • 관리자: 데이터베이스 인스턴스, 사용자, 리소스를 관리합니다.
  • 사용자 계정: 애플리케이션과 같은 논리적 작업을 수행합니다.

관리자는 데이터베이스 객체에 액세스할 수 있도록 사용자 및 애플리케이션 사용자 계정에 권한을 부여합니다. Oracle 데이터베이스 권한은 특정 작업(예: 세션 만들기/연결) 또는 특정 데이터베이스 객체(예: 특정 테이블의 SELECT 도는 특정 저장 프로시저의 EXECUTE)에 대해 사용자에게 부여됩니다.

Oracle에는 사용자와 역할의 개념이 있습니다. 사용자는 데이터베이스로 인증하는 데 사용되고 역할은 전체 권한 부여가 가능한 권한 그룹을 제공합니다.

PostgreSQL용 Cloud SQL에서 사용자와 역할은 동일합니다. PostgreSQL용 Cloud SQL에서 사용자는 connect 권한이 있는 역할입니다. CREATE USER 또는 CREATE ROLE 문 중 하나를 사용하여 데이터베이스 사용자를 만들 수 있습니다. Oracle과 달리 PostgreSQL용 Cloud SQL에서 스키마와 사용자는 별도로 생성됩니다. 스키마는 객체 컬렉션(예: 테이블, 데이터 유형, 함수 등)이며 사용자가 소유합니다.

Oracle 사용자 만들기
CREATE USER user_name IDENTIFIED BY password;
PostgreSQL용 Cloud SQL 사용자 만들기
CREATE USER user WITH PASSWORD 'password';

또는

CREATE ROLE user WITH LOGIN PASSWORD 'password';

변환 고려사항

  • 사용자는 루트 수준에서 정의되며 동일한 PostgreSQL용 Cloud SQL 클러스터에 포함된 모든 데이터베이스에 유효합니다. Oracle 12c의 '일반 사용자'와 유사합니다.
  • PostgreSQL용 Cloud SQL CREATE USER 구문은 Oracle과 다르며 있는 그대로 마이그레이션할 수 없습니다. PostgreSQL용 Cloud SQL의 CREATE USERCREATE ROLE의 별칭으로, LOGIN 옵션이 기본적으로 사용 설정된다는 점이 다릅니다.

테이블

Oracle 테이블은 열 데이터 유형, 테이블 제약조건, 색인, 파티션, Oracle 테이블 고유 기능 등과 같은 여러 요소로부터 생성됩니다. 성공적으로 PostgreSQL용 Cloud SQL 데이터베이스 테이블로 마이그레이션하려면 모든 Oracle 테이블 요소를 PostgreSQL용 Cloud SQL 테이블로 변환해야 합니다. 일부 요소는 수정 사항이 없거나 사소한 수정 사항만 포함된 상태로 지원되며, 다른 요소는 완전히 수정되어야 합니다.

Oracle 테이블을 PostgreSQL용 Cloud SQL 테이블로 변환하는 것은 중요도가 높은 핵심 단계이고 성능과 데이터 크기에 추가적인 영향을 주므로 마이그레이션 측면에서 볼 때 PL/SQL을 PostgreSQL용 Cloud SQL로 변환하기 위해서는 더 많은 노력이 필요합니다.

다음은 Oracle 테이블, PostgreSQL용 Cloud SQL 테이블과 관련 기능 간의 주요 차이점입니다. 이 시리즈의 남은 부분에서 이러한 차이점을 설명합니다.

  • 테이블 구문 만들기
  • 테이블 및 색인 메타데이터
  • 제약조건 지원
  • 데이터 유형 지원 및 제한 사항
  • 색인
  • 파티션 및 파티션 관리
  • 테이블 및 색인 유지 관리
  • 임시 테이블
  • 조회수
  • 표시 가능 열 및 표시 불가능 열(Oracle 12c)
  • 테이블 및 열 문자 집합

다음 단계