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

преминаване от MySQL към PostgreSQL за Ruby on Rails в името на Heroku

Често срещани проблеми:

  1. ГРУПИРАНЕ ПО поведение. PostgreSQL има доста строга GROUP BY. Ако използвате клауза GROUP BY, тогава всяка колона във вашия SELECT трябва или да се появи във вашата GROUP BY, или да се използва в агрегатна функция.
  2. Отрязване на данни. MySQL тихо ще съкрати дълъг низ, за ​​да се побере вътре в char(n) колона, освен ако сървърът ви не е в строг режим, PostgreSQL ще се оплаче и ще ви накара сами да съкратите низа си.
  3. Цитирането е различно, MySQL използва обратни отметки за идентификатори за цитиране, докато PostgreSQL използва двойни кавички.
  4. LIKE е независимо от главните букви в MySQL, но не и в PostgreSQL. Това кара много потребители на MySQL да използват LIKE като оператор за равенство на низовете, независимо от главните букви.

(1) ще бъде проблем, ако използвате group на AR метод във всяка от вашите заявки или GROUP BY във всеки необработен SQL. Направете малко търсене на column "X" must appear in the GROUP BY clause or be used in an aggregate function и ще видите някои примери и често срещани решения.

(2) ще бъде проблем, ако използвате колони с низ навсякъде в приложението си и вашите модели не потвърждават правилно дължината на всички входящи стойности на низове. Обърнете внимание, че създаването на колона с низове в Rails без посочване на ограничение всъщност създава varchar(255) колона, така че всъщност има неявно :limit => 255 въпреки че не сте посочили такъв. Алтернатива е да използвате t.text за вашите низове вместо t.string; това ще ви позволи да работите с произволно големи низове без санкции (поне за PostgreSQL). Както Erwin отбелязва по-долу (и всеки друг шанс, който получава), varchar(n) е малко анахронизъм в света на PostgreSQL.

(3) не би трябвало да е проблем, освен ако нямате необработен SQL в кода си.

(4) ще бъде проблем, ако използвате LIKE навсякъде в приложението си. Можете да коригирате това, като промените a like b към lower(a) like lower(b) (или upper(a) like upper(b)). ако обичате да крещите) или a ilike b но имайте предвид, че LIKE на PostgreSQL е нестандартен.

Има и други разлики, които могат да причинят проблеми, но те изглеждат като най-честите проблеми.

Ще трябва да прегледате няколко неща, за да се чувствате в безопасност:

  • group обаждания.
  • Необработен SQL (включително всички фрагменти в where обаждания).
  • Проверки на дължината на низовете във вашите модели.
  • Всички употреби на LIKE.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да съхранявам XML данни в mysql база данни? Не искам чужди ключове като луд

  2. съхраняване на JSON данни в mysql

  3. Как да разположите Chamilo MySQL база данни за висока наличност

  4. MIN() – Намерете минималната стойност в колона в MySQL

  5. REPLACE в MySQL, независимо от главните букви?