WhyPik DocsVề trang chính

Lập trình viên / Tra cứu

Nhập JSON, SQL và dữ liệu có sẵn

Luồng tự phục vụ: xuất từ nền tảng cũ → xem trước cấu trúc → tạo bảng → nhập dữ liệu → cấu hình quyền.

An toàn và phạm vi

Nhập cấu trúc chỉ tạo bảng mới, giữ nguyên bảng và dữ liệu hiện có. SQL chỉ được phân tích thành schema DTO; không gửi SQL gốc đến PostgreSQL. Preview không tạo tài nguyên. Cả Free/Starter/Pro có cùng chức năng này, khác quota đang công bố.

Đây là bộ nhập cấu trúc được WhyPik hỗ trợ, chưa phải dịch vụ PostgreSQL nguyên bản. File có trigger, function, view, CHECK/EXCLUDE hoặc ràng buộc nâng cao sẽ bị chặn toàn bộ với vị trí và tính năng chưa hỗ trợ; không tự bỏ các phần đó. Giữ nguyên file nguồn nếu ứng dụng cần đầy đủ logic PostgreSQL.

Để nhập lại cùng tên và thay thế toàn bộ cấu trúc, dùng Database → Cài đặt → Làm trống Database trước; đọc kỹ phạm vi xóa và giới hạn khôi phục trong hướng dẫn Backup. Không dùng xóa từng bảng cho mục đích này vì tên đã xóa riêng lẻ vẫn được giữ để bảo vệ khôi phục.

SQL được hỗ trợ

Dùng CREATE TABLE, CREATE INDEX/CREATE UNIQUE INDEX; có thể ALTER TABLE ... ADD để khai báo PRIMARY KEY, FOREIGN KEY hoặc UNIQUE cho bảng cùng file. Chấp nhận BEGIN/COMMIT và một schema nguồn; schema được ánh xạ vào vùng riêng của dự án. Không giữ tên schema PostgreSQL gốc. Tên bảng dùng chữ thường, số, dấu gạch dưới.

  • Kiểu: uuid, integer/int, bigint, numeric/decimal, text/varchar(n), boolean, date, timestamptz, jsonb; timestamp WITH TIME ZONE.
  • Một cột PRIMARY KEY UUID/số nguyên. Khóa ngoại một cột, chỉ RESTRICT/NO ACTION.
  • DEFAULT literal, gen_random_uuid(), now(), serial/bigserial hoặc GENERATED BY DEFAULT AS IDENTITY.
  • Không hỗ trợ dump nguyên máy, INSERT/COPY SQL, DROP, FUNCTION, TRIGGER, GRANT, EXTENSION, CHECK tùy ý, khóa chính ghép, CASCADE, biểu thức default tùy ý. Không bỏ qua âm thầm lệnh lạ.
sql
CREATE TABLE servers (
  id bigint PRIMARY KEY,
  name varchar(120) NOT NULL
);
CREATE TABLE players (
  id bigint PRIMARY KEY,
  server_id bigint NOT NULL REFERENCES servers(id),
  nickname varchar(100) NOT NULL,
  modified timestamptz DEFAULT now() NOT NULL
);
CREATE INDEX players_server ON players (server_id);

JSON cấu trúc cho AI

Yêu cầu AI trả đúng object {tables:[...]}; không thêm SQL thực thi, policies hoặc secret. Ví dụ notes dùng Project Auth owner; UI cho cấu hình quyền sau khi tạo. Các quan hệ dùng references với table, column, alias, reverse_alias tùy chọn và on_delete:restrict.

json
{
  "tables": [
    {
      "name": "notes",
      "columns": [
        {
          "name": "id",
          "type": "uuid",
          "primary": true,
          "default": {
            "kind": "uuid"
          }
        },
        {
          "name": "owner_id",
          "type": "uuid",
          "identity": "owner"
        },
        {
          "name": "title",
          "type": "text",
          "max_length": 4096
        }
      ],
      "policies": []
    }
  ]
}

Chuyển từ database khác

Xuất schema dạng CREATE TABLE đơn giản hoặc nhờ AI chuyển schema sang JSON WhyPik, đối chiếu kiểu/khóa/quan hệ trong preview. Xuất mỗi bảng thành CSV UTF-8 có hàng tên cột hoặc mảng JSON object. Nhập bảng cha trước bảng con. Giữ ID cũ để quan hệ không đứt. Không tải mật khẩu/kết nối database gốc lên form nhập.

  • PostgreSQL/Supabase: bộ nhập này phù hợp cấu trúc bảng đơn giản và CSV/JSON. File pg_dump hoặc SQL có logic PostgreSQL nâng cao chưa được nhập nguyên vẹn. Không xóa trigger/ràng buộc khỏi file nếu ứng dụng phụ thuộc vào chúng.
  • MySQL/SQLite: chuyển AUTO_INCREMENT, datetime không múi giờ và kiểu riêng sang kiểu WhyPik trước; CSV/JSON là đường chuyển dữ liệu chung.
  • Firebase/Firestore: collection cần được ánh xạ thành bảng; object lồng có thể vào jsonb hoặc tách bảng/khóa ngoại. Không có connector kết nối trực tiếp tự sao chép.
  • Tài khoản Auth không nhập bằng CSV bảng thường. Với danh tính cũ, dùng custom token do backend tin cậy ký hoặc luồng đăng ký/xác minh; không nhập password hash không tương thích.

CSV/JSON dữ liệu

Chọn bảng đích. CSV không tự đoán kiểu: boolean là true/false, null là \N; ô trống vẫn là chuỗi trống. JSON dùng chuỗi cho bigint/numeric để không mất chính xác; cột không có trong file dùng default nếu bảng có. Không đánh giá công thức Excel.

text
id,server_id,nickname
9007199254740993,1,Player A

JSON tương đương:
[{"id":"9007199254740993","server_id":"1","nickname":"Player A"}]

Giới hạn, tiến độ và thử lại

Form cấu trúc mặc định chọn SQL. Khi chọn tệp, biểu tượng xoay và dòng Đang đọc và nạp nội dung file xuất hiện cạnh ô chọn. Chờ thông báo Đã nạp nội dung file rồi bấm Kiểm tra & xem trước. Đuôi .json/.sql/.csv được nhận theo loại nội dung đang nhập; có thể dán trực tiếp thay vì chọn file.

Cấu trúc tối đa 200 KB ở form. File dữ liệu tối đa 5 MB/5.000 dòng mỗi lần chọn; UI chia thành lô tối đa 100 dòng và dưới giới hạn request. Tất cả lô được kiểm tra kiểu trước khi ghi; FK/unique/quota được kiểm tra lại lúc ghi. Một lô commit trọn vẹn hoặc rollback; cả file không phải một transaction.

Không upsert hay ghi đè khi trùng khóa. Lô lỗi dừng quy trình; các lô trước giữ nguyên. Giữ trang mở và dùng Thử lại lô hiện tại để giữ payload/write_token/Idempotency-Key. Nếu đóng trang, đối chiếu các ID đã nhập trước khi chọn file lại; chưa có resume bền qua reload. ID sequence được đưa lên sau ID đã nhập để insert tiếp theo không trùng.

File lớn hơn: chia theo bảng và phần, giữ thứ tự cha–con, hoặc gọi REST import theo lô. Không có đồng bộ liên tục giữa hai hệ thống; cần dừng ghi nguồn hoặc đối soát phần thay đổi khi chuyển hẳn.

Trong một lô, cột tự tăng phải có ID ở tất cả dòng hoặc bỏ ID ở tất cả dòng. Khi chuyển dữ liệu cũ, nên giữ ID cho mọi dòng để giữ quan hệ.

Chưa có Query SQL tự do

WhyPik chưa có tab chạy SQL trực tiếp. Dùng Dữ liệu để lọc, sắp xếp, xem/sửa bản ghi; dùng Data API/SDK để truy vấn; SQL trong Nhập cấu trúc & dữ liệu chỉ được phân tích thành cấu trúc hỗ trợ. Không chạy lệnh SET FOREIGN_KEY_CHECKS, PREPARE hoặc DROP từ MySQL. Database ứng dụng dùng PostgreSQL và cấu trúc/quyền do WhyPik quản lý.

Import trong mode migration

Migration chỉ quản lý cấu trúc và policy. Nhập cấu trúc SQL/JSON trực tiếp bị khóa để không lệch history. Nhập bản ghi CSV/JSON vào bảng đã có vẫn giữ preview, confirmation, batching và quyền hiện tại. Nếu muốn nhận Database có sẵn vào Git, dùng baseline đã kiểm chứng, không import schema đè lên managed Database.

Trong bài này