650: def autodetect_columns
651: columns = []
652: primary_columns = []
653: db_query('SELECT ' <<
654: '"pg_attribute"."attname", ' <<
655: '"pg_constraint"."conkey" @> ARRAY["pg_attribute"."attnum"] AS "primary" ' <<
656: 'FROM "pg_attribute" ' <<
657: 'JOIN "pg_class" ON "pg_attribute"."attrelid" = "pg_class"."oid" ' <<
658: 'JOIN "pg_namespace" ON "pg_class"."relnamespace" = "pg_namespace"."oid" ' <<
659: 'LEFT JOIN "pg_constraint" ON "pg_class"."oid" = "pg_constraint"."conrelid" ' <<
660: 'WHERE "pg_attribute"."attnum" > 0 ' <<
661: 'AND "pg_class"."relname" = $ ' <<
662: 'AND "pg_namespace"."nspname" = $ ' <<
663: 'AND "pg_constraint"."contype" = $ ' <<
664: 'ORDER BY "attnum"',
665: table_name!, schema_name!, 'p').each do |attribute_record|
666: attribute_record.attname.freeze
667: columns << attribute_record.attname
668: primary_columns << attribute_record.attname if attribute_record.primary
669: end
670: @primary_columns = primary_columns.freeze
671: @columns = columns.freeze
672: nil
673: end