PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Upuść kolumnę nie usuwa całkowicie odwołań do kolumn - postgresql

Nigdy nie zadzieraj z pg_attribute bezpośrednio. Jeśli to zrobiłeś, prawdopodobnie nadszedł czas, aby przywrócić z kopii zapasowej.

Kiedy kolumna jest usuwana, PostgreSQL w rzeczywistości jej nie usuwa, ale zmienia nazwę i oznacza ją jako usuniętą.

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)

Sądzę więc, że ta porzucona kolumna nadal liczy się do limitu kolumn.

Przychodzi mi do głowy jeden, niezbyt wygodny sposób na pozbycie się tego:

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. Zainstaluj PL/Java 1.5.2 w PostgreSQL 11

  2. Jak zmienić styl daty w PostgreSQL?

  3. konwertuj format geometrii Postgres na WKT

  4. Wydajność TPC-H od PostgreSQL 8.3

  5. Jak AT TIME ZONE działa w PostgreSQL