我正在使用PHP& PotgreSQL为数据库创建一个接口, 使用PHP的Active Record实现 - > http://www.phpactiverecord.org
这很有用,但有一点小麻烦: 当您在表中使用“now()”作为默认值定义时间戳字段时 - 这个 引擎无法得到它: - (
用于查询有关列的信息的SQL在此处:
SELECT
a.attname AS field,
a.attlen,
REPLACE
(
pg_catalog.format_type(a.atttypid, a.atttypmod),
'character varying',
'varchar'
) AS type,
a.attnotnull AS not_nullable,
i.indisprimary as pk,
REGEXP_REPLACE
(
REGEXP_REPLACE
(
REGEXP_REPLACE(s.column_default,'::[a-z_ ]+',''),
'\'$',''
),
'^\'',''
) AS default
FROM
pg_catalog.pg_attribute a
LEFT JOIN
pg_catalog.pg_class c ON(a.attrelid=c.oid)
LEFT JOIN
pg_catalog.pg_index i ON(c.oid=i.indrelid AND a.attnum=any(i.indkey))
LEFT JOIN
information_schema.columns s
ON(s.table_name=???? AND a.attname=s.column_name)
WHERE
a.attrelid = (select c.oid from pg_catalog.pg_class c inner join
pg_catalog.pg_namespace n on(n.oid=c.relnamespace) where c.relname=?????
and pg_catalog.pg_table_is_visible(c.oid))
AND a.attnum > 0
AND NOT a.attisdropped
ORDER BY a.attnum`
?????更改为表名。
对于timestamp列,此代码返回''或null(我不确定哪一个)作为默认值。如何修改它以返回'now()'或甚至更好 - now()的结果?
(对于任何其他具有函数结果作为默认值的列,都是相同的)
提前致谢!
答案 0 :(得分:1)
使用-E选项运行psql
并执行\d my_table
以显示表的定义。
psql将向您展示它在内部使用的SQL。 这应该可以为您提供所需的一切。