質問

変更することは可能で、自然の列の順Postgres8.1?

私なんかなカラムの順ではない 必須 何をやっていけない一部の自動生成されたものが出るのは嬉しいですように、フィールド順の試合からpgadminのバックエンドを目の前です。

役に立ちましたか?

解決

できるだけまっすぐに変えるカラムでもいいですし、まうよう十分注意してくださいする場合には、その結果生じるのです。

例えば.

# CREATE TABLE test (a int, b int, c int);
# INSERT INTO test VALUES (1,2,3);
# SELECT * FROM test;
 a | b | c 
---+---+---
 1 | 2 | 3
(1 row)

現在のトリッキーなビットは、接続する必要はありデータベースを使用postgresユーザでの変更は可能ですシステムです。

# SELECT relname, relfilenode FROM pg_class WHERE relname='test';
 relname | relfilenode 
---------+-------------
 test_t  |       27666
(1 row)

# SELECT attrelid, attname, attnum FROM pg_attribute WHERE attrelid=27666;
 attrelid | attname  | attnum 
----------+----------+--------
    27666 | tableoid |     -7
    27666 | cmax     |     -6
    27666 | xmax     |     -5
    27666 | cmin     |     -4
    27666 | xmin     |     -3
    27666 | ctid     |     -1
    27666 | b        |      1
    27666 | a        |      2
    27666 | c        |      3
(9 rows)

attnumは独自のカラムを使用する必要があり、一時的価値が正する列番号など:

# UPDATE pg_attribute SET attnum=4 WHERE attname='a' AND attrelid=27666;
UPDATE 1
# UPDATE pg_attribute SET attnum=1 WHERE attname='b' AND attrelid=27666;
UPDATE 1
# UPDATE pg_attribute SET attnum=2 WHERE attname='a' AND attrelid=27666;
UPDATE 1

# SELECT * FROM test;
 b | a | c 
---+---+---
 1 | 2 | 3
(1 row)

再度が増えたことに起因するので色々と遊んでいてデータベースシステムテーブル、使用には細心の注意を払っていく感じる場合には本当に必要ではないかと思います。

このとしてのpostgres8.3、事前のバージョン、おmilageは変更になる場合がございます。

他のヒント

場合データベースは非常に大きな一部停止します:

  1. 無効化への書き込みアクセスデータベース
    このとして重要な変更を開始した後、次の点は失われます
  2. pg_dump --create --column-inserts databasename > databasename.pgdump.sql
  3. 編集良いと考え CREATE TABLE 決databasename.pgdump.sql
    の場合はファイルが大きすぎるためのエディタで分割で使用 split コマンド、編集、組み立て後の使用 cat
  4. drop database databasename
    いて、最近のバックアップだけでなく、信じて送り出します。
  5. psql --single-transaction -f databasename.pgdump.sql
    組み合わせて使用しない場合は --single-transaction ますので非常に遅い

ご利用の場合いわゆる大型のオブジェているか確認してください付属のダウンいいデフォルトで8.1.

私はこの問題pgsql-adminのは2007年のこと。トムレーン自らが宣言されたので実質的に成り立たない状況並び順を変更することができますのでカタログ.

解明:ユーザーの現在のツールです。りませんので、できない。IMOできます。
いまだにtrue Postgres11.

その他の回答は、大きさを変えることはできませんのカラム、それまでのpostgres.できる(べき!) 解決の問題があります。目的にご報告のクエリでのように表示します。のようなもの:

create view my_view as
  select * from my_table
  order by some_col;

カラムを指定する順は、クエリの信頼性(code).とができ、普段は別の順序を変化させることによって、テーブルとして以下の例として、カラムは通常は(あることが保証されていない)に返される順序でテーブルに追加されます。

postgres=# create table a(a int, b int, c int);
CREATE TABLE
postgres=# insert into a values (1,2,3);
INSERT 0 1
postgres=# select * from a;
 a | b | c
---+---+---
 1 | 2 | 3
(1 row)

postgres=# alter table a add column a2 int;
ALTER TABLE
postgres=# select * from a;
 a | b | c | a2
---+---+---+----
 1 | 2 | 3 |
(1 row)

postgres=# update a set a2 = a;
UPDATE 1
postgres=# alter table a drop column a;
ALTER TABLE
postgres=# alter table a rename column a2 to a;
ALTER TABLE
postgres=# select * from a;
 b | c | a
---+---+---
 2 | 3 | 1
(1 row)

postgres=#

残念ながら、すいません。カラムの順に当選された方にはPostgres.

を得ることができ列を注文したい新たなテーブルの選択カラムのテーブルにするために、室をご用意いたしました。

CREATE TABLE test_new AS SELECT b, c, a FROM test;
SELECT * from test_new;
 b | c | a 
---+---+---
 2 | 3 | 1
(1 row)

このデータをコピーしてくださ修飾子の制約条件の指標である。

一度新しいテーブルが変更された方のみのオリジナルは、広告(バナーやテキスト広告の名前になるには:

BEGIN;
DROP TABLE test;
ALTER TABLE test_new RENAME TO test;
COMMIT;

私たいという同じです。あり、注文するのに欠かせない存在として、それ物に擦り付けをしているのではなく:)

うになっている解決では以下の通りです。

このメソッドを使い、既存のデータ

  1. を新しいバージョンを使って、テーブルを注文したいのは、仮の名前です。
  2. 挿入すべてのデータを新しいテーブルから、既存します。
  3. 下の表に示す。
  4. 名前の変更は、新しいテーブルの"名前"から"仮名".
  5. 再度の追加指した。
  6. リセットIDの配列に主キーを単位として行うものとします。

現在のテーブル:

id, name, email

1.を新しいバージョンを使って、テーブルを注文したいのは、仮の名前です。

この例では、たい email しまいます。 name.

CREATE TABLE mytable_tmp
(
  id SERIAL PRIMARY KEY,
  email text,
  name text
);

2.挿入すべてのデータを新しいテーブルから、既存します。

INSERT INTO mytable_tmp   --- << new tmp table
(
  id
, email
, name
)
SELECT
  id
, email
, name
FROM mytable;  --- << this is the existing table

3.下の表に示す。

DROP TABLE mytable;

4.名前の変更は、新しいテーブルの"名前"から"仮名".

ALTER TABLE mytable_tmp RENAME TO mytable;

5.再度の追加指した。

CREATE INDEX ...

6.リセットIDの配列に主キーを単位として行うものとします。

SELECT setval('public.mytable_id_seq', max(id)) FROM mytable;
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top