[] (PGrow)

    /*
     * call-seq:
     *   row[position] -> value
     *   row[name] -> value
     *
     * Access elements of this row by column position or name.
     */
    static VALUE
    pgrow_aref(argc, argv, self)
        int argc;
        VALUE * argv;
        VALUE self;
    {
        if (TYPE(argv[0]) == T_STRING) {
            VALUE keys = pgrow_keys(self);
            VALUE index = rb_funcall(keys, rb_intern("index"), 1, argv[0]);
            if (index == Qnil) {
                rb_raise(rb_ePGError, "%s: field not found", StringValuePtr(argv[0]));
            }
            else {
                return rb_ary_entry(self, NUM2INT(index));
            }
        }
        else {
            return rb_call_super(argc, argv);
        }
    }