Rails 3/postgres - как долго строка, если вы не применяете: ограничение в схеме

Мой googlefu должен быть слабым, потому что я не могу найти что-либо, чтобы сообщить мне ограничение по умолчанию для столбца строки в моем приложении Rails (размещенном в Heroku, используя PostgreSQL в качестве базы данных).

Любая помощь будет оценена!

Ответ 1

ActiveRecord использует varchar(255) (или character varying (255) для педантичности), если вы не укажете конкретный предел. Вы всегда можете прыгать в PostgreSQL с помощью psql и говорить \d your_table, чтобы получить таблицу, которую видит PostgreSQL.

Я не думаю, что значение по умолчанию указано где угодно, но прямо здесь, в источнике:

NATIVE_DATABASE_TYPES = {
  :primary_key => "serial primary key",
  :string      => { :name => "character varying", :limit => 255 },
  #...

Ближайшая вещь к спецификации находится в Руководство по миграции:

Они будут сопоставлены с соответствующим базовым типом базы данных, например, с MySQL :string сопоставляется с varchar(255).

Но это не о PostgreSQL, а не о гарантии.


В стороне, если вы используете PostgreSQL, вы должны почти всегда перейти прямо к :text и притвориться, что :string не существует. PostgreSQL рассматривает их одинаково, за исключением того, что он должен выполнить проверку длины на varchar. Здесь еще немного обсуждается здесь в одном из моих ответов: Изменение типа столбца на более длинные строки в рельсах.

Ответ 2

В rails 4 нет ограничения по умолчанию для строкового типа, как вы можете видеть в источнике :

NATIVE_DATABASE_TYPES = {
        primary_key: "serial primary key",
        bigserial: "bigserial",
        string:      { name: "character varying" },
        text:        { name: "text" },
        #...

если вы не указали ограничение, ActiveRecord просто установит character varying, и вы можете сохранить там строку любой длины, как указано в документации:

Если переменная символов используется без спецификатора длины, тип принимает строки любого размера