有时当我运行调用shp2pgsql
的Python脚本将新表上传到数据库时,当我在pgadmin中查看该表时,它会显示空白列名:
这个有列名 通常,当我再次运行脚本时,它会解决问题,pgadmin会显示有关数据库清理的消息。老实说问题是我的老板,因为他把这作为一个标志,我的代码有问题,我们不能继续前进,直到他看到pgadmin中的名字(偶然当我演示脚本是1/10时)没有列名的时间搞乱了。)
在postgres中,甚至可以使用没有列名的表吗?
这是真空信息
以下是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)
退出并重新启动通常会修复它。
答案 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似乎不会自动刷新表元数据。