Postgres for MySQL (and other database) people

2,192 views

Published on

Greg Mullane

Upgrading from MySQL or other database to Postgres? While Postgres strives to be SQL standard compliant as much as possible, there are plenty of quirks and features you should know about. We'll also talk about some of the ways in which the Postgres community, infrastructure, and development differs from other database projects.

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,192
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
33
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Postgres for MySQL (and other database) people

  1. 1. Postgres (for non-Postgres people) Greg Sabino Mullane  End Point Corpora=on  greg@endpoint.com
  2. 2. SELECT SUM(info) FROM talk;  •  Postgres philosophy and history  •  Conversion advice  •  Postgres gotchas  •  Postgres limitaCons and features  •  OrganizaCon and community  •  Development and infrastructure 
  3. 3. The Part of Whys  •  Why MySQL?  •  Why Postgres?  •  Why me?  •  Why you? 
  4. 4. •  Postgres? PostgreSQL? Postgre? PostgresSQL?  •  Philosphy  •  Mercifully quick history lesson 
  5. 5. MigraCng Your App  •  Schema  •  Data  •  ApplicaCon  •  Support 
  6. 6. MigraCon : Schema  •  Mysqldump? •  --compatible=postgresql --no-data •  Redesign •  Conversion tools
  7. 7. MigraCon : SQL Spec  •  Who cares?  •  Postgres vs. the spec  •  MySQL vs. the spec  •  Oracle vs. the spec  •  DB2 vs. the spec  •  MSSQL vs. the spec 
  8. 8. MigraCon : Schema  •  Tables  •  Engines and plugins  •  CustomizaCon 
  9. 9. MigraCon : Schema : Data Types : Numbers  •  INTEGER (smallint, bigint, serial)  •  NUMERIC (double precision, money)  •  REAL 
  10. 10. MigraCon : Schema : Data Types : Text  •  TEXT  •  VARCHAR(n)  •  CHAR(n) 
  11. 11. MigraCon : Schema : Data Types : Dates  •  DATE  •  TIMESTAMPTZ  •  TIME  •  INTERVAL 
  12. 12. MigraCon : Schema : Data Types : Boolean  •  BOOL  •  TRUE, ‘t’, ‘y’, ‘yes’, ‘on’, 1  •  FALSE, ‘f’, ‘n’, ‘no’, ‘off’, 0 
  13. 13. MigraCon : Schema : Data Types : Binary  •  BYTEA  •  Internal or external? 
  14. 14. MigraCon : Schema : Data Types : Others  •  Geometric (line, path, box, circle, polygon)  •  Arrays  •  ENUM  •  CIDR, INET, MACADDR  •  UUID  •  XML 
  15. 15. MigraCon : Schema : Sequence  •  Auto‐increment  •  SEQUENCE  •  SERIAL  •  INTEGER NOT NULL DEFAULT nextval(‘foo’) 
  16. 16. MigraCon : Schema : DEFAULT  •  cdate TIMESTAMPTZ NOT NULL DEFAULT now()  •  (almost) anything at all  •  No magic 
  17. 17. MigraCon : Schema : FOREIGN KEYS  •  Fully supported  •  ON DELETE CASCADE  •  ON DELETE RESTRICT  •  ON DELETE SET NULL  •  ON DELETE SET DEFAULT  •  DEFERRED INITIALLY DEFERRED 
  18. 18. MigraCon : Schema : Indexes  •  CREATE INDEX foo ON mytab(mycol);  •  CREATE INDEX foo2 ON mytab(mycol) WHERE size  = ‘grande’;  •  CREATE INDEX foo3 ON mytab(LOWER(blurb));  •  CREATE INDEX foo4 ON mytab(LOWER(blurb))  WHERE size = ‘grande’; 
  19. 19. MigraCon : Schema : Indexes  •  CREATE INDEX CONCURENTLY foo ON  mytab(mycol);  •  No rebuilding of tables  •  Reverse scan, bitmap 
  20. 20. MigraCon : Schema : Triggers  •  CREATE TRIGGER mytrig BEFORE INSERT OR  DELETE OR UPDATE ON mytab FOR EACH ROW  EXECUTE PROCEDURE somefunc();  •   Aside: funcCons and languages 
  21. 21. MigraCon : Schema : FuncCons  •  Very custom  •  Pl/PGSQL == Pl/SQL  •  Very powerful 
  22. 22. MigraCon : Data  •  No autocommit, fsync off, no autovacuum  •  COPY vs. INSERT  •  Turn off indexes and triggers (FK)  •  ANALYZE 
  23. 23. ANALYZE  •  Cost‐based planner  •  Autovacuum  •  IniCal load  •  Default_staCsCcs_target  –  10  –  100  –  1000  –  More? 
  24. 24. VACUUM  •  MVCC – Oracle vs. Pg  •  Rollback segment  •  Concurrency and locking  •  Table bloat  •  VACUUM FULL, CLUSTER, REINDEX 
  25. 25. MigraCon : ApplicaCon  •  aka SQL  •  Clients (PHP excepCon)  •  SQL modes  –  TradiConal  –  Postgresql  •  “Any client can change its own session  sql_mode value at any Cme.” 
  26. 26. MigraCon : SQL : NULL  •  NULL is NULL 
  27. 27. MigraCon : SQL : SELECT  •  Query planner  •  JOINS  •  Subselects 
  28. 28. MigraCon : SQL : GROUP BY  •  SELECT a,b,c FROM mytab GROUP BY a,b  •  Standard or not?  DISTINCT ON
  29. 29. MigraCon : SQL : Text match  •  CHAR / VARCHAR / TEXT case sensiCve  •  SELECT count(*) FROM mytab WHERE mycol =  ‘Fred’;  •  …WHERE LOWER(mycol) = ‘fred’; 
  30. 30. MigraCon : SQL : full text search  •  Tsearch2: contrib vs. core  •  Powerful, complex  •  TransacConal! 
  31. 31. MigraCon : SQL : DELETE  •  One table only  •  No LIMIT, no ORDER BY  •  No QUICK, LOW PRIORITY, IGNORE  •  DELETE FROM ONLY mytab WHERE…  •  DELETE FROM mytab USING otab WHERE  mycol = otab.id AND otab.size = 'foo';  •  DELETE FROM mytab WHERE mycol IN (SELECT  id FROM otab WHERE size = ‘foo’); 
  32. 32. MigraCon : SQL : UPDATE  •  Only one table  •  No ORDER BY, LIMIT, etc.  •  UPDATE mytab SET mycol=123 FROM otab  WHERE mycol = otab.id AND otab.size = ‘foo’; 
  33. 33. MigraCon : SQL : INSERT  •  Only one table  •  No REPLACE or ON DUPLICATE KEY UPDATE  •  UPSERT via plpgsql or app logic  •  DEFAULT  •  INSERT INTO mytab DEFAULT VALUES 
  34. 34. MigraCon : SQL : ||  •  Ugh  •  CONCAT  •  Wrapper funcCons  •  NULL an empty string 
  35. 35. MigraCon : SQL: GRANT  •  ..and REVOKE  •  Almost any object  •  Immediate effect 
  36. 36. MigraCon : SQL : locking  •  Use sparingly  •  Share, exclusive  •  Advisory  •  ALTER TABLE, REINDEX, VACUUM FULL 
  37. 37. MigraCon : SQL : Aliases  •  AS opConal but recommended  •  SELECT SUM(mycol) AS mysum  •  SELECT * FROM pg_class c, mytab t… 
  38. 38. MigraCon : SQL : Advanced  •  WITH  •  Windowing  •  Recursive funcCons 
  39. 39. MigraCon : Support  •  RouCne stuff: autovacuum  •  Monitoring (check_postgres)  •  Backups (MVCC based) 
  40. 40. Postgres : Quirks : lowercase  •  Implicit case folding  •  CREATE TABLE abc (A int);  •  CREATE TABLE ABC (a int);  •  CREATE TABLE “abc” (“a” int);  •  CREATE TABLE “ABC” (“A” int);  •  SELECT * FROM “ABC” WHERE “A”=123; 
  41. 41. Postgres : Quirks : CasCng  •  8.3 removed some implicit casts  •  SELECT 1 = ‘1’::text;  •  ERROR: operator does not exist: integer=text  •  1. Fix the app  •  2. Add the casts back in 
  42. 42. Postgres : Quirks : COUNT(*)  •  MyISAM vs INNODB  •  Use an index  •  Triggers  •  SELECT reltuples FROM pg_class WHERE  relname = ‘foo’; 
  43. 43. Postgres : Quirks : Schemas  •  Database versus schemas versus cluster  •  Changes are cheap  •  No name‐based schemas  •  The ‘public’ schema  •  contrib/dblink 
  44. 44. Postgres : Quirks : vacuum  •  Newer the berer  •  autovacuum
  45. 45. Postgres : Quirks : i18n  •  SQL_ASCII vs UTF‐8  •  Per database only 
  46. 46. Postgres : Quirks : Hints  •  No hints per se  •  Smart planner  •  SET enable_* EXPLAIN  •  Few other knobs – per cluster 
  47. 47. Postgres : Quirks : Rules  •  Last resort. ‘nuff
  48. 48. Postgres : Drawbacks  •  ReplicaCon  pg_upgrade pg_upgrade •  In‐place upgrade (pg_migrator, Bucardo)  •  Tuned for a toaster  •  Name  •  Publicity and markeCng 
  49. 49. Postgres : Strengths  •  Custom everything  •  TransacConal DDL  •  PostGIS  •  Query planner  •  Support  •  AuthenCcaCon: pg_hba.conf  –  PAM, ident, Kerberos, LDAP, … 
  50. 50. Postgres : OrganizaCon  •  Who?  •  Transparent meritocracy  •  “core”  •  Commirers  •  Mailing list, IRC, wiki  •  Company roles  •  Spread the risk  •  Cannot be bought (assets or people) 
  51. 51. Postgres : Community  •  Core vs. “core”  •  Pgfoundry, github, bucardo.org, …  •  PostGIS  •  Mailing list? Bug report? User?  •  InteracCon!  •  Wiki, advocacy, sysadmin, docs, packagers  •  Clients, tools, replicaCon systems  •  Volunteers (IRC) 
  52. 52. Postgres : Infrastructure  •  See Dave’s talk later today  •  Servers, companies  •  Build farm  •  Wiki  •  Commisest 
  53. 53. Postgres : Development  •  Show me the money!  •  Individual developers vs. companies  •  CVS vs. git  git wins! :) git wins! •  Commirers vs. patchers vs. reviewers 
  54. 54. Postgres : Version  •  Roughly every year  •  8.3  8.3.10  •  Major version, minor version, revision  •  Naming a version 
  55. 55. Postgres : Patches  •  Bug report, mailing list post, TODO list  •  Run up the flagpole (Tom Lane test)  –  Stable?  –  Useful?  –  Spec compliant?  –  Side effects?  –  Best approach to problem?  •  Diff format, formaung, docs  •  Added to patch queue, commisest  •  Patch reviewer  •  Commit (20 vs 300) 
  56. 56. Postgres : Patches  •  About that flagpole…  •  High standards  •  Cming  •  dfS 
  57. 57. Postgres : Licensing  •  BSD (or MIT)  PostgreSQL license •  Free as in speech  •  Free as in beer  •  Plays well with others (PostGIS) 
  58. 58. SELECT questions FROM audience;

×