在PHP中是否可以获取PostgreSQL的数据域类型?

后端开发 2026-07-12

我在PostgreSQL中有一个使用自定义数据域类型的表:

drop table if exists test;
drop domain if exists emoji;

create domain emoji as char(2);
create table test(
    data emoji,
    etc char(2)
);

insert into test(data, etc) values('?', '!');

使用PHP与 PDO,我连接到数据库并从表中取数:

$dsn = 'pgsql:host=…; dbname=…';
$user = '…';
$password = '…';

$pdo = new PDO($dsn, $user, $password) or die('oops');

$sql = 'SELECT data, etc FROM test';
$pds = $pdo -> query($sql);

到目前为止,一切都好。通过 getColumMeta() 方法,我可以获取关于列的一些信息。

然而,每一列的输出没有区别。

现在,我知道域基本上是带有可选约束的别名。在PHP中是否有办法发现该域?

解决方案

PDO的开发者故意 禁用了这个,因为对每个查询返回的列去查询PostgreSQL系统目录会带来大量开销。

下面是一个用来获取列类型名的查询示例:

select typname from pg_attribute a join pg_type t on t.oid = a.atttypid 
where a.attrelid = 29492 and a.attname='data';

值29492只是基于我的测试的一个示例。它是由 getColumnMeta() 在键 pgsql:table_oid 中返回的表OID。

'data' 当然是你示例中的列名。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章