[Moscow.pm] Прблема с DBIx::Class::Schema::Loader

Orlovsky Alexander nordicdyno на yandex.ru
Пт Ноя 27 07:48:13 PST 2009


Осваиваю DBIx::Class и захотелось мне сгенерить схему  DBIx::Class::Schema::Loader-ом из табличек, которые есть в БД (PostgreSQL)
Делаю все по мануалу и у меня оно не работает почему-то. (вместе с SQLite работает, но мне то нужен PostgreSQL)

Ситуация такая:
В начале оно унутре себя делает первый страшный запрос (*приведен ниже), который (зачем то) выбирает  таблички:
public.pg_freespacemap_pages 
public.pg_freespacemap_relations 
public.pg_buffercache 
а затем оно делает из них запросы вида: 
SELECT * FROM public.pg_buffercache WHERE ( 1 = 0 )
и генерит схемку для этих таблиц
вместо того чтобы генерить схемку из нужных мне таблиц из схемы к которой я коннекчусь.
(при коннекте я указываю правильную базу и схему (не public ;)
Че это оно?

Запросы из: http://bytes.com/topic/postgresql/answers/172978-sql-command-list-tables
работают нормально (для проверки запускал) и выдают список нужных мне таблиц.
Все осложняется тем, что Postgress я не знаю, т.ч. вычленить проблему мне сложновато так вот сразу. 

Или может просто рисовать схему ручками при помощи DBIx::Class + DBIx::DBIx::Class::Schema - пойдя по пути наименьшего сопротивления? :) (а жалка! удобнее рисовать что-то в базке а потом оттуда выгружать, чем наоборот)

Кто-нибудь вообще пользовался  DBIx::Class::Schema::Loader в свзяке с PgSQL ? :) А то я может не там спрашиваю :)

P/S
Страшный (для меня) запрос:

SELECT NULL::text AS "TABLE_CAT"
   , quote_ident(n.nspname) AS "TABLE_SCHEM"
   , quote_ident(c.relname) AS "TABLE_NAME"
   , CASE
       WHEN c.relkind = 'v' THEN
          CASE WHEN quote_ident(n.nspname) ~ '^pg_' THEN 'SYSTEM VIEW' ELSE 'VIEW' END
       ELSE
          CASE WHEN quote_ident(n.nspname) ~ '^pg_' THEN 'SYSTEM TABLE' ELSE 'TABLE' END
       END AS "TABLE_TYPE"
   , d.description AS "REMARKS" , quote_ident(t.spcname) AS "pg_tablespace_name"
   , quote_ident(t.spclocation) AS "pg_tablespace_location" 
   , n.nspname AS pg_schema
   , c.relname AS pg_table
      FROM pg_catalog.pg_class AS c
        LEFT JOIN pg_catalog.pg_description AS d
                ON (c.oid = d.objoid AND c.tableoid = d.classoid AND d.objsubid = 0)
        LEFT JOIN pg_catalog.pg_namespace n ON (n.oid = c.relnamespace)
        LEFT JOIN pg_catalog.pg_tablespace t ON (t.oid = c.reltablespace)
    WHERE n.nspname = 'public'
      AND c.relname LIKE '%'
      AND c.relkind IN ('r','v')
    ORDER BY "TABLE_TYPE", "TABLE_CAT", "TABLE_SCHEM", "TABLE_NAME"


Подробная информация о списке рассылки Moscow-pm