PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Drop колона не премахва препратките към колони изцяло - postgresql

Никога не се забърквайте с pg_attribute директно. Ако сте го направили, вероятно е време да възстановите от резервно копие.

Когато колона бъде изпусната, PostgreSQL всъщност не я премахва, а променя името и я маркира като изпусната.

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)

Така че предполагам, че изпуснатата колона все още се отчита към ограничението на колоните.

Сещам се за един, не особено удобен начин да се отърва от това:

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. Вмъкване на масив с помощта на Sequel gem в PostgreSQL

  2. Как Atan() работи в PostgreSQL

  3. Експортиране на AWS Postgres RDS таблица към AWS S3

  4. Как работи функцията Ln() в PostgreSQL

  5. Вземете отделната сума от колона на присъединена таблица