为什么我新创建的表是根据第一列排序的?

时间:2014-12-31 23:23:05

标签: postgresql sorting

我使用以下脚本创建了一个新表(基本上将csv文件的数据加载到表中) - 请注意,我的csv文件中的数据未按任何表列排序:

CREATE TABLE dynamic_se_down_13patients_dynamicranking
(
SE_ID  character(80) NOT NULL,
downreg_agk_se_ranking float,
downreg_bvi_se_ranking float,
downreg_cbk_se_ranking float,
downreg_dj_se_ranking float,
downreg_dkj_se_ranking float,
downreg_flv_se_ranking float,
downreg_ghw_se_ranking float,
downreg_gvz_se_ranking float,
downreg_idy_se_ranking float,
downreg_prw_se_ranking float,
downreg_spn_se_ranking float,
downreg_zgr_se_ranking float,
downreg_znk_se_ranking float,
CONSTRAINT SE_ID_Key PRIMARY KEY (SE_ID)
);

COPY dynamic_se_down_13patients_dynamicranking FROM 'G:\CarrollLab\Teena\Enhancers\EnhancerAnalysis\12_PreferentiallyANDExclusiveSuperEnhancersData\FigsAndTangentSuperEnhancers\DynamicSuperEnhancersValues\OutputFromPostgres\dynamic_se_down_13patientsHM.csv' WITH (FORMAT 'csv', DELIMITER E',', NULL '',HEADER);

我的表格被正好加载到postgres上,但是当我打开它(查看数据..)时,表格按照排序打开。它以这种方式基于其第一列进行排序(仅显示此处显示的第一列数据):

chr3:81872627-81874608@NM_000158@GBE1                                           
chr3:81886043-81891012@NM_000158@GBE1                                           
chr3:82119808-82144698@NM_000158@GBE1                                           
chr3:98270559-98285850@NM_005290@GPR15                                          
chr4:101067675-101092752@NM_145244@DDIT4L                                       
chr4:101159314-101161672@NM_145244@DDIT4L                                       
chr4:101931434-101943063@NM_000944@PPP3CA                                       
chr4:102676016-102684334@NM_001127507@BANK1                                     
chr4:103390927-103396488@NM_001165412@NFKB1    

我不确定为什么桌子正在排序(!?) 当我去"排序/过滤选项"在postgres的控制栏上,我确实看到数据排序有我的第一个列名:" se_id"并且排序顺序设置为升序。

如果我选择此项并点击'删除'和'确定'然后我的桌子又恢复了正常状态。并最终以未分类的格式呈现。 有没有办法避免postgres的自动排序? 我注意到我的其他桌子正在装载'通常' (=未分类),但我无法理解为什么在这种特定情况下我的表被排序(我尝试创建相同的表几次,并且每次出现相同的问题)。谢谢!

1 个答案:

答案 0 :(得分:4)

您应该首先了解的是,您所看到的视图与DBMS存储数据的方式无关。 出现以便在您查看时进行排序这一事实是您用来查看数据的工具的工件。数据库服务器上数据的实际顺序与您所看到的完全正交。

如果您使用其他工具连接到数据库,请执行

SELECT * 
FROM dynamic_se_down_13patients_dynamicranking 

...查询然后您可能会按照插入顺序或某些任意顺序看到行(可能是因为插入数据库服务器或正在维护表时数据库服务器完成的某些索引或散列操作通过类似真空操作的方式)。

所以这个问题实际上是关于你用来查看PostgreSQL数据的任何工具。

正如其他人指出的那样,你应该添加一个SQL ORDER BY子句来指定你想要的排序/排序参数。