Rails:获取PostgresQL表列类型

时间:2016-02-18 19:39:06

标签: ruby-on-rails postgresql ruby-on-rails-4

如果我有一个包含不同PostgresQL数据类型的表:

data.table

当我通过模型获取该表的列时,返回的sql_type与我输入的不同:

  CREATE TABLE users (
    name varchar(255),
    age int4
  );

我如何获得原始类型?在这种情况下,它将是User.columns.first.name #=> "name" User.columns.first.sql_type #=> "character varying" User.columns.last.name #=> "age" User.columns.last.sql_type #=> "integer" varchar(255)

1 个答案:

答案 0 :(得分:1)

来自fine manual

  

<强> 8.3。字符类型
  [...]
  表示法varchar(n)char(n)分别是character varying(n)character(n)的别名。

因此,真实的类型名称为character varying,但如果需要,您可以使用varchar。同样适用于integer types

  

<强> 8.1.1。整数类型
  [...]
  SQL仅指定整数类型integer(或int),smallintbigint。类型名称int2int4int8是扩展名,其他SQL数据库系统也使用这些扩展名。

因此,如果您愿意,可以说int4,但在内部integer

您甚至可以使用psql检查数据库的真实想法:

=> create table users (name varchar(255), age int4);
CREATE TABLE
=> \d users
            Table "public.users"
 Column |          Type          | Modifiers 
--------+------------------------+-----------
 name   | character varying(255) | 
 age    | integer                | 

只有varcharint4,只有character varyinginteger。您可以在创建表时使用别名,但数据库将始终使用标准类型与您通信。

如果您使用decimal(m,n)numeric(m,n)的别名),timestamp(真的timestamp without time zone)等,您会发现类似的恶作剧。