Làm cách nào để sửa lỗi di chuyển không tìm thấy?

Hướng dẫn này mô tả cách giải quyết các sự cố với Prisma Migrate trong môi trường phát triển, thường liên quan đến việc đặt lại cơ sở dữ liệu của bạn. Để khắc phục sự cố tập trung vào sản xuất, hãy xem

  • Khắc phục sự cố sản xuất
  • Cơ sở dữ liệu sản xuất bản vá/sửa lỗi nóng

Hướng dẫn này không áp dụng cho MongoDB.
Thay vì

$npx prisma migrate dev

9,

$npx prisma migrate dev

0 được sử dụng cho MongoDB.

Xử lý xung đột lịch sử di chuyển

Xung đột lịch sử di chuyển xảy ra khi có sự khác biệt giữa thư mục di chuyển trong hệ thống tệp và bảng

$npx prisma migrate dev

0 trong cơ sở dữ liệu

Nguyên nhân của xung đột lịch sử di cư trong môi trường phát triển

  • Di chuyển đã được áp dụng sau đó được sửa đổi
  • Di chuyển đã được áp dụng bị thiếu trong hệ thống tệp

Trong môi trường phát triển, việc chuyển đổi giữa các nhánh tính năng có thể dẫn đến xung đột lịch sử vì bảng

$npx prisma migrate dev

0 chứa các lần di chuyển từ

$npx prisma migrate dev

2 và việc chuyển sang

$npx prisma migrate dev

3 có thể khiến một số lần di chuyển đó biến mất

Ghi chú. Bạn không bao giờ nên cố ý xóa hoặc chỉnh sửa quá trình di chuyển, vì điều này có thể dẫn đến sự khác biệt giữa quá trình phát triển và sản xuất

Khắc phục xung đột lịch sử di chuyển trong môi trường phát triển

Nếu Prisma Migrate phát hiện xung đột lịch sử di chuyển khi bạn chạy

$npx prisma migrate dev

4, CLI sẽ yêu cầu đặt lại cơ sở dữ liệu và áp dụng lại lịch sử di chuyển

Lược đồ trôi

Sự trôi dạt lược đồ cơ sở dữ liệu xảy ra khi lược đồ cơ sở dữ liệu của bạn không đồng bộ với lịch sử di chuyển của bạn - lược đồ cơ sở dữ liệu đã 'trôi dạt' khỏi nguồn gốc của sự thật

Nguyên nhân khiến lược đồ trôi dạt trong môi trường phát triển

Schema drift có thể xảy ra nếu

  • Lược đồ cơ sở dữ liệu đã được thay đổi mà không sử dụng di chuyển - ví dụ: bằng cách sử dụng

    $npx prisma migrate dev

    5 hoặc thay đổi lược đồ cơ sở dữ liệu theo cách thủ công

Ghi chú. Cơ sở dữ liệu bóng được yêu cầu để phát hiện sự trôi dạt của lược đồ và do đó chỉ có thể được thực hiện trong môi trường phát triển

Sửa lỗi trôi dạt lược đồ trong môi trường phát triển

Nếu bạn đã thực hiện các thay đổi thủ công đối với cơ sở dữ liệu mà bạn không muốn giữ lại hoặc có thể dễ dàng sao chép trong lược đồ Prisma

  1. Đặt lại cơ sở dữ liệu của bạn

    $npx prisma migrate reset

  • Sao chép các thay đổi trong lược đồ Prisma và tạo một lần di chuyển mới

    $npx prisma migrate dev

  • Nếu bạn đã thực hiện các thay đổi thủ công đối với cơ sở dữ liệu mà bạn muốn giữ lại, bạn có thể

    1. Nội quan cơ sở dữ liệu

      ________số 8

      Prisma sẽ cập nhật lược đồ của bạn với những thay đổi được thực hiện trực tiếp trong cơ sở dữ liệu

    2. Tạo một lần di chuyển mới để bao gồm các thay đổi nội quan trong lịch sử di chuyển của bạn

      $npx prisma migrate dev --name introspected_change

      Prisma Migrate sẽ nhắc bạn đặt lại, sau đó áp dụng tất cả các lần di chuyển hiện có và một lần di chuyển mới dựa trên các thay đổi được xem xét nội tâm. Cơ sở dữ liệu và lịch sử di chuyển của bạn hiện được đồng bộ hóa, bao gồm các thay đổi thủ công của bạn

    Di chuyển không thành công

    Nguyên nhân của việc di chuyển không thành công trong môi trường phát triển

    Di chuyển có thể thất bại nếu

    • Bạn sửa đổi di chuyển trước khi chạy nó và gây ra lỗi cú pháp
    • Bạn thêm cột (

      $npx prisma migrate dev

      6) bắt buộc vào bảng đã có dữ liệu
    • Quá trình di chuyển dừng đột ngột
    • Cơ sở dữ liệu ngừng hoạt động ở giữa quá trình di chuyển

    Mỗi lần di chuyển trong bảng

    $npx prisma migrate dev

    0 có một cột

    $npx prisma migrate dev

    8 lưu trữ lỗi

    Sửa lỗi di chuyển không thành công trong môi trường phát triển

    Cách dễ nhất để xử lý việc di chuyển không thành công trong môi trường nhà phát triển là giải quyết nguyên nhân gốc rễ và đặt lại cơ sở dữ liệu. Ví dụ

    • Nếu bạn đã gây ra lỗi cú pháp SQL bằng cách chỉnh sửa cơ sở dữ liệu theo cách thủ công, hãy cập nhật tệp

      $npx prisma migrate dev

      9 bị lỗi và đặt lại cơ sở dữ liệu

      $npx prisma migrate dev

      4
    • Nếu bạn đã đưa ra một thay đổi trong lược đồ Prisma mà không thể áp dụng cho cơ sở dữ liệu có dữ liệu (ví dụ: một cột bắt buộc trong bảng có dữ liệu)

      1. Xóa tệp

        $npx prisma migrate dev

        9

      2. Sửa đổi lược đồ - ví dụ: thêm giá trị mặc định vào trường bắt buộc

      3. Di chuyển

        $npx prisma migrate dev

        6

        Prisma Migrate sẽ nhắc bạn đặt lại cơ sở dữ liệu và áp dụng lại tất cả các lần di chuyển

    • Nếu có điều gì đó làm gián đoạn quá trình di chuyển, hãy đặt lại cơ sở dữ liệu

      $npx prisma migrate dev

      4

    Prisma Migrate và PgBouncer

    Bạn có thể gặp lỗi sau nếu cố chạy các lệnh Prisma Migrate trong môi trường sử dụng PgBouncer để tổng hợp kết nối

    $npx prisma migrate dev

    8

    Xem giải pháp thay thế Prisma Migrate và PgBouncer để biết thêm thông tin và giải pháp thay thế. Theo dõi vấn đề GitHub #6485 để cập nhật

    Làm cách nào để chạy lại tất cả các lần di chuyển trong laravel?

    NẾU bạn muốn di chuyển lại tất cả cơ sở dữ liệu, bạn chỉ cần thực hiện. php nghệ nhân di chuyển. làm mới . NẾU bạn muốn đảm bảo cơ sở dữ liệu của mình sạch sẽ với những thay đổi mới nhất, bạn có thể bỏ toàn bộ bảng cơ sở dữ liệu của mình và thực hiện di chuyển lại thủ công php. Ngoài ra, bạn có thể thử php artisan mig --seed nếu bạn có bất kỳ seeder nào.

    Làm cách nào để chạy di chuyển cụ thể trong laravel?

    Để chạy quá trình di chuyển cụ thể trong Laravel, bạn cần phải sử dụng tùy chọn --path với lệnh di chuyển nghệ nhân php . Hãy lấy một ví dụ đơn giản, chúng tôi có '2019_12_04_131405_create_payments_table. php' trong thư mục cơ sở dữ liệu/di chuyển và chúng tôi muốn chạy quá trình di chuyển này.

    Làm cách nào để khôi phục di chuyển cụ thể trong laravel?

    Làm cách nào để lùi quá trình di chuyển trong Laravel? .
    Đã tạo di chuyển mới. nghệ nhân php làm. di chuyển tạo_posts_table. .
    Phục hồi lần di chuyển cuối cùng. nghệ nhân php di chuyển. phục hồi
    Phục hồi lần di chuyển cuối cùng bằng Bước. bạn có thể chuyển tùy chọn --step với số lần di chuyển lùi lại từ lần trước. .
    Phục hồi tất cả các di chuyển