【问题标题】:After running script, column names not appearing in pgadmin运行脚本后,列名没有出现在 pgadmin 中
【发布时间】:2015-06-25 01:02:54
【问题描述】:

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

这个有列名 通常,当我再次运行脚本时,它会解决问题,并且 pgadmin 会显示一条有关数据库清理的消息。老实说,问题出在我的老板身上,因为他认为这是我的代码有问题的迹象,在他看到 pgadmin 中的名称之前我们无法继续前进(碰巧当我演示脚本时,那是 1/10没有列名就搞砸了)。

在 postgres 中甚至可以有一个没有列名的表吗?

这是真空消息

这是psql\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)

退出并重新启动通常可以解决问题。

【问题讨论】:

  • 脚本是什么?什么是“关于吸尘的信息”?退出并重新启动 PgAdmin 会改变什么吗?脚本是从该 PgAdmin 会话中运行的,还是从 psql 运行的?

标签: python postgresql pgadmin arcmap


【解决方案1】:

在 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\d 命令的输出。只有(经过大量编辑的)屏幕截图,我无法告诉您更多有用的信息。

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


更新:在对表进行重大更改后,VACUUM 消息是正常的。阅读消息,它解释了正在发生的事情。那里没有问题。

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

【讨论】:

  • 我用您要求的信息更新了问题。
  • 答案已更新。除了可能存在 PgAdmin UI 错误之外,我认为这里没什么可担心的。
  • fwiw 它只发生在一张桌子上,我的同事以前都没有见过它。认为使用psql-d 选项频繁删除和重新创建表,所以这可能是真空的来源。
  • 是的。将ANALYZE tablename; 添加到表重新加载脚本的末尾。你所描述的听起来很像如果 PgAdmin 尝试重新读取表元数据、失败并且没有正确处理失败时可能发生的情况。试着把它变成一个可重现的测试用例,你可以报告给 pgadmin 邮件列表。
  • 我的 python 脚本无法运行任意 SQL 命令,例如 ANALYZE。它在调用pgsql2shpshp2pgsqlpsql 时会产生一个新进程,尽管pgsql2shp 允许通过它的参数添加任意SQL 查询,但我不相信psqlpgsql2shp 可以。如何添加 ANALYZE 命令?我已经在使用arcpy,但不希望在项目中引入新库,例如Psycopg2
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2021-12-11
    • 2021-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多