如果我有一个包含不同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)
。
答案 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
),smallint
和bigint
。类型名称int2
,int4
和int8
是扩展名,其他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 |
只有varchar
或int4
,只有character varying
和integer
。您可以在创建表时使用别名,但数据库将始终使用标准类型与您通信。
如果您使用decimal(m,n)
(numeric(m,n)
的别名),timestamp
(真的timestamp without time zone
)等,您会发现类似的恶作剧。