PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Jatuhkan kolom tidak menghapus referensi kolom sepenuhnya - postgresql

Jangan pernah main-main dengan pg_attribute secara langsung. Jika Anda telah melakukannya, mungkin sudah waktunya untuk memulihkan dari cadangan.

Saat kolom dijatuhkan, PostgreSQL tidak benar-benar menghapusnya, tetapi mengubah nama dan menandainya sebagai dijatuhkan.

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)

Jadi saya rasa kolom yang dijatuhkan itu masih diperhitungkan dalam batas kolom.

Saya dapat memikirkan satu cara, yang sangat tidak nyaman, untuk menghilangkannya:

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. Membuat kata sandi pengguna postgresql

  2. Cara Membuat Array di PostgreSQL

  3. koneksi lokal docker postgres pgadmin

  4. Dapatkan Hari Pertama Bulan Ini di PostgreSQL

  5. Cara Memantau Kinerja PostgreSQL 12 dengan OmniDB – Bagian 1