加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-13 16:37:14 所属栏目:百科 来源:网络整理
导读:是否可以改变Postgres 8.1中列的自然顺序? 我知道你不应该依赖列顺序 – 这对我所做的不是至关重要的 – 我只需要使一些自动生成的东西以更令人愉快的方式出现,这样现场订单就可以匹配所有的方式从pgadmin到后端和出来到前端。 你实际上可以直接更改列的顺
是否可以改变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一起工作,与以前的版本,你的口味可能会有所不同。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读