运行 脚本后,列名未出现在 pgadmin 中
After running script, column names not appearing in pgadmin
有时,当我 运行 我的 Python 脚本调用 shp2pgsql
上传一个新的 table 到数据库时,当我在pgadmin,它显示为空白列名称:
这个有列名
通常当我再次 运行 脚本时它会修复问题,并且 pgadmin 会显示一条关于数据库清理的消息。老实说,问题出在我的老板身上,因为他认为这是我的代码有问题的标志,在他看到 pgadmin 中的名字之前我们无法继续前进(偶然当我演示脚本时是 1/10 时间没有列名就搞砸了。
在 postgres 中甚至可以有一个没有列名的 table 吗?
这是真空消息
这是 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)
退出并重新启动通常可以解决问题。
In postgres is it even possible to have a table without column names?
可以创建具有零列的 table:
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);
^
尽管列名仅由 space 组成是允许的:
test=> CREATE TABLE spacecol(" " integer);
CREATE TABLE
test=> \d spacecol
Table "public.spacecol"
Column | Type | Modifiers
--------+---------+-----------
| integer |
如果发生这种情况,请显示 psql
的 \d
命令的输出。只有(经过大量编辑的)屏幕截图,我无法告诉您更有用的东西。
如果非要我猜的话,我会说这可能是 PgAdmin 中的绘图错误。
更新:table 大改动后 VACUUM
消息正常。阅读消息,它解释了发生了什么。那里没有问题。
psql
输出没有任何问题,并且由于退出并重新启动 PgAdmin 修复了它,我相信您遇到了与绘图或目录访问相关的 PgAdmin 错误。如果它发生在当前的 PgAdmin 版本上,并且您可以使用可以与 public 共享的脚本重现它,请 post 在 pgadmin-support 邮件列表上报告。
在 pgAdmin 1.18.1 中,当 运行 DDL(即 SQL 删除并重新创建所有 table 的脚本时,我也遇到了同样的情况。重新启动 pgAdmin 或刷新数据库后,它再次工作(仅刷新 table 是不够的)。似乎 pgAdmin 在 table 被替换后根本不会自动刷新 table 元数据。
有时,当我 运行 我的 Python 脚本调用 shp2pgsql
上传一个新的 table 到数据库时,当我在pgadmin,它显示为空白列名称:
在 postgres 中甚至可以有一个没有列名的 table 吗?
这是真空消息
这是 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)
退出并重新启动通常可以解决问题。
In postgres is it even possible to have a table without column names?
可以创建具有零列的 table:
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);
^
尽管列名仅由 space 组成是允许的:
test=> CREATE TABLE spacecol(" " integer);
CREATE TABLE
test=> \d spacecol
Table "public.spacecol"
Column | Type | Modifiers
--------+---------+-----------
| integer |
如果发生这种情况,请显示 psql
的 \d
命令的输出。只有(经过大量编辑的)屏幕截图,我无法告诉您更有用的东西。
如果非要我猜的话,我会说这可能是 PgAdmin 中的绘图错误。
更新:table 大改动后 VACUUM
消息正常。阅读消息,它解释了发生了什么。那里没有问题。
psql
输出没有任何问题,并且由于退出并重新启动 PgAdmin 修复了它,我相信您遇到了与绘图或目录访问相关的 PgAdmin 错误。如果它发生在当前的 PgAdmin 版本上,并且您可以使用可以与 public 共享的脚本重现它,请 post 在 pgadmin-support 邮件列表上报告。
在 pgAdmin 1.18.1 中,当 运行 DDL(即 SQL 删除并重新创建所有 table 的脚本时,我也遇到了同样的情况。重新启动 pgAdmin 或刷新数据库后,它再次工作(仅刷新 table 是不够的)。似乎 pgAdmin 在 table 被替换后根本不会自动刷新 table 元数据。