PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Installation de Postgres sur Windows pour une utilisation avec Ruby-on-Rails

Une approche pour installer Postgres sur Windows 7 à utiliser comme base de données PostgreSQL pour un projet rails 3 (3.0.7).

Préambule (vous pouvez ignorer ce passage)

Donc, la première chose à souligner est que Postgres n'est pas seulement une extension de fichier différente de .sqlite3, c'est tout un mécanisme de gestion de vos bases de données. En tant que tel, il a un modèle client/serveur, dont vous devrez configurer les deux pour utiliser Postgres comme base de données pour votre application rails.

Motivation pour passer par la difficulté considérable de la configuration de Postgres par rapport à la configuration sqlite presque sans effort :si vous déployez sur Heroku, ils utilisent actuellement Postgres, de sorte que certains de vos appels SQL qui fonctionnent bien sur sqlite3 seront interrompus lorsqu'ils sont utilisés avec Postgres. Il est beaucoup plus facile de déboguer postgres localement plutôt que sur les serveurs de Heroku.

J'ai donc fait les choses suivantes :(Avertissement :j'ai peut-être oublié d'inclure certaines des choses que j'ai faites... il m'a fallu plus de 48 heures de douleur pour que cela fonctionne... si les conseils suivants ne fonctionnent pas ne fonctionne pas pour vous, alors l'énorme (2300 pages !!) mais la documentation Postgres très complète devrait vous aider. Je vous recommande quand même de télécharger ceci si vous êtes sérieux au sujet de l'utilisation de Postgres car il contient beaucoup de matériel que je viens tout juste de commencer pour comprendre l'importance de.) (Deuxième avertissement:j'ai presque certainement enfreint 20 directives Postgres sensées et exposé des failles de sécurité dans la base de données Postgres en le faisant. S'il y a des choses évidentes avec lesquelles un utilisateur expérimenté de Postgres n'est pas d'accord, veuillez modifier mon message.)

.Étape 1. Téléchargez et installez PostgreSQL v9.0.4-1 à partir d'ici, car ici, seul 9.0.x serait pris en charge sur Windows 7. J'ai conservé toutes les options par défaut et j'ai simplement utilisé "secret" comme mot de passe lorsque le programme d'installation de Postgres m'y invite (encore une fois Je ne sais pas exactement quelles sont les conséquences du partage de ces informations sur Internet... je le découvrirai bientôt, j'en suis sûr). Vous aurez besoin de ce mot de passe à l'étape 3.

.Étape 2. Modifiez les variables d'environnement telles que Path (pour le système , not user (je ne sais pas si cela est significatif ou non)) est :C:\Program Files\PostgreSQL\9.0\bin
(n.b. Je suis sur Windows 64 bits donc il n'est pas installé pour 32 bits dans 'C:\Program Files (x86)\PostgreS...')

N'oubliez pas de modifier les droits d'accès au dossier PostgreSQL\9.0 et de supprimer tous les droits de lecture seule par défaut sur le dossier ou le contenu. (Vous devrez peut-être également redémarrer votre ordinateur pour que ceux-ci prennent effet - merci @Gavin - bien que peu probable).

.Étape 3. Testez l'installation de Postgres en essayant de créer une nouvelle base de données :depuis la ligne de commande :createdb -U postgres mydb_as_postgres .Vous devriez être invité à entrer le mot de passe maintenant, si vous ne l'êtes pas, il se peut que vous deviez d'abord démarrer le serveur (je ne me souviens pas si j'avais besoin de le faire ou non). Le moyen le plus simple est de passer par pgAdmin III, qui devrait être 'pgAdmin3.exe' dans un dossier quelque part comme C:\Program Files\PostgreSQL\9.0\bin . Une fois que vous avez démarré pgAdmin III, il devrait y avoir un panneau sur la gauche appelé "Object Browser". Dans celui-ci, il devrait y avoir un arbre avec :

Groupes de serveurs> Serveurs> PostgreSQL 9.0 (localhost :5432)

Faites un clic droit sur 'PostgreSQL 9.0 (localhost:5432)' et sélectionnez 'Se connecter'.

Le createdb -U postgres mydb_as_postgres La commande doit créer une nouvelle base de données appelée 'mydb_as_postgres' que vous pouvez vérifier en lançant pgAdmin III et en double-cliquant sur 'PostgreSQL 9.0 (localhost:5432)'. En dessous, il devrait y avoir :

Databases (2) qui devrait lister 2 bases de données appelées mydb_as_postgres et postgres

Je l'ai appelé _as_postgres car le -U postgres une partie de la commande indique à Postgres de créer la base de données avec l'utilisateur postgres comme propriétaire, ce que vous devez spécifier lorsque vous n'êtes pas connecté en tant qu'utilisateur postgres. J'ai tous mes fichiers stockés en tant qu'utilisateur "AJames", donc si vous êtes le même et que vous souhaitez continuer à développer votre application lorsque vous êtes connecté en tant qu'utilisateur différent, vous devez créer un "rôle" Postgres pour cet utilisateur maintenant (voir l'étape 4).

.Étape 4. Via pgAdmin III. Faites un clic droit sur les rôles de connexion (qui pour moi est dans):

Navigateur d'objets > Groupes de serveurs > Serveurs > PostgreSQL 9.0 (localhost :5432) > Rôles de connexion

Faites un clic droit sur les rôles de connexion et sélectionnez "Nouveau rôle de connexion..." dans le nom du rôle, entrez le nom d'utilisateur de votre système d'exploitation, qui pour moi est AJames, et remplissez votre mot de passe sous l'onglet "Privilèges de rôle", j'ai tout vérifié les cases, mais un utilisateur postgres expérimenté recommanderait probablement fortement de ne cocher que "hérite des droits des rôles parents" et "peut créer des objets de base de données". Mais je ne suis pas un utilisateur expérimenté et je veux juste déboguer les appels SQL Rails dans Postgres donc J'ai également coché les cases 'Superutilisateur' et 'Peut créer des rôles', juste au cas où.

.Étape 5. Vous devriez maintenant pouvoir créer une nouvelle base de données sans être connecté en tant qu'utilisateur postgres. Essayez de taper :

createdb mydb_as_user

J'espère que cela devrait fonctionner pour vous.

.Étape 6. Bon, vous avez donc un fichier development.sqlite3 dans le répertoire 'db/' de vos rails. Au départ, j'allais définir le prochain test comme convertissant ceci de sqlite3 en psql. Heroku.com (voir plutôt la solution à partir de l'étape 7). Pour ceux qui n'ont qu'une application locale et aucune donnée dans Heroku, ils ne peuvent pas utiliser la même approche, ils devront donc peut-être explorer quelque chose comme ceci :

x6.1 Tout d'abord, testez 'psql' en essayant une commande de votre ligne de commande comme :

psql mydb_as_user

cela devrait afficher quelque chose comme ci-dessous (après avoir tapé votre mot de passe) :

C:>psql mydb_as_user
Password:
psql (9.0.4)
WARNING: Console code page (850) differs from Windows code page (1252)
         8-bit characters might not work correctly. See psql reference
         page "Notes for Windows users" for details.
Type "help" for help.

mydb5=# 

x6.2 essayez d'entrer :

CREATE TABLE users_table (id integer, "name" text);

Il devrait afficher :

CREATE TABLE
mydb5=#

Si vous archivez pgAdmin III, vous devriez voir le tableau ci-dessous :

Explorateur d'objets> Groupes de serveurs> Serveurs> PostgreSQL 9.0 (localhost :5432)> Bases de données> mydb_as_user> Schémas> public> Tables> users_table>

x6.3 Ok, ensuite pour essayer la conversion. J'ai téléchargé le binaire précompilé sqlite-shell pour Windows.
x6.4 Créer un nouveau répertoire, j'ai utilisé 'C:\temp' et y mettre le sqlite3.exe et vos fichiers development.sqlite3.
x6. 5 Utilisez les commandes suivantes (qui viennent d'ici) pour vider la base de données development.sqlite3 dans Postgres.

sqlite3 development .dump | psql development2

vous pourriez obtenir une erreur comme :

psql: FATAL: database "development2" does not exist

x6.6 donc je suis allé dans pgAdmin III et j'ai créé une base de données de développement 2, j'ai réessayé la commande et j'ai obtenu :

ERROR:  syntax error at or near "PRAGMA"
LINE 1: PRAGMA foreign_keys=OFF;
        ^
BEGIN
COMMIT

Comme je l'ai dit, je n'ai pas réussi à le faire fonctionner. Je suis sûr qu'il existe un moyen de contourner cette erreur, mais j'ai pensé à une autre manière et j'ai donc plutôt utilisé cette solution (qui nécessite un compte Heroku pour avoir vos données et effectue la conversion de sqlite3 en psql en utilisant le gem Taps (je croire):

.Étape 7. dans pgAdmin III, j'ai créé une autre base de données. Sous l'onglet Propriétés, j'ai défini le nom :"développement", propriétaire :"AJames" (remplacez-le par votre propre nom d'utilisateur Windows). Et sous l'onglet privilèges, définissez le rôle :"public" et cochez l'option ALL (pensez que cela se réinitialise sur décoché, donc je ne suis pas sûr que ce soit nécessaire).

.Étape 8. ajoutergem 'pg', '0.11.0' à votre fichier gem. Vous voudrez probablement aussi supprimer le :gem 'sqlite3' à ce stade aussi.

.Étape 9. définissez database.yml comme suggéré ici sur :

development:
  adapter: postgresql
  database: db/development
  username: AJames # replace this with your own user name
  password: secret # replace this with your own password
  host: localhost
  encoding: UTF8
  pool: 5
  timeout: 5000

Si vous travaillez sur un projet open source et que vous ne souhaitez pas que votre mot de passe soit rendu public, consultez certaines des réponses à Fournir en toute sécurité le mot de passe de la base de données dans une application Rails.

.Étape 10. à partir de la ligne de commande dans le répertoire racine de votre application Rails, exécutez :rake db:migrate Cela créera le nouveau schéma et toutes les tables de la base de données Postgres.

.Étape 11. lancez heroku db:pull depuis votre ligne de commande (à nouveau depuis le répertoire racine de votre application rails) pour extraire toutes vos données vers le bas et dans votre nouvelle base de données Postgres vide. Je pense qu'à ce stade, votre bijou de robinets fera ce travail pour vous.

.Étape 12. J'espère qu'il n'y a pas d'étape 12 ! ... et cela devrait maintenant fonctionner pour vous. Bon débogage RoR PostgreSQL ! Veuillez modifier, ou faites-le moi savoir, s'il y a des erreurs dans ceci.

Voici également une liste de choses supplémentaires qui pourraient être intéressantes/utiles :

  • Ceci est un article de blog sur les mots de passe Postgres, à quoi ils servent, pourquoi vous en avez besoin, comment les changer, etc.
  • Ceci, sous "Créer une base de données spatiale", est utile pour les débutants pour comprendre ce qu'est pg_hba.conf et le deuxième lien que Reno a donné ci-dessus, sous "Utiliser l'interface graphique de pgAdmin III" est utile pour tester si postgres fonctionne réellement , avant d'essayer de l'adapter à Rails (par exemple, essayez de créer une base de données et d'y mettre une table et quelques données).
  • Dans l'énorme mais très complète documentation Postgres, je commencerais à la page 58, 'I. Didacticiel'. Ensuite, sur la page pdf 431 (!), il y a "Chapitre 17. Configuration et fonctionnement du serveur" que j'ai également trouvé utile.