now()作为postgres中的默认值

时间:2010-11-22 14:30:34

标签: php postgresql activerecord default-value

我正在使用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()的结果?

(对于任何其他具有函数结果作为默认值的列,都是相同的)

提前致谢!

1 个答案:

答案 0 :(得分:1)

使用-E选项运行psql并执行\d my_table以显示表的定义。

psql将向您展示它在内部使用的SQL。 这应该可以为您提供所需的一切。