Tiền của tôi có tên sai chính tả. Tôi nhận thấy trong thông báo lỗi mà bạn có
OmniCloud_App_accounts
OmniCloud_App_user
Bảng thứ hai sử dụng số ít. Tình cờ không có bảng thứ hai như thế này:
OmniCloud_App_users
Ngoài ra, việc sử dụng các mã nhận dạng trường hợp hỗn hợp trong PostgreSQL là một nguồn uy tín lớn ở đây trên SO. Sớm muộn gì nó cũng sẽ cắn bạn. Nạn nhân của sự điên rồ đó là những người thường xuyên ở đây. Có thể có bất kỳ bảng nào có tên này - và bạn đã quên dấu ngoặc kép trong "OmniCloud_App_user"
ở đâu đó?
omnicloud_app_user
Đó là hoặc giao dịch lưu người dùng chưa được cam kết. Bạn chỉ có thể tạo người dùng (và chưa có tài khoản) và kiểm tra xem nó có nằm trong cơ sở dữ liệu phù hợp trong bảng và có đúng ID không?
Chỉnh sửa:các công cụ để chẩn đoán sự cố
Nếu bạn biết mà người dùng đang được tạo, thì câu hỏi đặt ra là:mã khóa nước ngoài có user_id_refs_id_468fbcec324e93d2
không nhìn vào đúng nơi? Cùng một cơ sở dữ liệu? Lược đồ giống nhau? Cùng một bảng?
Để tìm ra bảng nào tồn tại trong cơ sở dữ liệu của bạn, hãy thử truy vấn sau (nếu bạn có các đặc quyền cần thiết):
SELECT n.nspname AS schema_name
,c.relname AS table_name
,c.relhastriggers
,c.reltuples
FROM pg_catalog.pg_class c
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relname ~~* '%user%'
AND c.relkind = 'r'
AND nspname <> 'pg_catalog';
Hiển thị tất cả các bảng trong tất cả các lược đồ có tên "người dùng", không phân biệt chữ hoa chữ thường. Thêm vào đó nếu bảng có trình kích hoạt ( could gây ra sự cố của bạn) và có bao nhiêu hàng trong đó (ước tính được cập nhật bởi ANALYZE
). Có thể giúp bạn dẫn đầu ...
Bạn cũng có thể sử dụng lệnh meta \d
của máy khách dòng lệnh tiêu chuẩn (thiết bị đầu cuối tương tác) psql
.
Tôi sẽ chạy một trường hợp thử nghiệm và yêu cầu máy chủ postgres ghi lại mọi thứ mà nó nhận được. Đặt tham số này cho mục đích đó:
set log_statement = 'all';
Hướng dẫn về thông số ghi nhật ký .
Hướng dẫn về cách đặt tham số .