PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Zmiana typu kolumny na dłuższe ciągi w szynach

Powinieneś użyć text z Railsami, jeśli chcesz mieć napis bez limitu długości. Taka migracja:

def up
  change_column :your_table, :your_column, :text
end
def down
  # This might cause trouble if you have strings longer
  # than 255 characters.
  change_column :your_table, :your_column, :string
end

powinien uporządkować sprawy. Możesz chcieć :null => false lub inne opcje na końcu.

Kiedy używasz string kolumna bez wyraźnego limitu, Railsy dodadzą niejawny :limit => 255 . Ale jeśli używasz text , otrzymasz dowolny typ łańcucha o dowolnej długości, który obsługuje baza danych. PostgreSQL pozwala na użycie varchar kolumna bez długości, ale większość baz danych używa do tego osobnego typu, a Railsy nie wiedzą o varchar bez długości. Musisz użyć text w Railsach, aby uzyskać text kolumna w PostgreSQL. W PostgreSQL nie ma różnicy między kolumną typu text i jeden typu varchar (ale varchar(n) jest różne). Co więcej, jeśli wdrażasz na PostgreSQL, nie ma powodu, aby używać :string (AKA varchar ) w ogóle baza danych traktuje text i varchar(n) to samo wewnętrznie, z wyjątkiem dodatkowych ograniczeń długości dla varchar(n); powinieneś używać tylko varchar(n) (AKA :string ), jeśli masz ograniczenie zewnętrzne (takie jak formularz rządowy, który mówi, że pole 432 w formularzu 897/B będzie miało długość 23 znaków) na rozmiar kolumny.

Na marginesie, jeśli używasz string kolumna w dowolnym miejscu, należy zawsze określić :limit jako przypomnienie dla siebie, że istnieje limit i powinieneś mieć walidację w modelu, aby upewnić się, że limit nie zostanie przekroczony. Jeśli przekroczysz limit, PostgreSQL narzeka i zgłosi wyjątek, MySQL po cichu skróci ciąg lub narzeka (w zależności od konfiguracji serwera), SQLite pozwoli mu przejść bez zmian, a inne bazy danych zrobią coś innego (prawdopodobnie narzeka) .

Powinieneś także rozwijać, testować i wdrażać na tej samej bazie danych (którą zwykle będzie PostgreSQL w Heroku), powinieneś nawet używać tych samych wersji serwera bazy danych. Istnieją inne różnice między bazami danych (takie jak zachowanie GROUP BY), od których ActiveRecord nie będzie Cię izolować. Być może już to robisz, ale pomyślałem, że i tak o tym wspomnę.

Aktualizacja :Nowsze wersje ActiveRecord rozumieją varchar bez limitu, więc przynajmniej w PostgreSQL możesz powiedzieć:

change_column :your_table, :your_column, :string, limit: nil

zmienić varchar(n) kolumna do varchar . text i varchar są nadal tym samym, jeśli chodzi o PostgreSQL, ale niektóre kreatory formularzy traktują je inaczej:varchar otrzymuje <input type="text"> podczas gdy text pobiera wielowierszowy <textarea> .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wybrać rekordy z ostatnich 24 godzin za pomocą PostgreSQL

  2. Jak używać funkcji podciągów w PostgreSQL i Redshift

  3. Jaka jest różnica między postgres a postgresql_psycopg2 jako silnikiem bazy danych dla django?

  4. Skalowanie PostgreSQL za pomocą puli połączeń i równoważenia obciążenia

  5. PostgreSQL:porównanie ciągów bez rozróżniania wielkości liter