PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Промяна на типа колона на по-дълги низове в релси

Трябва да използвате text с Rails, ако искате низ без ограничение за дължина. Миграция като тази:

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

трябва да подреди нещата. Може да искате :null => false или някои други опции в края на това.

Когато използвате string колона без изрично ограничение, Rails ще добави неявно :limit => 255 . Но ако използвате text , ще получите произволен тип низ с произволна дължина, който базата данни поддържа. PostgreSQL ви позволява да използвате varchar колона без дължина, но повечето бази данни използват отделен тип за това и Rails не знае за varchar без дължина. Трябва да използвате text в Rails, за да получите text колона в PostgreSQL. В PostgreSQL няма разлика между колона от тип text и един от тип varchar (но varchar(n) е различен). Освен това, ако внедрявате върху PostgreSQL, няма причина да използвате :string (известен още като varchar ) изобщо, базата данни третира text и varchar(n) същото вътрешно, с изключение на допълнителните ограничения за дължина за varchar(n); трябва да използвате само varchar(n) (известен още като :string ), ако имате външно ограничение (като правителствен формуляр, който казва, че поле 432 във формуляр 897/B ще бъде дълго 23 знака) за размера на колоната.

Като настрана, ако използвате string колона навсякъде, винаги трябва да задавате :limit като напомняне за себе си, че има ограничение и трябва да имате валидиране в модела, за да сте сигурни, че ограничението не е надвишено. Ако превишите лимита, PostgreSQL ще се оплаче и ще предизвика изключение, MySQL тихо ще съкрати низа или ще се оплаче (в зависимост от конфигурацията на сървъра), SQLite ще го остави да премине както е, а други бази данни ще направят нещо друго (вероятно се оплакват) .

Освен това трябва да разработвате, тествате и внедрявате върху една и съща база данни (която обикновено ще бъде PostgreSQL в Heroku), дори трябва да използвате същите версии на сървъра на базата данни. Има и други разлики между базите данни (като поведението на GROUP BY), от които ActiveRecord няма да ви изолира. Може вече да правите това, но все пак реших да го спомена.

Актуализиране :По-новите версии на ActiveRecord разбират varchar без ограничение, така че поне с PostgreSQL можете да кажете:

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

за да промените varchar(n) колона към varchar . text и varchar са все още едно и също нещо, що се отнася до PostgreSQL, но някои създатели на формуляри ще ги третират по различен начин:varchar получава <input type="text"> докато text получава многоредов <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. Ключови неща, които трябва да наблюдавате в PostgreSQL – анализиране на вашето работно натоварване

  2. Използване на съединения за комбиниране на данни от различни таблици в PostgreSQL

  3. Оптимизирайте обхвата на заявки за времеви печати на Postgres

  4. Проактивно наблюдение на PostgreSQL (ъгъл на Developer Studio/Advisors)

  5. Как pg_sleep() работи в PostgreSQL