私は次のことを試しましたが、うまくいきませんでした:
ALTER TABLE person ALTER COLUMN dob POSITION 37;
私は次のことを試しましたが、うまくいきませんでした:
ALTER TABLE person ALTER COLUMN dob POSITION 37;
PostgreSQLWikiの「Altercolumnposition 」は次のように述べています。
attnum
PostgreSQLは現在、テーブルの列に基づいて列の順序を定義していpg_attribute
ます。列の順序を変更する唯一の方法は、テーブルを再作成するか、列を追加して、目的のレイアウトに到達するまでデータをローテーションすることです。
これはかなり弱いですが、彼らの防御では、標準SQLでは、列を再配置するための解決策もありません。列の序数位置の変更をサポートするデータベースブランドは、SQL構文の拡張を定義しています。
もう1つのアイデアが思い浮かびVIEW
ます。ベーステーブル内の列の物理的な位置を変更せずに、列の順序を好きなように指定するを定義できます。
PostgreSQL では、フィールドを追加すると、テーブルの最後に追加されます。特定の位置に挿入する必要がある場合は、
alter table tablename rename to oldtable;
create table tablename (column defs go here); ### with all the constraints
insert into tablename (col1, col2, col3) select col1, col2, col3 from oldtable;
この投稿は古く、おそらく解決されていますが、同じ問題がありました。新しい列の順序を指定して、元のテーブルのビューを作成することで解決しました。
ここから、ビューを使用するか、ビューから新しいテーブルを作成できます。
CREATE VIEW original_tab_vw AS SELECT a.col1、a.col3、a.col4、a.col2 FROM original_tab a WHERE a.col1 IS NOT NULL -- または何でも
SELECT * INTO new_table FROM original_tab_vw
元のテーブルの名前を変更または削除し、新しいテーブルの名前を古いテーブルに設定します。
列の順序を絶対に変更する必要があり、外部キーが使用されている場合に列を再配置するための不器用なオプションではありますが、その 1 つは、最初にデータを含むデータベース全体をダンプし、次にスキーマのみをダンプすることです ( pg_dump -s databasename > databasename_schema.sql
)。次に、スキーマ ファイルを編集して必要に応じて列を再配置し、スキーマからデータベースを再作成し、最後に新しく作成したデータベースにデータを復元します。
現時点ではできないと思います。Postgresqlwikiのこの記事を参照してください。
この記事の3つの回避策は次のとおりです。