postgresql – 是否可以更改Postgres中列的自然顺序?

前端之家收集整理的这篇文章主要介绍了postgresql – 是否可以更改Postgres中列的自然顺序?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
是否可以改变Postgres 8.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)

再次,因为这是使用数据库系统表,如果你真的需要这样做,请非常小心。

这是与postgres 8.3一起工作,与以前的版本,你的口味可能会有所不同。

猜你在找的Postgre SQL相关文章