---
title: "브라우저에서 SQL Server을(를) PostgreSQL로 마이그레이션"
description: "SQL Server 데이터베이스를 PostgreSQL로 마이그레이션. SSMS 스크립트를 같은 테이블, 키, 데이터의 스크립트로 바꾸고 모든 변경을 보고해요."
canonical: https://intosql.com/ko/sql-server-to-postgresql
last_updated: 2026-10-15
---

# 브라우저에서 SQL Server을(를) PostgreSQL로 마이그레이션

SSMS의 스크립트 생성으로 스키마와 데이터를 담아 만든 스크립트(.sql 또는 .sql.gz, UTF-16 또는 UTF-8)를 놓으면, 같은 테이블, 키, 인덱스, 데이터를 담은 PostgreSQL 스크립트를 다운로드할 수 있어요. PostgreSQL이(가) 그대로 담을 수 없는 값과 옮기지 않는 객체는 모두 보고서에 나와요.

[SQL Server에서 PostgreSQL로 마이그레이션 가이드](https://intosql.com/docs/migrations/sql-server-to-postgresql)

[SQL Server에서 PostgreSQL로의 데이터 타입](https://intosql.com/docs/types/sql-server-to-postgresql)

## SQL Server에서 PostgreSQL로 바뀌는 점

각 행은 변환기가 적용하는 규칙이며, 규칙이 데이터를 바꿀 때 보고서에 쓰는 줄이 함께 나와요.

| SQL Server에서 | PostgreSQL에서 | 보고서 줄 |
| --- | --- | --- |
| bit | boolean |  |
| tinyint | 음수가 아닌지 확인하는 CHECK가 있는 smallint | `unsigned_widened` |
| char(n), varchar(n), nchar(n), nvarchar(n), varchar(max), text | varchar(n)과 text |  |
| decimal(p,s), money, smallmoney | numeric(p,s), money는 numeric(19,4) |  |
| datetime, datetime2, smalldatetime | timestamp(p) |  |
| datetime2(7), time(7) and datetimeoffset(7) | 초 단위 6자리, 7번째 자리는 잘림 | `fraction_cut` |
| datetimeoffset | timestamptz, 같은 시점 |  |
| time | time(p) |  |
| json (SQL Server 2025) | jsonb |  |
| uniqueidentifier | uuid |  |
| binary, varbinary, image | bytea |  |
| geometry, geography | SQL Server 자체 바이트를 담은 bytea | `spatial_as_native` |
| rowversion, timestamp | bytea, 빈 값 | `rowversion_empty` |
| sql_variant, hierarchyid, vector | text | `type_replaced` |
| collations that ignore case (_CI_) | 정확한 비교 | `case_insensitive_collation` |
| IDENTITY | GENERATED BY DEFAULT AS IDENTITY, 가장 큰 id 다음부터 이어짐 |  |
| CREATE SEQUENCE | 같은 옵션의 CREATE SEQUENCE |  |
| computed columns | 생성 열, STORED | `virtual_as_stored` |
| computed columns with functions PostgreSQL lacks | 일반 열 | `generated_not_translated` |
| defaults with functions PostgreSQL lacks, and NEXT VALUE FOR | 기본값 없음 | `default_not_translated` |
| CHECK constraints | 변환됨 |  |
| CHECK constraints with functions PostgreSQL lacks | 만들지 않음 | `check_skipped` |
| CHECK constraints added WITH NOCHECK or disabled | 만들지 않음 | `check_not_enforced` |
| filtered and columnstore indexes | 만들지 않음 | `index_skipped` |
| foreign keys | 외래 키, 행 다음에 |  |
| foreign keys to tables the dump doesn't create | 만들지 않음 | `foreign_key_skipped` |
| tables on a partition scheme | 모든 파티션의 행을 담은 하나의 테이블 | `partitions_dropped` |
| temporal tables (SYSTEM_VERSIONING) | 두 테이블: 현재 행과 기록 | `system_versioning_dropped` |
| NOT NULL columns with values that become NULL | NOT NULL 제거 | `not_null_relaxed` |
| views, functions, procedures, triggers, synonyms, types and partition functions | 보고서에 나열 | `not_converted_objects` |
| scripts without CREATE TABLE (data only) | 값으로 판단한 타입 | `no_schema` |
| expressions in INSERT values | NULL | `expression_value` |
| types IntoSQL doesn't know | text | `unknown_type` |
| dates that aren't valid | NULL | `date_out_of_range` |
| NUL characters in text | 제거 | `nul_removed` |
| text that isn't valid in its encoding | 잘못된 바이트를 대체 문자로 | `invalid_utf8_replaced` |
| text decoded twice (Ã±) | 그대로 복사 | `mojibake_suspected` |

## 스크립트를 PostgreSQL에 불러오기

스크립트는 테이블을 만들고 행을 복사한 다음 키, 인덱스, 외래 키를 추가해요. 그래서 빨리 불러오고 첫 오류에서 멈춰요.

```shell
psql -v ON_ERROR_STOP=1 -d mydb -f sql_server.postgresql.sql
```

외래 키는 NOT VALID로 추가한 다음 검증해요. 어떤 행이 존재하지 않는 행을 가리키면, 중간에 실패하지 않고 어떤 제약인지 알려 줘요.

큰 덤프는 데이터베이스를 먼저 만들고, 서버와 같은 컴퓨터에서 psql로 스크립트를 실행하세요.

IntoSQL Pro는 데스크톱 앱이나 명령줄에서 파일을 PostgreSQL에 바로 불러와요. 스크립트를 따로 만들 필요가 없어요.

## 좋은 결과를 위한 SQL Server 덤프 방법

변환기는 덤프에 담긴 내용을 읽어요. 다음 옵션을 쓰면 더 많은 데이터가 덤프에 남아요:

- SSMS에서 데이터베이스를 마우스 오른쪽 버튼으로 클릭하고 태스크, 스크립트 생성을 차례로 고른 뒤 테이블을 선택하세요. dbatools, mssql-scripter 등 같은 라이브러리로 만든 도구도 같은 스크립트를 써요.
- 고급에서 스크립팅할 데이터 형식을 스키마 및 데이터로 설정하세요. 스키마만 담은 스크립트에는 테이블에 행이 없어요.
- SSMS 기본값인 유니코드나 UTF-8로 저장하세요. 둘 다 같은 방식으로 읽고, gzip도 쓸 수 있어요.

## 변환되지 않는 것

뷰, 함수, 프로시저, 트리거, 동의어, 규칙, 보안 정책은 T-SQL로 작성돼요. 보고서에 이름으로 나열되고 몰래 빠지는 일은 없으므로, PostgreSQL에 맞게 다시 작성할 수 있어요.

## SQL Server에서 PostgreSQL로 변환에 관한 질문

### 덤프가 업로드되나요?

아니요. 변환기는 브라우저에서 실행되고 디스크의 덤프를 조각조각 읽으므로, 덤프가 컴퓨터 밖으로 나가지 않아요. 데스크톱 앱과 명령줄도 컴퓨터에서 변환해요.

### 덤프는 얼마나 커도 되나요?

변환기는 덤프 전체를 메모리에 올리지 않아요. 파일을 범위별로 두 번 읽고, 읽는 대로 스크립트를 써요. 수 GB 덤프도 브라우저, 데스크톱 앱, 명령줄에서 변환돼요.

### SSMS가 저장하는 UTF-16 파일도 읽나요?

네. SSMS는 기본적으로 스크립트를 UTF-16으로 저장하고, 변환기는 UTF-16과 UTF-8을 gzip 여부와 상관없이, 배치 사이의 GO까지 똑같이 읽어요.

### 어떤 SQL Server 버전의 스크립트를 읽나요?

SQL Server 2017 이상에서 SSMS, dbatools, mssql-scripter로 만든 스크립트예요. 모든 테스트 스크립트는 SQL Server 2017, 2022, 2025에서 만들고 원본과 셀 단위로 비교해요.

### IDENTITY 값은 유지되나요?

네. IDENTITY 열은 identity 열이 되고, 모든 행이 id를 유지하며, 다음 id는 가장 큰 id 다음부터 이어져요. 시퀀스는 같은 옵션으로 만들어요.

### money, datetimeoffset 등 SQL Server 타입은 어떻게 되나요?

bit는 boolean, money는 numeric(19,4), uniqueidentifier는 uuid, xml은 xml, datetimeoffset은 timestamptz가 돼요. datetime2는 초를 소수 6자리까지 유지하고 7번째 자리는 잘라요. 대소문자를 무시하던 열은 정확히 비교하게 되고, 보고서에 어떤 열인지 나와요.

### 프로시저, 트리거, 뷰는 어떻게 되나요?

데이터베이스마다 자체 언어로 작성하므로 변환하지 않고 보고서에 이름으로 나열해요.

### 스크립트는 어떤 PostgreSQL 버전에서 불러올 수 있나요?

PostgreSQL 13부터 18까지예요. 같은 스크립트를 각 버전에서 불러오며, 문제가 생기면 첫 오류에서 멈춰요.

## SQL Server에서

- [SQL Server에서 MySQL로](https://intosql.com/ko/sql-server-to-mysql)
- [SQL Server에서 MariaDB로](https://intosql.com/ko/sql-server-to-mariadb)
- [SQL Server에서 SQLite로](https://intosql.com/ko/sql-server-to-sqlite)
- [SQL Server에서 SQL Server로](https://intosql.com/ko/sql-server-to-sql-server)
- [SQL Server에서 Oracle로](https://intosql.com/ko/sql-server-to-oracle)

## PostgreSQL로

- [MySQL에서 PostgreSQL로](https://intosql.com/ko/mysql-to-postgresql)
- [MariaDB에서 PostgreSQL로](https://intosql.com/ko/mariadb-to-postgresql)
- [PostgreSQL에서 PostgreSQL로](https://intosql.com/ko/postgresql-to-postgresql)
- [SQLite에서 PostgreSQL로](https://intosql.com/ko/sqlite-to-postgresql)
- [Oracle에서 PostgreSQL로](https://intosql.com/ko/oracle-to-postgresql)

## 가이드와 모든 조합

- [PostgreSQL에서 SQL Server로](https://intosql.com/ko/postgresql-to-sql-server)
- [SQL Server에서 PostgreSQL로 마이그레이션 가이드](https://intosql.com/docs/migrations/sql-server-to-postgresql)
- [SQL Server에서 PostgreSQL로의 데이터 타입](https://intosql.com/docs/types/sql-server-to-postgresql)
- [모든 데이터베이스 조합](https://intosql.com/ko/database-migration)
