157

私は次のことを試しましたが、うまくいきませんでした:

ALTER TABLE person ALTER COLUMN dob POSITION 37;
4

9 に答える 9

149

PostgreSQLWikiの「Altercolumnposition 」は次のように述べています。

attnumPostgreSQLは現在、テーブルの列に基づいて列の順序を定義していpg_attributeます。列の順序を変更する唯一の方法は、テーブルを再作成するか、列を追加して、目的のレイアウトに到達するまでデータをローテーションすることです。

これはかなり弱いですが、彼らの防御では、標準SQLでは、列を再配置するための解決策もありません。列の序数位置の変更をサポートするデータベースブランドは、SQL構文の拡張を定義しています。

もう1つのアイデアが思い浮かびVIEWます。ベーステーブル内の列の物理的な位置を変更せずに、列の順序を好きなように指定するを定義できます。

于 2008-11-12T23:08:27.017 に答える
98

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;
于 2016-09-29T22:44:49.340 に答える
29

この投稿は古く、おそらく解決されていますが、同じ問題がありました。新しい列の順序を指定して、元のテーブルのビューを作成することで解決しました。

ここから、ビューを使用するか、ビューから新しいテーブルを作成できます。

    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

元のテーブルの名前を変更または削除し、新しいテーブルの名前を古いテーブルに設定します。

于 2014-01-09T19:01:55.997 に答える
26

列の順序を絶対に変更する必要があり、外部キーが使用されている場合に列を再配置するための不器用なオプションではありますが、その 1 つは、最初にデータを含むデータベース全体をダンプし、次にスキーマのみをダンプすることです ( pg_dump -s databasename > databasename_schema.sql)。次に、スキーマ ファイルを編集して必要に応じて列を再配置し、スキーマからデータベースを再作成し、最後に新しく作成したデータベースにデータを復元します。

于 2015-12-22T08:56:36.797 に答える
12

現時点ではできないと思います。Postgresqlwikiのこの記事を参照してください。

この記事の3つの回避策は次のとおりです。

  1. テーブルを再作成します
  2. 列を追加してデータを移動する
  3. ビューで違いを非表示にします。
于 2008-11-12T23:09:42.333 に答える