Database Postgis Postgres客户端集成不起作用?

Database Postgis Postgres客户端集成不起作用?,database,postgresql,gis,postgis,Database,Postgresql,Gis,Postgis,我正在试验Postgis。我已经建立了一个数据库,添加了一个表,其中包含一个几何列,其中包含点,并为该列编制了索引 我觉得奇怪的一件事是,在许多情况下,列中的数据没有被转换以显示在客户机中 例如,如果我将其粘贴到shell中 SELECT ST_MakePolygon(ST_GeomFromText('LINESTRING(75.15 29.53 1,77 29 1,77.6 29.5 1, 75.15 29.53 1)')); 我得到这个结果 st_makepolygon

我正在试验Postgis。我已经建立了一个数据库,添加了一个表,其中包含一个几何列,其中包含点,并为该列编制了索引

我觉得奇怪的一件事是,在许多情况下,列中的数据没有被转换以显示在客户机中

例如,如果我将其粘贴到shell中

SELECT ST_MakePolygon(ST_GeomFromText('LINESTRING(75.15 29.53 1,77 29 1,77.6 29.5 1, 75.15 29.53 1)'));
我得到这个结果

    st_makepolygon                                                                                                       
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 010300008001000000040000009A99999999C9524048E17A14AE873D40000000000000F03F00000000004053400000000000003D40000000000000F03F66666666666653400000000000803D40000000000000F03F9A99999999C9524048E17A14AE873D40000000000000F03F
(1 row)
    st_extent     
------------------
 BOX(10 10,10 10)
(1 row)
我不应该买这样的东西吗

st_asewkt
-----------
POLYGON((75.15 29.53 1,77 29 1,77.6 29.5 1,75.15 29.53 1))
此外,当我从“几何体”列中选择点时,我还会看到它们的原始数据

如果这是正确的,我如何转换数据,以便能够轻松查看几何体中的内容

我希望能够在列中看到我的点显示为点(x、y、z)或类似的东西

有趣的是,如果我运行这样的操作

SELECT ST_Extent(geom) FROM towns WHERE town = 'BOSTON';
客户向我展示了这个结果

    st_makepolygon                                                                                                       
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 010300008001000000040000009A99999999C9524048E17A14AE873D40000000000000F03F00000000004053400000000000003D40000000000000F03F66666666666653400000000000803D40000000000000F03F9A99999999C9524048E17A14AE873D40000000000000F03F
(1 row)
    st_extent     
------------------
 BOX(10 10,10 10)
(1 row)

几何图形作为对象存储在数据库中,因为它是一种紧凑且无损的格式。查询此数据类型时,会将其解码为十六进制文本表示形式,如您的问题所示。我能想到的改变默认输出行为的唯一方法是重新定义强制转换

此黑客需要通过
PostGIS.sql
enabler脚本安装PostGIS,而不是通过
CREATE扩展PostGIS方法。然后,将强制转换从
几何体
重新定义为
文本

DROP CAST (geometry AS text);
CREATE CAST (geometry AS text) WITH FUNCTION ST_AsText(geometry) AS IMPLICIT;
现在显示以下行为:

SELECT '010300008001000000040000009A99999999C9524048E17A14AE87'
'3D40000000000000F03F00000000004053400000000000003D40000000000'
'000F03F66666666666653400000000000803D40000000000000F03F9A9999'
'9999C9524048E17A14AE873D40000000000000F03F'::geometry::text;

                             text
---------------------------------------------------------------
 POLYGON Z ((75.15 29.53 1,77 29 1,77.6 29.5 1,75.15 29.53 1))
(1 row)
但它只适用于
::text
类型转换。如果没有它,它会将
几何体
转换为
bytea
,默认转换为十六进制格式的文本


然而,我不推荐这种黑客行为。如果需要可读的WKT字符串,请记住在SQL语句中使用ST_AsText。另外,请记住WKT是几种文本格式之一;其他请参见。

好,现在我看到,如果我将十六进制结果包装在ST_asewkt()中,我将得到一个解码结果。有没有办法将其作为几何图形列的默认显示?