Vraag Hoe vind ik het pad naar pg_hba.conf van de shell?


Ik zou het pad naar pg_hba.conf van de shell willen verkrijgen. Het pad varieert tussen versies van PostgreSQL. Bijvoorbeeld voor 8.4 en 9.1:

/etc/postgresql/8.4/main/pg_hba.conf
/etc/postgresql/9.1/main/pg_hba.conf

Ik heb de pg_config opdracht, maar deze informatie lijkt niet te zijn opgenomen.

Dit is zodat ik een uniform commando kan gebruiken om te openen pg_hba.conf en andere PostgreSQL-configuratiebestanden voor bewerking.

Ik gebruik bash.


71
2018-02-15 18:38


oorsprong


Hoe zit het met zoeken naar pg_hba.conf? - Pramod
@Pramod Er kunnen tientallen rondslingeren. Wat als u wilt weten welke van hen door Postgres wordt gebruikt? - Bleeding Fingers
@BleedingFingers Afhankelijk van uw instellingen, kunt u waarschijnlijk gewoon filteren op toegangstijd. find / -name pg_hba.conf -amin -5 (als de server in de laatste 5 minuten opnieuw is opgestart, eenvoudig genoeg om deze te wijzigen -atime als het voor het laatst een langere tijd geleden opnieuw is opgestart). Of u kunt filteren op toegangstijd die nieuwer is dan de tijd wijzigen of een van de andere tijdgebaseerde opties vinden ... (Hoewel filteren op lsof | grep pg_hba.conf terwijl het draaien van een server niet werkt). - Parthian Shot


antwoorden:


pg_config is voor compliation-informatie, om extensies en client-programma's te helpen compileren en koppelen aan PostgreSQL. Het weet niets van de actieve PostgreSQL-instantie (s) op de machine, alleen de binaire bestanden.

pg_hba.conf kan op veel andere plaatsen verschijnen, afhankelijk van hoe Pg is geïnstalleerd. De standaardlocatie is pg_hba.conf binnen de data_directory van de database (die zou kunnen zijn in /home, /var/lib/pgsql, /var/lib/postgresql/[version]/, /opt/postgres/, etc etc etc) maar gebruikers en packagers kunnen het plaatsen waar ze maar willen. Helaas.

De enige geldige manieren vinden pg_hba.conf is om een ​​lopend PostgreSQL-exemplaar te vragen waar het is pg_hba.conf is, of vraag het systeembeheerder waar het zich bevindt. U kunt er niet eens op vertrouwen dat u vraagt ​​waar de datadir zich bevindt en wat u moet ontleden postgresql.conf omdat een init-script een param-type kan passeren -c hba_file=/some/other/path bij het starten van Pg.

Wat u wilt doen is PostgreSQL vragen:

SHOW hba_file;

Deze opdracht moet worden uitgevoerd op een superuser-sessie, dus voor shell-scripting zou je iets kunnen schrijven als:

psql -t -P format=unaligned -c 'show hba_file';

en stel de omgevingsvariabelen in PGUSER, PGDATABASE, enz. om ervoor te zorgen dat de verbinding goed is.

Ja, dit is een beetje een kip-en-ei-probleem, in die zin dat als de gebruiker geen verbinding kan maken (bijvoorbeeld nadat hij het bewerken heeft verpest) pg_hba.conf) die je niet kunt vinden pg_hba.conf om het te repareren.

Een andere optie is om naar de ps commando's output en kijk of het postmaster data directory argument -D is daar zichtbaar, b.v.

ps aux  | grep 'postgres *-D'

sinds pg_hba.conf bevindt zich in de gegevensdirectory (tenzij u op Debian / Ubuntu of een ander derivaat bent en hun pakketten gebruikt).

Als u specifiek Ubuntu-systemen target met PostgreSQL die zijn geïnstalleerd vanuit Debian / Ubuntu-pakketten, wordt het een beetje eenvoudiger. U hoeft niet te handelen met hand-gecompileerde-van-bron Pg die van iemand is initdb'd een datadir voor in huis, of een EnterpriseDB Pg installeren in / opt, etc. Je kunt het vragen pg_wrapper, de Debian / Ubuntu multi-versie Pg-manager, waar PostgreSQL gebruikt de pg_lsclusters opdracht van pg_wrapper.

Als u geen verbinding kunt maken (Pg werkt niet of u moet bewerken pg_hba.conf om verbinding te maken) moet je het systeem doorzoeken pg_hba.conf bestanden. Op Mac en Linux zoiets sudo find / -type f -name pg_hba.conf zal ik doen. Controleer dan de PG_VERSION bestand in dezelfde map om zeker te zijn dat het de juiste PostgreSQL-versie is als u er meer dan één hebt. (Als pg_hba.conf is in /etc/, negeer dit, in plaats daarvan is dit de naam van de bovenliggende map). Als u meer dan één gegevensdirectory voor dezelfde PostgreSQL-versie hebt, moet u naar de grootte van de database kijken, de opdrachtregel van de actieve postgres controleren vanaf ps om te zien of het de gegevensdirectory is -Dargument-overeenkomsten waar u aan het bewerken bent, enz.


107
2018-02-16 03:18



Dit is misschien niet geldig voor 9.3, ik krijg: psql: invalid port number: "format=unaligned" wanneer ik die psql-opdracht voer. - jcollum
@jcollum Nee, gewoon een typfout. -P niet -p. Vast. - Craig Ringer
Dit is het enige antwoord dat werkt als je meer dan één versie van PostgreSQL hebt geïnstalleerd. - bonh


Dit is hoe ik het doe:

john@host:~$ ls /etc/postgresql
9.1
john@host:~$ sudo vim /etc/postgresql/9.1/main/pg_hba.conf

Omdat het pad als volgt is: /etc/postgresql/[VERSION]/main/pg_hba.conf


17
2017-08-29 13:42





Ik gebruik het volgende voor detectie van configuratiebestanden:

$(ls /etc/postgresql/*/main/pg_hba.conf)
$(ls /etc/postgresql/*/main/postgresql.conf)

2
2017-10-10 13:07





Het juiste bewerken pg_hba.conf met je standaard visuele editor (vim, emacs, nano, joe, etc.) is net zo eenvoudig als:

$VISUAL /etc/postgresql/$(ls /etc/postgresql)/main/pg_hba.conf


1
2018-04-24 22:30





Vraag uw database:

$ psql -U postgres
postgres=# SHOW config_file;

0
2018-06-04 13:55





Om te weten waar het bestand zich bevindt typ gewoon:

pg_lsclusters

-2
2017-10-13 23:53



Als u het bestand pg_hba.conf wilt bijwerken, geeft u de volgende opdracht: $ sudo nano /etc/postgresql/9.1/main/pg_hba.conf - nirvanastack
-bash: pg_lsclusters: commando niet gevonden - Mona Jalal