2013-07-13 32 views
9

Tôi thực sự không biết làm thế nào tôi đã thực hiện nó: nhưng tôi có một bảng không tên vào DB postgres của tôi. Không cần phải nói rằng một cái bàn như vậy là vấn đề, nó không bị xóa đi, bạn cũng không thể thay đổi nó theo bất kỳ cách nào.Bảng không tên có vấn đề trong Postgresql

Đây là một hình ảnh của nó trông như thế trên pgAdmin explorer:

nameless table

Đối với lời tuyên bố của nó, nó đi như thế này:

CREATE TABLE 
(
    _id_ integer NOT NULL DEFAULT nextval('bu_b__id__seq'::regclass), 
    pt_utilisateur integer, 
    pt_date date, 
    lon double precision, 
    lat double precision, 
    CONSTRAINT PRIMARY KEY (_id_) 
) 

Vì vậy, một câu hỏi đơn giản: làm thế nào Tôi có thể xóa bảng này (vì cố gắng xóa nó đi kèm với việc sử dụng tên của nó ... không tồn tại!)?

Trân trọng.

Trả lời

6

Nếu đây là KHÔNG về một bảng có tên là không thể hiển thị do các vấn đề/font encoding bạn có thể làm điều này:

  • Xác định OID bảng từ catalog hệ thống.
  • Đặt tên bảng mới trong danh mục hệ thống thành tên tạm thời. Sử dụng OID làm thông tin nhận dạng
  • Đổi tên bảng thành thứ gì đó hữu ích (hoặc chỉ cần thả bảng).

Điều này tất nhiên giả định rằng bạn có quyền truy cập siêu người dùng vào cơ sở dữ liệu.

Bước đầu tiên - xác định OID từ các cửa hàng:

SELECT oid, relname FROM pg_class WHERE length(relname) <= 1; 

Nếu bạn không nhận được bất kỳ kết quả bảng một tên - nó chỉ là không thể hiển thị. Trong trường hợp này, chỉ cần bỏ qua phần WHERE và nhìn bằng mắt của bạn.

Bước thứ hai - thay đổi danh mục hệ thống:

UPDATE pg_class SET relname = 'foo' WHERE oid = /*OID from step 1*/; 

Trong mọi trường hợp - không dừng lại ở đây, bạn phải tiến hành.

Bước thứ ba - dọn dẹp

cửa hàng PostgreSQL tên bảng trong hơn một nơi (ví dụ pg_type). Một số công cụ có thể phụ thuộc vào điều này. Để làm sạch điều này, bạn phải thả bảng (và do đó các công cụ chưa được đặt tên) HOẶC bạn phải đổi tên lại bảng bằng các công cụ chính thức.

ALTER TABLE foo RENAME TO /*somthing real*/; 

hoặc

DROP TABLE foo; 

Những cảnh báo thông thường: Bạn đang nhai trong ruột của PostgreSQL - không làm những điều ngớ ngẩn và làm điều đó vào rủi ro riêng của bạn :-)

+0

Yeah! Điều này hoàn toàn hoạt động, cảm ơn rất nhiều! – Akheloes

0

tôi don không sử dụng Postgresql nhưng tôi đoán bạn có thể xóa bảng đó bằng cách làm theo các bước sau:

  1. Lấy sql dump
  2. Xóa cơ sở dữ liệu
  3. Di rằng bảng không tên từ các bãi chứa và phục hồi sql bãi
+0

"_Tắt cơ sở dữ liệu dump_", nghĩa là gì? – Akheloes

+0

@Gloserio, nó dùng để sao lưu http://www.postgresql.org/docs/8.1/static/backup.html – shweta

+0

@shweta Haha, đến lúc nói lời chào với bạn bè PostgreSQL :) –