2010-11-22 2 views
0

Я использую PHP & PotgreSQL сделать интерфейс для БД, с помощью этого активного осуществления записи для PHP ->http://www.phpactiverecord.orgсейчас() в качестве значения по умолчанию в Postgres

Это весьма полезно, но есть небольшая неприятность: при определении поля временной метки в виде таблицы с «сейчас()» в качестве значения по умолчанию - это двигатель не получает его :-(

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

Запустите psql с параметром -E и сделайте \d my_table, чтобы отобразить определение таблицы.

psql покажет вам SQL, который он использует внутренне. Это должно дать вам все, что вам нужно.

+0

спасибо! это то, что мне нужно – Eralde 2010-11-22 15:06:13

Смежные вопросы