PostgreSQL数据类型,不包括表格的行结构

时间:2016-04-15 12:35:42

标签: ruby-on-rails postgresql

我们正在为我们的多租户应用程序使用Ruby on Rails 4.2.6和PostgreSQL 9.3.10,它为我们的每个客户创建了一个架构。

在ActiveRecord中,有一些代码执行以下SQL来获取数据类型:

SELECT t.oid, t.typname, t.typelem, t.typdelim, t.typinput, r.rngsubtype, t.typtype, t.typbasetype
FROM pg_type as t
LEFT JOIN pg_range as r ON oid = rngtypid
WHERE t.typname IN ('int2', 'int4', 'int8', 'oid', 'float4', 'float8', 'text', 'varchar', 'char', 'name', 'bpchar', 'bool', 'bit', 'varbit', 'timestamptz', 'date', 'time', 'money', 'bytea', 'point', 'hstore', 'json', 'jsonb', 'cidr', 'inet', 'uuid', 'xml', 'tsvector', 'macaddr', 'citext', 'ltree', 'interval', 'path', 'line', 'polygon', 'circle', 'lseg', 'box', 'timestamp', 'numeric')
OR t.typtype IN ('r', 'e', 'd')
OR t.typinput = 'array_in(cstring,oid,integer)'::regprocedure
OR t.typelem != 0

当此查询返回与每个模式中每个表的行结构相关的记录时,我们的数据库的记录数超过150k。例如,对于我们的标签表,每个模式都有一个记录,其名称为“_tags”,typinput为“array_in”,typtype为“b”。

有人可以推荐一种方法来改变这个查询以排除这些行结构记录吗?

我们已经考虑过使用下面的DISTINCT语句,但这不能满足两个在不同模式中具有相同名称的“真实”数据类型。

DISTINCT ON (t.typname, t.typdelim, t.typinput, r.rngsubtype, t.typtype, t.typbasetype)

0 个答案:

没有答案