PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Cột thả không xóa hoàn toàn các tham chiếu cột - postgresql

Không bao giờ gây rối với pg_attribute trực tiếp. Nếu bạn đã làm như vậy, có lẽ đã đến lúc khôi phục từ bản sao lưu.

Khi một cột bị loại bỏ, PostgreSQL không thực sự loại bỏ nó, nhưng thay đổi tên và đánh dấu cột đó là bị loại bỏ.

CREATE TABLE testtab (
   id integer PRIMARY KEY,
   dropme text NOT NULL,
   val text NOT NULL
);

ALTER TABLE testtab DROP dropme;

SELECT attname, attnum, attisdropped
FROM pg_attribute
WHERE attrelid = 'testtab'::regclass
   AND attnum > 0
ORDER BY attnum;

┌──────────────────────────────┬────────┬──────────────┐
│           attname            │ attnum │ attisdropped │
├──────────────────────────────┼────────┼──────────────┤
│ id                           │      1 │ f            │
│ ........pg.dropped.2........ │      2 │ t            │
│ val                          │      3 │ f            │
└──────────────────────────────┴────────┴──────────────┘
(3 rows)

Vì vậy, tôi đoán rằng cột bị giảm đó vẫn được tính vào giới hạn cột.

Tôi có thể nghĩ ra một cách, không thoải mái lắm, để thoát khỏi điều đó:

BEGIN;
CREATE TABLE testtab_2 (LIKE testtab INCLUDING ALL);
INSERT INTO testtab_2 SELECT * FROM testtab;
DROP TABLE testtab;
ALTER TABLE testtab_2 RENAME TO testtab;
COMMIT;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Triển khai PostgreSQL trên Docker Container

  2. Gói PGLogical 1.1 cho PostgreSQL 9.6beta1

  3. SQL Điền bảng với dữ liệu ngẫu nhiên

  4. Cách triển khai các ưu tiên trong SQL (postgres)

  5. Cách sao lưu và khôi phục cơ sở dữ liệu PostgreSQL