Próbowałem następujących rzeczy, ale nie udało mi się:
ALTER TABLE person ALTER COLUMN dob POSITION 37;
sql
database
postgresql
alter-table
Huuuze
źródło
źródło
Odpowiedzi:
„ Zmień pozycję kolumny ” na Wiki PostgreSQL mówi:
To dość słabe, ale w ich obronie, w standardowym języku SQL, również nie ma rozwiązania do zmiany pozycji kolumny. Marki baz danych, które obsługują zmianę pozycji porządkowej kolumny, definiują rozszerzenie składni SQL.
Przychodzi mi do głowy jeszcze jeden pomysł: możesz zdefiniować a,
VIEW
który określa kolejność kolumn, tak jak lubisz, bez zmiany fizycznego położenia kolumny w tabeli bazowej.źródło
W PostgreSQL podczas dodawania pola zostanie dodane na końcu tabeli. Jeśli wtedy musimy wstawić w określonej pozycji
źródło
Ten post jest stary i prawdopodobnie rozwiązany, ale miałem ten sam problem. Rozwiązałem to, tworząc widok oryginalnej tabeli określający nową kolejność kolumn.
Stąd mogłem użyć widoku lub utworzyć nową tabelę z widoku.
Zmień nazwę lub usuń oryginalną tabelę i ustaw nazwę nowej tabeli na starą.
źródło
Jedna, aczkolwiek niezręczna opcja zmiany kolejności kolumn, gdy kolejność kolumn musi zostać bezwzględnie zmieniona, a klucze obce są w użyciu, to najpierw zrzucić całą bazę danych z danymi, a następnie zrzucić tylko schemat (
pg_dump -s databasename > databasename_schema.sql
). Następnie edytuj plik schematu, aby zmienić układ kolumn zgodnie z potrzebami, a następnie ponownie utwórz bazę danych ze schematu, a na koniec przywróć dane do nowo utworzonej bazy danych.źródło
Myślę, że obecnie nie możesz: zobacz ten artykuł na wiki Postgresql .
Trzy obejścia tego artykułu to:
źródło
Otwórz tabelę w PGAdmin iw okienku SQL na dole skopiuj instrukcję SQL Create Table. Następnie otwórz Narzędzie do wysyłania zapytań i wklej. Jeśli tabela zawiera dane, zmień nazwę tabeli na „nowa_nazwa”, jeśli nie, usuń komentarz „-” w wierszu Drop Table. Edytuj sekwencję kolumn zgodnie z wymaganiami. Zwróć uwagę na brakujący / zbędny przecinek w ostatniej kolumnie na wypadek, gdybyś go przeniósł. Wykonaj nowe polecenie SQL Create Table. Odśwież i ... voilà.
W przypadku pustych tabel na etapie projektowania ta metoda jest dość praktyczna.
W przypadku, gdy tabela zawiera dane, musimy również zmienić kolejność kolumn danych. To proste: użyj,
INSERT
aby zaimportować starą tabelę do nowej wersji za pomocą:... gdzie
c2
,c3
,c1
są kolumnyc1
,c2
,c3
starej tabeli w swoich nowych stanowiskach. Pamiętaj, że w tym przypadku musisz użyć „nowej” nazwy dla edytowanej „starej” tabeli, w przeciwnym razie utracisz swoje dane . W przypadku, gdy nazwy kolumn są liczne, długie i / lub złożone, użyj tej samej metody, co powyżej, aby skopiować nową strukturę tabeli do edytora tekstu i utworzyć tam nową listę kolumn przed skopiowaniem jej doINSERT
instrukcji.Po sprawdzeniu, że wszystko jest w porządku,
DROP
użyj starej tabeli i zmień nazwę „nową” na „starą”ALTER TABLE new RENAME TO old;
i gotowe.źródło
Pracowałem nad zmianą kolejności wielu tabel i nie chciałem ciągle pisać tych samych zapytań, więc stworzyłem skrypt, który zrobi to wszystko za mnie. Zasadniczo to:
pg_dump
pg_dump
zapytanie, aby utworzyć tabelę o zmienionej kolejności z danymiMożna go użyć, uruchamiając następujące proste polecenie:
Drukuje sql, abyś mógł go zweryfikować i przetestować, to był duży powód, dla którego go oparłem
pg_dump
. Możesz znaleźć repozytorium github tutaj .źródło
Używam Django i wymaga kolumny id w każdej tabeli, jeśli nie chcesz mieć bólu głowy. Niestety byłem nieostrożny i moja tabela bp.geo_location_vague nie zawierała tego pola. Parafowałem małą sztuczkę. Krok 1:
Krok 2: (bez tworzenia tabeli - tabela utworzy się automatycznie!)
Krok 3:
Ponieważ potrzebuję dużego pseudotypu seryjnego w tabeli. Po SELECT * w pg utworzy insetad bigserial typu bigint.
Krok 4: Teraz możemy usunąć widok, usunąć tabelę źródłową i zmienić nazwę nowej tabeli na starą nazwę. Sztuczka zakończyła się sukcesem.
źródło
Istnieje kilka obejść, które to umożliwiają:
Odtworzenie całego stołu
Utwórz nowe kolumny w bieżącej tabeli
Utwórz widok
https://tableplus.com/blog/2018/09/postgresql-is-it-possible-to-alter-column-order-position-in-a-table.html
źródło