On Tuesday, March 8, 2016 at 2:10:10 PM UTC-8, Brad Robertson wrote:
>
> We're using Redshift for business analytics with some modified code from 
> the sequel-redshift  <https://github.com/remind101/sequel-redshift>gem. 
> We're trying to write a schema dumper for it, but since Redshift is based 
> on postgres 8, we get some weird errors dumping the schema:
>
> PG::WrongObjectType: ERROR:  op ANY/ALL (array) requires array on right 
> side: SELECT "pg_attribute"."attname" AS "name", CAST("pg_attribute".
> "atttypid" AS integer) AS "oid", CAST("basetype"."oid" AS integer) AS 
> "base_oid", format_type("basetype"."oid", "pg_type"."typtypmod") AS 
> "db_base_type", format_type("pg_type"."oid", "pg_attribute"."atttypmod") 
> AS "db_type", pg_get_expr("pg_attrdef"."adbin", "pg_class"."oid") AS 
> "default", NOT "pg_attribute"."attnotnull" AS "allow_null", COALESCE((
> "pg_attribute"."attnum" = ANY("pg_index"."indkey")), false) AS 
> "primary_key" FROM "pg_class" INNER JOIN "pg_attribute" ON ("pg_attribute"
> ."attrelid" = "pg_class"."oid") INNER JOIN "pg_type" ON ("pg_type"."oid" = 
> "pg_attribute"."atttypid") LEFT OUTER JOIN "pg_type" AS "basetype" ON (
> "basetype"."oid" = "pg_type"."typbasetype") LEFT OUTER JOIN "pg_attrdef" 
> ON (("pg_attrdef"."adrelid" = "pg_class"."oid") AND ("pg_attrdef"."adnum" 
> = "pg_attribute"."attnum")) LEFT OUTER JOIN "pg_index" ON (("pg_index".
> "indrelid" = "pg_class"."oid") AND ("pg_index"."indisprimary" IS TRUE)) 
> WHERE (("pg_attribute"."attisdropped" IS FALSE) AND ("pg_attribute".
> "attnum" > 0) AND ("pg_class"."oid" = CAST(CAST('"dummy"' AS regclass) AS 
> oid))) ORDER BY "pg_attribute"."attnum"
>
>
> I'm assuming Sequel no longer supports Postgres 8 which could be causing 
> this syntax error, so I'm wondering if you can suggest the best approach to 
> fixing this? Can we grab an old Postgres module from the Sequel codebase to 
> use for Redshift specifically? What we're actually trying to achieve is an 
> adapter that works for postgres (9.x) AND redshift because we ETL all our 
> data into postgres, then do a dump to redshift for analytics. Is this 
> possible? Or would we just have conflicts with old versions of 
> Sequel/Postgres ?
>

You probably should just override the related method (schema_parse_table) 
on Redshift so that it works correctly.  Sequel's PostgreSQL support 
officially targets PostgreSQL 8.2+ (it requires INSERT RETURNING), but I 
think Redshift forked pre-PostgreSQL 8.2.  In this case, it looks like 
Redshift doesn't support the use of the ANY operator with int2vector types, 
maybe they have to be cast to array, or a different approach has to be used.

Note that similar issues probably occur in index parsing and foreign key 
parsing, though those are less likely to affect ETL workloads.

Thanks,
Jeremy

-- 
You received this message because you are subscribed to the Google Groups 
"sequel-talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sequel-talk.
For more options, visit https://groups.google.com/d/optout.

Reply via email to