sql >> Database >  >> RDS >> PostgreSQL

Een kolomtype wijzigen in langere strings in rails

Gebruik text met Rails als je een snaar wilt zonder lengtelimiet. Een migratie als deze:

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

dingen moeten regelen. Misschien wil je :null => false of andere opties aan het einde daarvan.

Wanneer je een string . gebruikt kolom zonder een expliciete limiet, zal Rails een impliciete :limit => 255 . toevoegen . Maar als u text . gebruikt , krijgt u elke willekeurige lengte van het tekenreekstype dat de database ondersteunt. Met PostgreSQL kunt u een varchar . gebruiken kolom zonder lengte, maar de meeste databases gebruiken daarvoor een apart type en Rails weet niets van varchar zonder lengte. Je moet text . gebruiken in Rails om een ​​text . te krijgen kolom in PostgreSQL. Er is geen verschil in PostgreSQL tussen een kolom van het type text en een van het type varchar (maar varchar(n) is verschillend). Bovendien, als u naast PostgreSQL implementeert, is er geen reden om :string te gebruiken (ook bekend als varchar ) überhaupt behandelt de database text en varchar(n) hetzelfde intern, behalve de extra lengtebeperkingen voor varchar(n); gebruik alleen varchar(n) (ook bekend als :string ) als u een externe beperking heeft (zoals een overheidsformulier dat zegt dat veld 432 op formulier 897/B 23 tekens lang zal zijn) op de kolomgrootte.

Even terzijde, als je een string . gebruikt kolom waar dan ook, u moet altijd de :limit . specificeren om uzelf eraan te herinneren dat er een limiet is en dat u een validatie in het model moet hebben om ervoor te zorgen dat de limiet niet wordt overschreden. Als je de limiet overschrijdt, zal PostgreSQL klagen en een uitzondering maken, MySQL zal stilletjes de string afkappen of klagen (afhankelijk van de serverconfiguratie), SQLite zal het laten doorgaan zoals het is, en andere databases zullen iets anders doen (waarschijnlijk klagen) .

Je moet ook dezelfde database ontwikkelen, testen en implementeren (meestal PostgreSQL bij Heroku), je moet zelfs dezelfde versies van de databaseserver gebruiken. Er zijn andere verschillen tussen databases (zoals het gedrag van GROUP BY) waarvan ActiveRecord u niet zal isoleren. Misschien doe je dit al, maar ik dacht ik vermeld het toch even.

Bijwerken :Nieuwere versies van ActiveRecord begrijpen varchar zonder limiet dus, met PostgreSQL tenminste, kun je zeggen:

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

om een ​​varchar(n) te wijzigen kolom naar varchar . text en varchar zijn nog steeds hetzelfde wat PostgreSQL betreft, maar sommige formulierbouwers zullen ze anders behandelen:varchar krijgt een <input type="text"> terwijl text krijgt een meerregelige <textarea> .



  1. Hoe maak je een blog in PHP en MySQL-database - Admin Posts

  2. Tekstcompressie in PostgreSQL

  3. Is er een manier om de weergavedefinitie van een SQL Server op te halen met behulp van gewone ADO?

  4. Paginering in SQL Server met OFFSET/FETCH