2015-09-10 15 views
11

Tôi bắt đầu chơi với Ecto để tìm hiểu nó. Đúng như dự đoán Tôi sai lầm (với mô hình người dùng) và tôi nhận được một lỗi trong khi chạy một di cư:Cách xóa cơ sở dữ liệu PostgreSQL được tạo bằng Phoenix/Ecto

(Postgrex.Error) ERROR (duplicate_table): relation "users" already exists 

Bây giờ, tôi muốn để làm sạch cơ sở dữ liệu bằng cách sử dụng vỏ/pgAdmin III để tôi có thể sau đó sửa chữa mô hình của tôi và chạy lại di chuyển. Tôi đã thiết lập PgAdmin nhưng tôi không thể thấy bất kỳ bảng "người dùng" nào ... Cách tốt nhất để làm điều này (với Ecto, shell PostgreSQL hoặc PgAdmin) là gì?

+0

Nếu tất cả các bảng (lượt xem, chuỗi, ...) được sở hữu bởi cùng một người dùng, sau đó 'thả thuộc sở hữu bởi foobar' là phương pháp nhanh nhất (trong đó 'foobar' là tên của người dùng Postgres đang sở hữu mọi thứ) –

+0

Xong! Bạn không muốn làm cho câu trả lời này để tôi có thể chấp nhận nó? BTW bạn có bất kỳ hướng dẫn quản trị Postgres nào bạn muốn giới thiệu không? –

Trả lời

15

Với ecto bạn sẽ nhận được một số tác vụ kết hợp mới cho dự án của mình để xử lý cơ sở dữ liệu. Họ có thể giúp bạn:

  • mix ecto.create - tạo cơ sở dữ liệu được sử dụng bởi kho của bạn như backend
  • mix ecto.migrate - chạy di cư cấp phát kho
  • mix ecto.drop của bạn - giảm cơ sở dữ liệu

Có một số nhiệm vụ mới hơn, nhưng ba nhiệm vụ này sẽ khắc phục được sự cố của bạn. Hãy thử mix --help cho các tác vụ mới khác. Trong trường hợp của bạn: chạy lần đầu mix ecto.drop để thả cơ sở dữ liệu, mix ecto.create để tạo lại nó và cuối cùng là mix ecto.migrate để di chuyển các bảng và bạn đã bắt đầu lại.

tôi đã thiết lập một số phím tắt bàn phím để gõ các lệnh nhanh hơn:

  • mec là một bí danh cho mix ecto.create
  • mem là một bí danh cho mix ecto.migrate
  • med là một bí danh cho mix ecto.drop
+0

Điều này trả lời phần "được tạo bằng Phoenix/Ecto" của câu hỏi. – Morkrom

2

Nếu tất cả bảng (lượt xem, trình tự, ...) đều thuộc sở hữu của cùng một người dùng, sau đó

drop owned by foobar; 

là phương pháp nhanh nhất (nơi foobar là tên của tất cả mọi thứ Postgres người dùng sở hữu) . Điều này thực sự sẽ xóa mọi thứ sở hữu bởi người dùng đó bất kể cách thức này được tạo ra. Bạn cũng không thể sử dụng điều này nếu vì lý do nào đó bạn đã tạo mọi thứ với superuser (thường là postgres) - nhưng bạn không nên sử dụng nó cho những thứ "thông thường".

Các vấn đề liên quan