Перейти к содержимому
Главная страница IntoSQL

Конвертация SQL Server в PostgreSQL

Перетащите скрипт, который Generate Scripts в SSMS записывает со схемой и данными, в формате .sql или .sql.gz, в UTF-16 или UTF-8, и скачайте скрипт PostgreSQL с теми же таблицами, ключами, индексами и данными. Каждое значение, которое PostgreSQL не может хранить как есть, и каждый объект, который он не переносит, указаны в отчете.

Ваш файл
sqlshop_2024_sqlserver.sqlПример файла, 11 кБ
Ваша база данных

18 строк конвертировано, 3 исправления, ни одна не отклонена

Показать

Таблицы в shop_2024_sqlserver.sqlДамп SQL Server · создан программой SQL Server Management Objects · utf-8

  • orders10 строк2
    11 столбцов
    idinteger not null
    customer_idinteger not null
    statusvarchar(10) not null
    totalnumeric(19,4) not null
    itemssmallint not null
    ordered_attimestamp(0) not null
    shipped_attimestamp(6)
    notetext
    detailstext
    order_refuuid not null
    total_with_taxnumeric(12,2)
  • customers8 строк1
    8 столбцов
    idinteger not null
    namevarchar(100) not null
    emailvarchar(200) not null
    countryvarchar(2) not null
    is_activeboolean not null
    signed_update
    created_attimestamptz(0) not null
    row_versionbytea

Не конвертировано

  • Представление paid_orders
  • Триггер orders_no_negative

Каждая база данных пишет их на своем языке. Перепишите их для PostgreSQL.

-- Written by IntoSQL from a SQL Server dump. Load it with: psql -v ON_ERROR_STOP=1 -f <file>
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SET check_function_bodies = false;
SET client_min_messages = warning;
SET synchronous_commit = off;
SET maintenance_work_mem = '512MB';

CREATE TABLE orders (
    id integer GENERATED BY DEFAULT AS IDENTITY NOT NULL,
    customer_id integer NOT NULL,
    status varchar(10) DEFAULT 'pending' NOT NULL,
    total numeric(19,4) NOT NULL,
    items smallint DEFAULT 1 NOT NULL,
    ordered_at timestamp(0) NOT NULL,
    shipped_at timestamp(6),
    note text,
    details text,
    order_ref uuid DEFAULT (gen_random_uuid()::text) NOT NULL,
    total_with_tax numeric(12,2) GENERATED ALWAYS AS ((cast(total * (1.16) AS numeric(12,2)))::numeric(12,2)) STORED,
    CONSTRAINT orders_items_check CHECK (items >= 0),
    CONSTRAINT orders_check2 CHECK (status = 'cancelled' OR status = 'shipped' OR status = 'paid' OR status = 'pending'),
    CONSTRAINT orders_check3 CHECK (total >= (0))
);

CREATE TABLE customers (
    id integer GENERATED BY DEFAULT AS IDENTITY NOT NULL,
    name varchar(100) NOT NULL,
    email varchar(200) NOT NULL,
    country varchar(2) DEFAULT 'US' NOT NULL,
    is_active boolean DEFAULT true NOT NULL,
    signed_up date,
    created_at timestamptz(0) DEFAULT CURRENT_TIMESTAMP NOT NULL,
    row_version bytea
);

COPY customers (id, name, email, country, is_active, signed_up, created_at) FROM stdin;
1	Ana Martínez	ana@example.com	MX	t	2023-01-15	2023-01-15 10:24:00.000000+00:00
2	Zoë Müller	zoe@example.de	DE	t	2023-02-03	2023-02-03 08:11:42.000000+00:00
3	José Peña	jose@example.es	ES	f	2023-03-21	2023-03-21 19:05:17.000000+00:00
4	李雷	lilei@example.cn	CN	t	2023-05-09	2023-05-09 02:40:00.000000+00:00
5	Noah O'Brien	noah@example.ie	IE	t	\N	2023-06-30 14:00:00.000000+00:00
6	Amélie Laurent	amelie@example.fr	FR	t	2024-01-02	2024-01-02 09:30:00.000000+00:00
7	Ravi Patel	ravi@example.in	IN	f	2024-02-29	2024-02-29 23:59:59.000000+00:00
8	Sofia Rossi 🌻	sofia@example.it	IT	t	2024-04-12	2024-04-12 12:12:12.000000+00:00
\.

COPY orders (id, customer_id, status, total, items, ordered_at, shipped_at, note, details, order_ref) FROM stdin;
1	1	shipped	129.9000	3	2024-03-01T10:00:00.000000	2024-03-02T16:30:00.123456	\N	{"gift": false}	0b7a4c2e-3f1d-4e8a-9c55-1a2b3c4d5e6f
2	2	paid	54.0000	1	2024-03-02T11:15:00.000000	\N	Gift wrap 🎁	{"gift": true, "wrap": "red"}	1c8b5d3f-4a2e-4f9b-8d66-2b3c4d5e6f70
3	1	cancelled	12.5000	1	2024-03-03T09:45:00.000000	\N	Customer changed their mind	\N	2d9c6e4a-5b3f-4a0c-9e77-3c4d5e6f7081
4	4	shipped	980.0000	12	2024-03-05T02:10:00.000000	2024-03-07T08:00:00.000000	请小心轻放	{"fragile": true}	3e0d7f5b-6c4a-4b1d-8f88-4d5e6f708192
5	5	pending	45.7500	2	2024-03-08T17:20:00.000000	\N	Leave at the door; ring twice	\N	4f1e806c-7d5b-4c2e-9a99-5e6f708192a3
6	6	shipped	310.4000	5	2024-03-10T13:00:00.000000	2024-03-11T09:00:00.000000	Fragile: "glass"	{"fragile": true}	50f2917d-8e6c-4d3f-8baa-6f708192a3b4
7	8	paid	76.2000	2	2024-03-11T18:45:00.000000	\N	\N	\N	6103a28e-9f7d-4e40-9cbb-708192a3b4c5
8	2	shipped	19.9900	1	2024-03-12T08:00:00.000000	9999-12-31T23:59:59.999999	Shipped date set to the maximum by an old import	\N	7214b39f-a08e-4f51-8dcc-8192a3b4c5d6
9	3	shipped	64.0000	2	2024-03-14T15:30:00.000000	2024-03-15T10:00:00.000000	Two parcels	{"parcels": [1, 2]}	8325c4a0-b19f-4062-9edd-92a3b4c5d6e7
10	7	paid	1499.0000	1	2024-03-15T21:05:00.000000	\N	C:\\Users\\ravi\\invoice.pdf	\N	9436d5b1-c2a0-4173-8fee-a3b4c5d6e7f8
\.


-- Keys, indexes and constraints, after the rows so each builds once.
CREATE UNIQUE INDEX orders_pkey ON orders (id);
CREATE INDEX orders_idx_orders_customer ON orders (customer_id);
CREATE INDEX orders_idx_orders_status_date ON orders (status, ordered_at);
CREATE UNIQUE INDEX customers_pkey ON customers (id);
CREATE UNIQUE INDEX customers_email ON customers (email);
ALTER TABLE orders ADD CONSTRAINT orders_pkey PRIMARY KEY USING INDEX orders_pkey;
ALTER TABLE customers ADD CONSTRAINT customers_pkey PRIMARY KEY USING INDEX customers_pkey;
ALTER TABLE customers ADD CONSTRAINT customers_email UNIQUE USING INDEX customers_email;
ALTER TABLE orders ADD CONSTRAINT orders_fkey FOREIGN KEY (customer_id) REFERENCES customers (id) NOT VALID;
DO $f$ BEGIN
    ALTER TABLE orders VALIDATE CONSTRAINT orders_fkey;
EXCEPTION WHEN foreign_key_violation THEN
    RAISE WARNING 'foreign key % has rows without a parent: it stays NOT VALID, and new rows are checked', 'orders_fkey';
END $f$;
SELECT setval(pg_get_serial_sequence('orders', 'id'), LEAST(GREATEST(COALESCE((SELECT max(id) FROM orders)::numeric, 0) + 1, 1), 2147483647)::bigint, false);
SELECT setval(pg_get_serial_sequence('customers', 'id'), LEAST(GREATEST(COALESCE((SELECT max(id) FROM customers)::numeric, 0) + 1, 1), 2147483647)::bigint, false);
COMMENT ON TABLE customers IS 'People who bought at least once';

Исправления

  1. Столбец "items" таблицы orders беззнаковый, поэтому он стал smallint с проверкой, что значение не отрицательное.
  2. "shipped_at" таблицы orders имеет тип datetime2(7), в нем больше цифр долей секунды, чем хранит PostgreSQL, поэтому это timestamp(6), а последние цифры отбрасываются.
  3. "row_version" таблицы customers - это версия строки, которую SQL Server задает сам; в дампе нет ее значений, поэтому это bytea, и столбец пуст.

Требует проверки

  • 6 текстовых столбцов сравнивают значения без учета регистра в источнике; PostgreSQL сравнивает точно, поэтому уникальные ключи и поиск могут работать иначе. Используйте сопоставление или тип столбца без учета регистра для столбцов, которым это нужно.
  • Не конвертированы представления, триггеры, процедуры и события (2 объекта); отчет перечисляет каждый. Создайте их заново вручную в PostgreSQL.
  • Проверку check1 таблицы orders нельзя записать для PostgreSQL (function isjson), поэтому она не создана. Запишите проверку вручную, если она важна.
  • Индекс idx_orders_pending таблицы orders использует выражение, которое нельзя записать для PostgreSQL (filtered index), поэтому он не создан. Создайте индекс вручную, если он нужен запросам.

Файл конвертируется на этом компьютере и никуда не загружается.

Другие примеры:

Что меняется при переходе с SQL Server на PostgreSQL

Каждая строка - это правило, которое применяет конвертер, и строка отчета, которую он пишет, когда правило что-то меняет в ваших данных.

  • bit

    boolean

    bit хранит 1 и 0, то есть true и false в PostgreSQL.

  • tinyint

    smallint с CHECK, что значение не отрицательное

    tinyint в SQL Server принимает значения от 0 до 255; наименьшее целое в PostgreSQL знаковое, поэтому проверка сохраняет диапазон.

    Строка отчета: unsigned_widened

  • char(n), varchar(n), nchar(n), nvarchar(n), varchar(max), text

    varchar(n) и text

    text в PostgreSQL вмещает любой символ, поэтому varchar и nvarchar становятся одним типом.

  • decimal(p,s), money, smallmoney

    numeric(p,s); money как numeric(19,4)

    Сохраняется каждая цифра, money - со своими четырьмя знаками после запятой.

  • datetime, datetime2, smalldatetime

    timestamp(p)

    datetime - это показание часов, как timestamp without time zone.

  • datetime2(7), time(7) and datetimeoffset(7)

    шесть цифр долей секунды, седьмая отбрасывается

    PostgreSQL хранит микросекунды; седьмая цифра (100 наносекунд) отбрасывается, а не округляется, поэтому ни одно значение не переходит на следующую секунду или день.

    Строка отчета: fraction_cut

  • datetimeoffset

    timestamptz, те же моменты

    timestamptz сохраняет момент; PostgreSQL показывает его в часовом поясе сеанса, а не со смещением, которое было у значения.

  • time

    time(p)

    То же время суток.

  • json (SQL Server 2025)

    jsonb

    Те же значения JSON.

  • uniqueidentifier

    uuid

    Те же идентификаторы, записанные строчными буквами.

  • binary, varbinary, image

    bytea

    Байты остаются байтами.

  • geometry, geography

    bytea с собственными байтами SQL Server

    SSMS записывает пространственные значения в сериализации SQL Server, которая сохраняется байт в байт.

    Строка отчета: spatial_as_native

  • rowversion, timestamp

    bytea, пустой

    SQL Server сам задает версию строки, и SSMS не записывает для нее значений.

    Строка отчета: rowversion_empty

  • sql_variant, hierarchyid, vector

    text

    В PostgreSQL нет равнозначного типа; sql_variant сохраняет текст каждого значения, а hierarchyid - свой путь, например /1/2/. xml остается xml.

    Строка отчета: type_replaced

  • collations that ignore case (_CI_)

    точное сравнение

    PostgreSQL сравнивает текст точно, поэтому столбцы, которые в SQL Server не учитывали регистр, теперь различают Ana и ana.

    Строка отчета: case_insensitive_collation

  • IDENTITY

    GENERATED BY DEFAULT AS IDENTITY, продолжается после наибольшего id

    Скопированные id загружаются как есть, а счетчик продолжается после наибольшего.

  • CREATE SEQUENCE

    CREATE SEQUENCE с теми же параметрами

    Последовательности в PostgreSQL работают так же. SSMS не записывает, до какого значения дошла последовательность, поэтому она начинается с того, с чего была создана.

  • computed columns

    генерируемые столбцы, STORED

    PostgreSQL с 13 по 17 только хранит генерируемые столбцы; формула та же, а CONCAT записан так, чтобы NULL считался пустой строкой, как в SQL Server.

    Строка отчета: virtual_as_stored

  • computed columns with functions PostgreSQL lacks

    обычный столбец

    Формула, которую нельзя записать для PostgreSQL, оставляет обычный столбец и строку в отчете; SSMS не записывает значения вычисляемых столбцов.

    Строка отчета: generated_not_translated

  • defaults with functions PostgreSQL lacks, and NEXT VALUE FOR

    без значения по умолчанию

    Значение по умолчанию, которое нельзя записать для PostgreSQL, опускается и попадает в отчет.

    Строка отчета: default_not_translated

  • CHECK constraints

    переводится

    Те же проверки, применяемые при загрузке каждой строки.

  • CHECK constraints with functions PostgreSQL lacks

    не создается

    Проверка, которую нельзя записать для PostgreSQL, опускается и попадает в отчет.

    Строка отчета: check_skipped

  • CHECK constraints added WITH NOCHECK or disabled

    не создается

    SQL Server не применяет эти проверки, поэтому строки могут их нарушать.

    Строка отчета: check_not_enforced

  • filtered and columnstore indexes

    не создается

    IntoSQL пишет индексы b-tree по столбцам; остальные создайте заново после загрузки.

    Строка отчета: index_skipped

  • foreign keys

    внешние ключи, после строк

    Строки загружаются в любом порядке, а ключи проверяют их после этого.

  • foreign keys to tables the dump doesn't create

    не создается

    Ключ не может ссылаться на таблицу, которой нет.

    Строка отчета: foreign_key_skipped

  • tables on a partition scheme

    одна таблица со строками всех секций

    Строки те же; при необходимости секционируйте таблицу заново в PostgreSQL.

    Строка отчета: partitions_dropped

  • temporal tables (SYSTEM_VERSIONING)

    две таблицы: текущие строки и история

    Таблица и ее таблица истории копируются как обычные таблицы; PostgreSQL не ведет историю сам.

    Строка отчета: system_versioning_dropped

  • NOT NULL columns with values that become NULL

    NOT NULL снимается

    Столбец, значения которого пришлось заменить на NULL, не может сохранить NOT NULL, иначе загрузка остановится.

    Строка отчета: not_null_relaxed

  • views, functions, procedures, triggers, synonyms, types and partition functions

    перечисляются в отчете

    Их код написан на T-SQL, поэтому они перечислены, чтобы вы создали их заново.

    Строка отчета: not_converted_objects

  • scripts without CREATE TABLE (data only)

    типы определяются по значениям

    Скрипт только с данными содержит лишь строки, поэтому типы берутся из значений.

    Строка отчета: no_schema

  • expressions in INSERT values

    NULL

    Конвертер, который не запускает базу данных, не может их вычислить.

    Строка отчета: expression_value

  • types IntoSQL doesn't know

    text

    Тип text вмещает любое значение; измените тип после загрузки.

    Строка отчета: unknown_type

  • dates that aren't valid

    NULL

    Значение, которое не является датой, становится NULL, и отчет его подсчитывает.

    Строка отчета: date_out_of_range

  • NUL characters in text

    удаляется

    text в PostgreSQL не может содержать символ NUL. Он удаляется, и отчет подсчитывает такие значения.

    Строка отчета: nul_removed

  • text that isn't valid in its encoding

    неверные байты заменяются символом замены

    Текст в PostgreSQL должен быть корректным UTF-8.

    Строка отчета: invalid_utf8_replaced

  • text decoded twice (ñ)

    копируется как есть

    Скрипт содержит именно эти символы, поэтому они копируются; отчет на них указывает.

    Строка отчета: mojibake_suspected

В SQL ServerВ PostgreSQLСтрока отчета
bitbooleanbit хранит 1 и 0, то есть true и false в PostgreSQL.
tinyintsmallint с CHECK, что значение не отрицательноеtinyint в SQL Server принимает значения от 0 до 255; наименьшее целое в PostgreSQL знаковое, поэтому проверка сохраняет диапазон.unsigned_widened
char(n), varchar(n), nchar(n), nvarchar(n), varchar(max), textvarchar(n) и texttext в PostgreSQL вмещает любой символ, поэтому varchar и nvarchar становятся одним типом.
decimal(p,s), money, smallmoneynumeric(p,s); money как numeric(19,4)Сохраняется каждая цифра, money - со своими четырьмя знаками после запятой.
datetime, datetime2, smalldatetimetimestamp(p)datetime - это показание часов, как timestamp without time zone.
datetime2(7), time(7) and datetimeoffset(7)шесть цифр долей секунды, седьмая отбрасываетсяPostgreSQL хранит микросекунды; седьмая цифра (100 наносекунд) отбрасывается, а не округляется, поэтому ни одно значение не переходит на следующую секунду или день.fraction_cut
datetimeoffsettimestamptz, те же моментыtimestamptz сохраняет момент; PostgreSQL показывает его в часовом поясе сеанса, а не со смещением, которое было у значения.
timetime(p)То же время суток.
json (SQL Server 2025)jsonbТе же значения JSON.
uniqueidentifieruuidТе же идентификаторы, записанные строчными буквами.
binary, varbinary, imagebyteaБайты остаются байтами.
geometry, geographybytea с собственными байтами SQL ServerSSMS записывает пространственные значения в сериализации SQL Server, которая сохраняется байт в байт.spatial_as_native
rowversion, timestampbytea, пустойSQL Server сам задает версию строки, и SSMS не записывает для нее значений.rowversion_empty
sql_variant, hierarchyid, vectortextВ PostgreSQL нет равнозначного типа; sql_variant сохраняет текст каждого значения, а hierarchyid - свой путь, например /1/2/. xml остается xml.type_replaced
collations that ignore case (_CI_)точное сравнениеPostgreSQL сравнивает текст точно, поэтому столбцы, которые в SQL Server не учитывали регистр, теперь различают Ana и ana.case_insensitive_collation
IDENTITYGENERATED BY DEFAULT AS IDENTITY, продолжается после наибольшего idСкопированные id загружаются как есть, а счетчик продолжается после наибольшего.
CREATE SEQUENCECREATE SEQUENCE с теми же параметрамиПоследовательности в PostgreSQL работают так же. SSMS не записывает, до какого значения дошла последовательность, поэтому она начинается с того, с чего была создана.
computed columnsгенерируемые столбцы, STOREDPostgreSQL с 13 по 17 только хранит генерируемые столбцы; формула та же, а CONCAT записан так, чтобы NULL считался пустой строкой, как в SQL Server.virtual_as_stored
computed columns with functions PostgreSQL lacksобычный столбецФормула, которую нельзя записать для PostgreSQL, оставляет обычный столбец и строку в отчете; SSMS не записывает значения вычисляемых столбцов.generated_not_translated
defaults with functions PostgreSQL lacks, and NEXT VALUE FORбез значения по умолчаниюЗначение по умолчанию, которое нельзя записать для PostgreSQL, опускается и попадает в отчет.default_not_translated
CHECK constraintsпереводитсяТе же проверки, применяемые при загрузке каждой строки.
CHECK constraints with functions PostgreSQL lacksне создаетсяПроверка, которую нельзя записать для PostgreSQL, опускается и попадает в отчет.check_skipped
CHECK constraints added WITH NOCHECK or disabledне создаетсяSQL Server не применяет эти проверки, поэтому строки могут их нарушать.check_not_enforced
filtered and columnstore indexesне создаетсяIntoSQL пишет индексы b-tree по столбцам; остальные создайте заново после загрузки.index_skipped
foreign keysвнешние ключи, после строкСтроки загружаются в любом порядке, а ключи проверяют их после этого.
foreign keys to tables the dump doesn't createне создаетсяКлюч не может ссылаться на таблицу, которой нет.foreign_key_skipped
tables on a partition schemeодна таблица со строками всех секцийСтроки те же; при необходимости секционируйте таблицу заново в PostgreSQL.partitions_dropped
temporal tables (SYSTEM_VERSIONING)две таблицы: текущие строки и историяТаблица и ее таблица истории копируются как обычные таблицы; PostgreSQL не ведет историю сам.system_versioning_dropped
NOT NULL columns with values that become NULLNOT NULL снимаетсяСтолбец, значения которого пришлось заменить на NULL, не может сохранить NOT NULL, иначе загрузка остановится.not_null_relaxed
views, functions, procedures, triggers, synonyms, types and partition functionsперечисляются в отчетеИх код написан на T-SQL, поэтому они перечислены, чтобы вы создали их заново.not_converted_objects
scripts without CREATE TABLE (data only)типы определяются по значениямСкрипт только с данными содержит лишь строки, поэтому типы берутся из значений.no_schema
expressions in INSERT valuesNULLКонвертер, который не запускает базу данных, не может их вычислить.expression_value
types IntoSQL doesn't knowtextТип text вмещает любое значение; измените тип после загрузки.unknown_type
dates that aren't validNULLЗначение, которое не является датой, становится NULL, и отчет его подсчитывает.date_out_of_range
NUL characters in textудаляетсяtext в PostgreSQL не может содержать символ NUL. Он удаляется, и отчет подсчитывает такие значения.nul_removed
text that isn't valid in its encodingневерные байты заменяются символом заменыТекст в PostgreSQL должен быть корректным UTF-8.invalid_utf8_replaced
text decoded twice (ñ)копируется как естьСкрипт содержит именно эти символы, поэтому они копируются; отчет на них указывает.mojibake_suspected

Загрузите скрипт в PostgreSQL

Скрипт создает таблицы, копирует строки, затем добавляет ключи, индексы и внешние ключи, поэтому загрузка идет быстро и останавливается на первой ошибке.

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

Внешние ключи добавляются как NOT VALID, а затем проверяются. Если строка ссылается на несуществующую строку, скрипт сообщает, какое ограничение нарушено, а не прерывается на полпути.

Для большого дампа сначала создайте базу данных и запустите скрипт через psql на той же машине, где работает сервер.

IntoSQL Pro загружает файл прямо в PostgreSQL из приложения для компьютера или командной строки, без написания скрипта.

Как создать дамп SQL Server для лучшего результата

Конвертер читает то, что есть в дампе. Эти параметры сохраняют в нем больше ваших данных:

  • В SSMS щелкните базу данных правой кнопкой, выберите Tasks, Generate Scripts и отметьте таблицы. dbatools, mssql-scripter и другие инструменты на той же библиотеке пишут такой же скрипт.
  • В разделе Advanced задайте для Types of data to script значение Schema and data. Скрипт только со схемой содержит таблицы без строк.
  • Сохраните его в Unicode, как по умолчанию в SSMS, или в UTF-8: оба читаются одинаково, gzip тоже подходит.

Что не конвертируется

Представления, функции, процедуры, триггеры, синонимы, правила и политики безопасности написаны на T-SQL. Они перечислены в отчете по имени и никогда не удаляются молча, чтобы вы могли переписать их для PostgreSQL.

Вопросы о SQL Server в PostgreSQL

Нет ответа на ваш вопрос? Напишите нам через страницу контактов, и вам ответит человек. Страница контактов

Мой дамп загружается на сервер?

Нет. Конвертер работает в вашем браузере и читает дамп с диска по частям, поэтому он никогда не покидает ваш компьютер. Приложение для компьютера и командная строка тоже конвертируют на вашем компьютере.

Насколько большим может быть дамп?

Конвертер никогда не держит весь дамп в памяти: он читает файл дважды, по диапазонам, и пишет скрипт по ходу чтения. Дампы в несколько гигабайт конвертируются в браузере, в приложении для компьютера и в командной строке.

Читает ли он файл UTF-16, который сохраняет SSMS?

Да. SSMS по умолчанию сохраняет скрипты в UTF-16, а конвертер одинаково читает UTF-16 и UTF-8, сжатые gzip или нет, с GO между пакетами.

Из каких версий SQL Server может быть скрипт?

Скрипты, которые SSMS, dbatools или mssql-scripter пишут из SQL Server 2017 и новее. Каждый тестовый скрипт создан в SQL Server 2017, 2022 и 2025 и сверен с источником ячейка за ячейкой.

Сохраняются ли значения IDENTITY?

Да. Столбцы IDENTITY становятся столбцами identity, каждая строка сохраняет свой id, а следующий id идет после наибольшего. Последовательности создаются с теми же параметрами.

Что происходит с money, datetimeoffset и другими типами SQL Server?

bit становится boolean, money - numeric(19,4), uniqueidentifier - uuid, xml - xml, а datetimeoffset - timestamptz. datetime2 сохраняет шесть цифр долей секунды, седьмая отбрасывается. Столбцы, которые не учитывали регистр, сравниваются точно, и отчет указывает, какие именно.

А процедуры, триггеры и представления?

Они перечислены в отчете по имени и не конвертируются, потому что каждая база данных пишет их на своем языке.

На каких версиях PostgreSQL загружается скрипт?

PostgreSQL с 13 по 18. Один и тот же скрипт загружается на каждой из них и останавливается на первой ошибке, если что-то пойдет не так.