运行脚本后,列名不会出现在pgadmin中

时间:2015-06-25 01:02:54

标签: python postgresql pgadmin arcmap

有时当我运行调用shp2pgsql的Python脚本将新表上传到数据库时,当我在pgadmin中查看该表时,它会显示空白列名:

no column names 这个有列名 this is when it is good 通常,当我再次运行脚本时,它会解决问题,pgadmin会显示有关数据库清理的消息。老实说问题是我的老板,因为他把这作为一个标志,我的代码有问题,我们不能继续前进,直到他看到pgadmin中的名字(偶然当我演示脚本是1/10时)没有列名的时间搞乱了。)

在postgres中,甚至可以使用没有列名的表吗?

这是真空信息 enter image description here

以下是psql' s \d的输出(假设XYZ是项目的名称和数据库的名称)

xyz => \d asmithe.intersect
                                     Table "asmithe.intersect"
   Column   |             Type             |                         Modifiers

------------+------------------------------+------------------------------------
------------------------
 gid        | integer                      | not null default nextval('intersect
ion_gid_seq'::regclass)
 fid_xyz_09 | integer                      |
 juris_id   | character varying(2)         |
 xyz_plot   | numeric                      |
 poly_id    | character varying(20)        |
 layer      | character varying(2)         |
 area       | numeric                      |
 perimeter  | numeric                      |
 lid_dist   | integer                      |
 comm       | character varying(252)       |
 cdate      | character varying(30)        |
 sdate      | character varying(30)        |
 edate      | character varying(30)        |
 afsdate    | character varying(30)        |
 afedate    | character varying(30)        |
 capdate    | character varying(30)        |
 salvage    | double precision             |
 pb_harv    | double precision             |
 utotarea   | numeric                      |
 nbacvers   | character varying(24)        |
 totarea    | numeric                      |
 areamoda   | numeric                      |
 areamodb   | numeric                      |
 areamodt   | double precision             |
 areamodv   | numeric                      |
 area_intr  | numeric                      |
 dist_perct | numeric                      |
 id         | double precision             |
 floodid    | double precision             |
 basr       | double precision             |
 floodmaps  | double precision             |
 floodmapm  | double precision             |
 floodcaus  | double precision             |
 burnclas   | double precision             |
 geom       | geometry(MultiPolygon,13862) |
Indexes:
    "intersect_pkey" PRIMARY KEY, btree (gid)

退出并重新启动通常会修复它。

2 个答案:

答案 0 :(得分:2)

  

在postgres中,甚至可以使用没有列名的表吗?

可以创建一个零列的表:

test=> CREATE TABLE zerocolumns();
CREATE TABLE
test=> \d zerocolumns 
Table "public.zerocolumns"
 Column | Type | Modifiers 
--------+------+-----------

但不是零宽度列名:

test=> CREATE TABLE zerowidthcol("" integer);
ERROR:  zero-length delimited identifier at or near """"
LINE 1: CREATE TABLE zerowidthcol("" integer);

                                  ^

虽然允许仅由空格组成的列名称:

test=> CREATE TABLE spacecol(" " integer);
CREATE TABLE
test=> \d spacecol 
   Table "public.spacecol"
 Column |  Type   | Modifiers 
--------+---------+-----------
        | integer | 

如果发生这种情况,请显示psql&#39} \d命令的输出。只有(经过大量编辑的)屏幕截图,我无法告诉您更有用的信息。

如果我不得不猜测我说它可能是PgAdmin中的绘图错误。

更新:对表进行大幅更改后,VACUUM消息正常。阅读消息,它解释了发生了什么。那里没有问题。

psql输出没有任何问题,因为退出并重新启动PgAdmin会修复它,我非常有信心您遇到了与绘图或目录访问相关的PgAdmin错误。如果它发生在当前的PgAdmin版本上,您可以使用可与公众分享的脚本重现它,请在pgadmin-support邮件列表上发布报告。

答案 1 :(得分:2)

在运行DDL(即删除并重新创建所有表的SQL脚本)时,pgAdmin 1.18.1中也发生了同样的情况。重新启动pgAdmin或刷新数据库后,它再次工作(仅刷新表是不够的)。在替换表之后,pgAdmin似乎不会自动刷新表元数据。