Chuyển Oracle sang PostgreSQL
Thả tệp .sql mà Database Export của SQL Developer hoặc SQLcl ghi, với các bảng và câu lệnh Insert, và tải xuống tập lệnh PostgreSQL với cùng bảng, khóa, chỉ mục và dữ liệu. Mọi giá trị PostgreSQL không chứa được nguyên trạng, và mọi đối tượng nó không hỗ trợ, đều được liệt kê trong báo cáo.
Đã chuyển đổi 18 hàng, không có bản sửa, không hàng nào bị từ chối
Các bảng trong shop_2024_oracle.sqlBản dump Oracle · do SQL Developer ghi · utf-8
customers8 hàng
7 cột id bigint not null name varchar(100) not null email varchar(150) not null country varchar(2) not null is_active smallint not null signed_up timestamp(0) created_at timestamp(0) not null orders10 hàng
9 cột id bigint not null customer_id bigint not null invoice bigint status varchar(10) not null total numeric(10,2) not null items integer not null ordered_at timestamp(0) not null shipped_at timestamp(0) note varchar(255)
-- Written by IntoSQL from a Oracle 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 SEQUENCE invoice_numbers INCREMENT BY 1 MINVALUE 1 START WITH 1020;
CREATE TABLE customers (
id bigint GENERATED BY DEFAULT AS IDENTITY NOT NULL,
name varchar(100) NOT NULL,
email varchar(150) NOT NULL,
country varchar(2) DEFAULT 'US' NOT NULL,
is_active smallint DEFAULT 1 NOT NULL,
signed_up timestamp(0),
created_at timestamp(0) DEFAULT LOCALTIMESTAMP NOT NULL,
CONSTRAINT customers_check1 CHECK (is_active IN (0, 1))
);
CREATE TABLE orders (
id bigint GENERATED BY DEFAULT AS IDENTITY NOT NULL,
customer_id bigint NOT NULL,
invoice bigint DEFAULT (nextval('invoice_numbers')),
status varchar(10) DEFAULT 'pending' NOT NULL,
total numeric(10,2) NOT NULL,
items integer DEFAULT 1 NOT NULL,
ordered_at timestamp(0) NOT NULL,
shipped_at timestamp(0),
note varchar(255),
CONSTRAINT orders_check1 CHECK (status IN ('pending', 'paid', 'shipped', 'cancelled'))
);
COPY customers (id, name, email, country, is_active, signed_up, created_at) FROM stdin;
1 Ana Martínez ana@example.com MX 1 2023-01-15 00:00:00 2023-01-15 10:24:00.000000
2 Zoë Müller zoe@example.de DE 1 2023-02-03 00:00:00 2023-02-03 08:11:42.000000
3 José Peña jose@example.es ES 0 2023-03-21 00:00:00 2023-03-21 19:05:17.000000
4 李雷 lilei@example.cn CN 1 2023-05-09 00:00:00 2023-05-09 02:40:00.000000
5 Noah O'Brien noah@example.ie IE 1 \N 2023-06-30 14:00:00.000000
6 Amélie Laurent amelie@example.fr FR 1 2024-01-02 00:00:00 2024-01-02 09:30:00.000000
7 Ravi Patel ravi@example.in IN 0 2024-02-29 00:00:00 2024-02-29 23:59:59.000000
8 Sofia Rossi 🌻 sofia@example.it IT 1 2024-04-12 00:00:00 2024-04-12 12:12:12.000000
\.
COPY orders (id, customer_id, invoice, status, total, items, ordered_at, shipped_at, note) FROM stdin;
1 1 1000 shipped 129.9 3 2024-03-01 10:00:00 2024-03-02 16:30:00 \N
2 2 1001 paid 54 1 2024-03-02 11:15:00 \N Gift wrap 🎁
3 1 1002 cancelled 12.5 1 2024-03-03 09:45:00 \N Customer changed their mind
4 4 1003 shipped 980 12 2024-03-05 02:10:00 2024-03-07 08:00:00 请小心轻放
5 5 1004 pending 45.75 2 2024-03-08 17:20:00 \N Leave at the door; ring twice
6 6 1005 shipped 310.4 5 2024-03-10 13:00:00 2024-03-11 09:00:00 Fragile: "glass"
7 8 1006 paid 76.2 2 2024-03-11 18:45:00 \N \N
8 2 1007 paid 19.99 1 2024-03-12 08:00:00 \N Paid at the counter
9 3 1008 shipped 64 2 2024-03-14 15:30:00 \N Shipping date never recorded
10 7 1009 paid 1499 1 2024-03-15 21:05:00 \N C:\\Users\\ravi\\invoice.pdf
\.
-- Keys, indexes and constraints, after the rows so each builds once.
CREATE UNIQUE INDEX customers_customers_pk ON customers (id);
CREATE UNIQUE INDEX customers_customers_email_uk ON customers (email);
CREATE UNIQUE INDEX orders_orders_pk ON orders (id);
CREATE INDEX orders_orders_status_date_ix ON orders (status, ordered_at);
ALTER TABLE customers ADD CONSTRAINT customers_customers_pk PRIMARY KEY USING INDEX customers_customers_pk;
ALTER TABLE customers ADD CONSTRAINT customers_customers_email_uk UNIQUE USING INDEX customers_customers_email_uk;
ALTER TABLE orders ADD CONSTRAINT orders_orders_pk PRIMARY KEY USING INDEX orders_orders_pk;
ALTER TABLE orders ADD CONSTRAINT orders_customer_fk FOREIGN KEY (customer_id) REFERENCES customers (id) NOT VALID;
DO $f$ BEGIN
ALTER TABLE orders VALIDATE CONSTRAINT orders_customer_fk;
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_customer_fk';
END $f$;
SELECT setval(pg_get_serial_sequence('customers', 'id'), LEAST(GREATEST(COALESCE((SELECT max(id) FROM customers)::numeric, 0) + 1, 1), 9223372036854775807)::bigint, false);
COMMENT ON TABLE customers IS 'People who bought at least once';
SELECT setval(pg_get_serial_sequence('orders', 'id'), LEAST(GREATEST(COALESCE((SELECT max(id) FROM orders)::numeric, 0) + 1, 1), 9223372036854775807)::bigint, false);
Bản sửa
Không có gì cần sửa.
Tệp được chuyển đổi ngay trên máy tính này và không bao giờ được tải lên.
Mẫu khác:
Những gì thay đổi từ Oracle sang PostgreSQL
Mỗi hàng là một quy tắc trình chuyển đổi áp dụng, kèm dòng báo cáo được ghi khi quy tắc thay đổi dữ liệu của bạn.
BOOLEAN (23ai)
boolean
TRUE và FALSE vẫn là true và false.
VARCHAR2(n BYTE|CHAR), NVARCHAR2(n), CHAR(n), NCHAR(n), CLOB, NCLOB, LONG
varchar(n) và text
Độ dài đếm theo ký tự, dù Oracle đếm theo byte hay ký tự, nên mọi giá trị đều vừa.
NUMBER, NUMBER(p,s), FLOAT(b)
numeric(p,s), hoặc bigint
NUMBER giữ mọi chữ số; NUMBER không có độ chính xác mà mọi giá trị đều là số nguyên tối đa 18 chữ số sẽ thành số nguyên 64 bit, còn thang số âm chứa đủ bấy nhiêu chữ số trước dấu thập phân.
DATE, TIMESTAMP(p)
timestamp(p)
DATE của Oracle chứa thời gian đến từng giây, nên nó là ngày và giờ. Bản xuất trong phiên kiểu Mỹ hoặc Đức ghi ngày mà không có giờ hay thế kỷ (DD-MON-RR); hãy xuất trong phiên ISO (SYYYY-MM-DD HH24:MI:SS) để giữ chúng.
TIMESTAMP(7) to TIMESTAMP(9)
sáu chữ số của giây, chữ số thứ bảy bị cắt
PostgreSQL giữ đến micro giây; chữ số thứ bảy (100 nano giây) bị cắt, không bao giờ làm tròn, nên không giá trị nào nhảy sang giây hay ngày kế tiếp.
Dòng báo cáo: fraction_cut
TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE
timestamptz, cùng các thời điểm
timestamptz giữ thời điểm; PostgreSQL hiển thị nó theo múi giờ của phiên thay vì độ lệch mà mỗi giá trị có.
JSON (21c), and CLOB holding JSON
jsonb
Cùng các giá trị JSON; NULL của SQL mà bản xuất ghi thành 'null' vẫn là NULL.
BLOB, RAW(n), LONG RAW
bytea
Byte vẫn là byte.
ROWID, UROWID, XMLTYPE, SDO_GEOMETRY
text, và xml cho XMLTYPE
Các kiểu riêng của Oracle không có kiểu tương đương; giá trị của chúng giữ văn bản, kể cả giá trị ROWID, dù chúng không có ý nghĩa ngoài Oracle.
Dòng báo cáo: type_replaced
collations that ignore case (BINARY_CI)
so sánh chính xác
PostgreSQL so sánh văn bản chính xác, nên cột từng không phân biệt hoa thường trong Oracle giờ phân biệt Ana và ana.
Dòng báo cáo: case_insensitive_collation
identity columns, and a sequence a BEFORE INSERT trigger assigns
GENERATED BY DEFAULT AS IDENTITY, tiếp tục sau id lớn nhất
Các id đã sao chép được nạp nguyên trạng, và bộ đếm tiếp tục sau id lớn nhất. Cột được trình kích hoạt điền từ sequence (cách làm trước 12c) cũng là cột identity.
CREATE SEQUENCE
CREATE SEQUENCE với cùng các tùy chọn
Bản xuất ghi điểm sequence đã chạy đến làm START WITH của nó, nên nó tiếp tục từ đó.
virtual columns (GENERATED ALWAYS AS ... VIRTUAL)
cột tính toán, STORED
PostgreSQL 13 đến 17 chỉ lưu cột tính toán; công thức giữ nguyên, với || được viết để NULL được tính là rỗng như trong Oracle.
Dòng báo cáo: virtual_as_stored
virtual columns with functions IntoSQL doesn't write, and the || operator
một cột thường
Công thức không viết được cho PostgreSQL để lại một cột thường và một dòng trong báo cáo; giá trị mà bản xuất ghi cho cột ảo bị bỏ qua, và PostgreSQL không có gì để tính.
Dòng báo cáo: generated_not_translated
defaults with functions IntoSQL doesn't write (SYS_GUID(), ||)
không có giá trị mặc định
Giá trị mặc định không viết được cho PostgreSQL sẽ bị bỏ và được báo cáo.
Dòng báo cáo: default_not_translated
CHECK constraints
được chuyển đổi
Cùng các ràng buộc kiểm tra, được kiểm tra khi từng hàng được nạp.
CHECK constraints with functions IntoSQL doesn't write
không được tạo
Ràng buộc kiểm tra không viết được cho PostgreSQL sẽ bị bỏ và được báo cáo.
Dòng báo cáo: check_skipped
CHECK constraints that are DISABLE or ENABLE NOVALIDATE
không được tạo
Oracle không áp dụng các ràng buộc kiểm tra này cho các hàng đã có sẵn, nên các hàng có thể vi phạm chúng.
Dòng báo cáo: check_not_enforced
function-based, bitmap and domain indexes
không được tạo
IntoSQL ghi chỉ mục b-tree trên cột; hãy tạo lại các chỉ mục khác sau khi nạp.
Dòng báo cáo: index_skipped
foreign keys
khóa ngoại, sau các hàng
Các hàng được nạp theo thứ tự bất kỳ, và khóa kiểm tra chúng sau đó.
foreign keys to tables the export doesn't create, and DISABLE or NOVALIDATE ones
không được tạo
Khóa không thể tham chiếu tới bảng không tồn tại, và khóa mà Oracle không kiểm tra có thể có hàng không có hàng cha.
Dòng báo cáo: foreign_key_skipped
partitioned tables
một bảng chứa các hàng của mọi phân vùng
Các hàng giữ nguyên; hãy phân vùng lại bảng trong PostgreSQL nếu cần.
Dòng báo cáo: partitions_dropped
NOT NULL columns with values that become NULL
bỏ NOT NULL
Cột có giá trị phải chuyển thành NULL không thể giữ NOT NULL, nếu không quá trình nạp sẽ dừng.
Dòng báo cáo: not_null_relaxed
views, synonyms, types, packages, procedures, functions and other triggers
được liệt kê trong báo cáo
Mã của chúng viết bằng PL/SQL, nên được liệt kê để bạn tạo lại.
Dòng báo cáo: not_converted_objects
exports without CREATE TABLE (data only)
kiểu suy ra từ giá trị
Bản xuất chỉ có dữ liệu thì chỉ có các hàng, nên kiểu được suy ra từ giá trị.
Dòng báo cáo: no_schema
expressions in INSERT values other than the ones exports write
NULL
Trình chuyển đổi không chạy cơ sở dữ liệu thì không tính được chúng; to_date, to_timestamp, TO_CLOB, HEXTORAW và các hàm khác mà bản xuất ghi thì vẫn được đọc.
Dòng báo cáo: expression_value
types IntoSQL doesn't know, and object types
text
Văn bản chứa được mọi giá trị; hãy đổi kiểu sau khi nạp.
Dòng báo cáo: unknown_type
dates before year 1 and time zones given as region names
NULL
Giá trị không phải ngày sẽ thành NULL và báo cáo đếm nó.
Dòng báo cáo: date_out_of_range
NaN and Infinity in BINARY_FLOAT and BINARY_DOUBLE
NaN và Infinity được giữ
Các kiểu số dấu phẩy động của PostgreSQL chứa được NaN và vô cực.
NUL characters in text
bị xóa
Văn bản PostgreSQL không chứa được ký tự NUL. Ký tự này bị xóa và báo cáo đếm các giá trị.
Dòng báo cáo: nul_removed
text that isn't valid in its encoding
byte lỗi thành ký tự thay thế
Văn bản PostgreSQL phải là UTF-8 hợp lệ.
Dòng báo cáo: invalid_utf8_replaced
text decoded twice (ñ)
sao chép nguyên trạng
Tập lệnh chứa đúng các ký tự này, nên chúng được sao chép; báo cáo chỉ ra chúng.
Dòng báo cáo: mojibake_suspected
| Trong Oracle | Trong PostgreSQL | Dòng báo cáo |
|---|---|---|
| BOOLEAN (23ai) | booleanTRUE và FALSE vẫn là true và false. | |
| VARCHAR2(n BYTE|CHAR), NVARCHAR2(n), CHAR(n), NCHAR(n), CLOB, NCLOB, LONG | varchar(n) và textĐộ dài đếm theo ký tự, dù Oracle đếm theo byte hay ký tự, nên mọi giá trị đều vừa. | |
| NUMBER, NUMBER(p,s), FLOAT(b) | numeric(p,s), hoặc bigintNUMBER giữ mọi chữ số; NUMBER không có độ chính xác mà mọi giá trị đều là số nguyên tối đa 18 chữ số sẽ thành số nguyên 64 bit, còn thang số âm chứa đủ bấy nhiêu chữ số trước dấu thập phân. | |
| DATE, TIMESTAMP(p) | timestamp(p)DATE của Oracle chứa thời gian đến từng giây, nên nó là ngày và giờ. Bản xuất trong phiên kiểu Mỹ hoặc Đức ghi ngày mà không có giờ hay thế kỷ (DD-MON-RR); hãy xuất trong phiên ISO (SYYYY-MM-DD HH24:MI:SS) để giữ chúng. | |
| TIMESTAMP(7) to TIMESTAMP(9) | sáu chữ số của giây, chữ số thứ bảy bị cắtPostgreSQL giữ đến micro giây; chữ số thứ bảy (100 nano giây) bị cắt, không bao giờ làm tròn, nên không giá trị nào nhảy sang giây hay ngày kế tiếp. | fraction_cut |
| TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE | timestamptz, cùng các thời điểmtimestamptz giữ thời điểm; PostgreSQL hiển thị nó theo múi giờ của phiên thay vì độ lệch mà mỗi giá trị có. | |
| JSON (21c), and CLOB holding JSON | jsonbCùng các giá trị JSON; NULL của SQL mà bản xuất ghi thành 'null' vẫn là NULL. | |
| BLOB, RAW(n), LONG RAW | byteaByte vẫn là byte. | |
| ROWID, UROWID, XMLTYPE, SDO_GEOMETRY | text, và xml cho XMLTYPECác kiểu riêng của Oracle không có kiểu tương đương; giá trị của chúng giữ văn bản, kể cả giá trị ROWID, dù chúng không có ý nghĩa ngoài Oracle. | type_replaced |
| collations that ignore case (BINARY_CI) | so sánh chính xácPostgreSQL so sánh văn bản chính xác, nên cột từng không phân biệt hoa thường trong Oracle giờ phân biệt Ana và ana. | case_insensitive_collation |
| identity columns, and a sequence a BEFORE INSERT trigger assigns | GENERATED BY DEFAULT AS IDENTITY, tiếp tục sau id lớn nhấtCác id đã sao chép được nạp nguyên trạng, và bộ đếm tiếp tục sau id lớn nhất. Cột được trình kích hoạt điền từ sequence (cách làm trước 12c) cũng là cột identity. | |
| CREATE SEQUENCE | CREATE SEQUENCE với cùng các tùy chọnBản xuất ghi điểm sequence đã chạy đến làm START WITH của nó, nên nó tiếp tục từ đó. | |
| virtual columns (GENERATED ALWAYS AS ... VIRTUAL) | cột tính toán, STOREDPostgreSQL 13 đến 17 chỉ lưu cột tính toán; công thức giữ nguyên, với || được viết để NULL được tính là rỗng như trong Oracle. | virtual_as_stored |
| virtual columns with functions IntoSQL doesn't write, and the || operator | một cột thườngCông thức không viết được cho PostgreSQL để lại một cột thường và một dòng trong báo cáo; giá trị mà bản xuất ghi cho cột ảo bị bỏ qua, và PostgreSQL không có gì để tính. | generated_not_translated |
| defaults with functions IntoSQL doesn't write (SYS_GUID(), ||) | không có giá trị mặc địnhGiá trị mặc định không viết được cho PostgreSQL sẽ bị bỏ và được báo cáo. | default_not_translated |
| CHECK constraints | được chuyển đổiCùng các ràng buộc kiểm tra, được kiểm tra khi từng hàng được nạp. | |
| CHECK constraints with functions IntoSQL doesn't write | không được tạoRàng buộc kiểm tra không viết được cho PostgreSQL sẽ bị bỏ và được báo cáo. | check_skipped |
| CHECK constraints that are DISABLE or ENABLE NOVALIDATE | không được tạoOracle không áp dụng các ràng buộc kiểm tra này cho các hàng đã có sẵn, nên các hàng có thể vi phạm chúng. | check_not_enforced |
| function-based, bitmap and domain indexes | không được tạoIntoSQL ghi chỉ mục b-tree trên cột; hãy tạo lại các chỉ mục khác sau khi nạp. | index_skipped |
| foreign keys | khóa ngoại, sau các hàngCác hàng được nạp theo thứ tự bất kỳ, và khóa kiểm tra chúng sau đó. | |
| foreign keys to tables the export doesn't create, and DISABLE or NOVALIDATE ones | không được tạoKhóa không thể tham chiếu tới bảng không tồn tại, và khóa mà Oracle không kiểm tra có thể có hàng không có hàng cha. | foreign_key_skipped |
| partitioned tables | một bảng chứa các hàng của mọi phân vùngCác hàng giữ nguyên; hãy phân vùng lại bảng trong PostgreSQL nếu cần. | partitions_dropped |
| NOT NULL columns with values that become NULL | bỏ NOT NULLCột có giá trị phải chuyển thành NULL không thể giữ NOT NULL, nếu không quá trình nạp sẽ dừng. | not_null_relaxed |
| views, synonyms, types, packages, procedures, functions and other triggers | được liệt kê trong báo cáoMã của chúng viết bằng PL/SQL, nên được liệt kê để bạn tạo lại. | not_converted_objects |
| exports without CREATE TABLE (data only) | kiểu suy ra từ giá trịBản xuất chỉ có dữ liệu thì chỉ có các hàng, nên kiểu được suy ra từ giá trị. | no_schema |
| expressions in INSERT values other than the ones exports write | NULLTrình chuyển đổi không chạy cơ sở dữ liệu thì không tính được chúng; to_date, to_timestamp, TO_CLOB, HEXTORAW và các hàm khác mà bản xuất ghi thì vẫn được đọc. | expression_value |
| types IntoSQL doesn't know, and object types | textVăn bản chứa được mọi giá trị; hãy đổi kiểu sau khi nạp. | unknown_type |
| dates before year 1 and time zones given as region names | NULLGiá trị không phải ngày sẽ thành NULL và báo cáo đếm nó. | date_out_of_range |
| NaN and Infinity in BINARY_FLOAT and BINARY_DOUBLE | NaN và Infinity được giữCác kiểu số dấu phẩy động của PostgreSQL chứa được NaN và vô cực. | |
| NUL characters in text | bị xóaVăn bản PostgreSQL không chứa được ký tự NUL. Ký tự này bị xóa và báo cáo đếm các giá trị. | nul_removed |
| text that isn't valid in its encoding | byte lỗi thành ký tự thay thếVăn bản PostgreSQL phải là UTF-8 hợp lệ. | invalid_utf8_replaced |
| text decoded twice (ñ) | sao chép nguyên trạngTập lệnh chứa đúng các ký tự này, nên chúng được sao chép; báo cáo chỉ ra chúng. | mojibake_suspected |
Nạp tập lệnh vào PostgreSQL
Tập lệnh tạo bảng, sao chép các hàng, rồi thêm khóa, chỉ mục và khóa ngoại, nên nạp nhanh và dừng ở lỗi đầu tiên.
psql -v ON_ERROR_STOP=1 -d mydb -f oracle.postgresql.sqlKhóa ngoại được thêm dưới dạng NOT VALID rồi được xác thực. Nếu một hàng trỏ tới hàng không tồn tại, tập lệnh cho bạn biết ràng buộc nào, thay vì thất bại giữa chừng.
Với bản dump lớn, hãy tạo cơ sở dữ liệu trước và chạy tập lệnh bằng psql trên cùng máy với máy chủ.
IntoSQL Pro nạp tệp thẳng vào PostgreSQL từ ứng dụng máy tính hoặc dòng lệnh, không cần tạo tập lệnh.
Tạo bản dump Oracle để có kết quả tốt nhất
Trình chuyển đổi đọc những gì bản dump chứa. Các tùy chọn sau giữ lại nhiều dữ liệu hơn trong đó:
- Trong SQL Developer, chọn Tools, Database Export, với DDL và định dạng dữ liệu Insert. SQLcl ghi ra cùng nội dung với SET SQLFORMAT INSERT.
- Chạy ALTER SESSION SET NLS_DATE_FORMAT = 'SYYYY-MM-DD HH24:MI:SS' trước khi xuất: định dạng mặc định ghi ngày mà không có giờ hay thế kỷ.
- Tệp .dmp từ exp hoặc expdp là nhị phân: hãy nhập nó vào một cơ sở dữ liệu Oracle, chẳng hạn Oracle Database Free trong Docker, rồi xuất bằng SQL Developer.
Những gì không được chuyển đổi
Khung nhìn, gói, thủ tục, hàm, trình kích hoạt, kiểu và từ đồng nghĩa được viết bằng PL/SQL. Chúng được liệt kê theo tên trong báo cáo, không bao giờ bị bỏ âm thầm, để bạn viết lại cho PostgreSQL.
Câu hỏi về Oracle sang PostgreSQL
Chưa có câu trả lời ở đây? Hãy viết cho chúng tôi từ trang liên hệ, sẽ có người trả lời. Trang liên hệ
Bản dump của tôi có bị tải lên không?
Không. Trình chuyển đổi chạy trong trình duyệt và đọc bản dump từ ổ đĩa theo từng phần, nên nó không bao giờ rời khỏi máy tính của bạn. Ứng dụng máy tính và dòng lệnh cũng chuyển đổi ngay trên máy tính của bạn.
Bản dump có thể lớn đến đâu?
Trình chuyển đổi không bao giờ giữ toàn bộ bản dump trong bộ nhớ: nó đọc tệp hai lần, theo từng đoạn, và ghi tập lệnh trong lúc đọc. Bản dump nhiều gigabyte vẫn chuyển đổi được trong trình duyệt, trong ứng dụng máy tính và bằng dòng lệnh.
Tôi có chuyển đổi được tệp .dmp từ exp hoặc expdp không?
Không trực tiếp: Data Pump và Export gốc ghi một định dạng nhị phân mà chỉ Oracle đọc được. Hãy nhập nó vào bất kỳ cơ sở dữ liệu Oracle nào, Oracle Database Free chạy trong Docker, rồi xuất bằng Database Export của SQL Developer hoặc SQLcl. Trình chuyển đổi sẽ báo điều này khi nhận được tệp .dmp.
Bản xuất có thể đến từ những phiên bản Oracle nào?
Bản xuất từ SQL Developer và SQLcl, với định nghĩa bảng của DBMS_METADATA, từ Oracle 11g trở lên. Mọi bản xuất thử nghiệm đến từ Oracle 21c và 23ai, trong các phiên kiểu Mỹ, Đức và ISO, và được so với nguồn từng ô một.
NUMBER, DATE và các kiểu Oracle khác sẽ ra sao?
NUMBER thành numeric, hoặc bigint khi mọi giá trị là số nguyên; DATE thành timestamp, giữ nguyên giờ; CLOB thành text, BLOB và RAW thành bytea, BINARY_DOUBLE thành double precision với NaN và Infinity, còn interval thành interval.
Cột identity và sequence có được giữ không?
Có. Cột identity vẫn là cột identity và tiếp tục sau id lớn nhất, cột được trình kích hoạt điền từ sequence cũng vậy. Sequence tiếp tục từ điểm mà bản xuất ghi là chúng đã đạt tới.
Còn gói PL/SQL, thủ tục và trình kích hoạt thì sao?
Chúng được liệt kê theo tên trong báo cáo và không được chuyển đổi, vì mỗi cơ sở dữ liệu viết chúng bằng ngôn ngữ riêng.
Tập lệnh nạp được trên những phiên bản PostgreSQL nào?
PostgreSQL 13 đến 18. Cùng một tập lệnh nạp được trên từng phiên bản, và dừng ở lỗi đầu tiên nếu có sự cố.