在PHP中是否可以获取PostgreSQL的数据域类型?
我在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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。