Instalace nejnovější PostgreSQL do CentOS 7

Instalace nejnovější PostgreSQL do CentOS 7
« kdy: 08. 02. 2019, 17:35:40 »
Hezký večer všem, prosím si o radu, snažím se nainstalovat nejnovější dostupnou postgresql databázi na Centos 7 a bohužel se mi do nedaří ani při postupování přesně podle Red Hat návodů.

Je tu někdo zkušený, který by mi moc prosím poradil co dělám špatně?
Veškeré informace jsou zobrazeny na fotce, ale pro jistotu ještě v textové formě:

Můj postup:
•   yum install centos-release-scl yum-utils
•   yum-config-manager --enable rhel-server-rhscl-7-rpms
•   yum install rh-postgresql95
•   psql –V
o   psql (PostgreSQL) 9.5.14
•   nano /var/opt/rh/rh-postgresql95/lib/pgsql/data/pg_hba.conf
o   indent -> md5
•   service postgresql95-postgresql start
o   Redirecting to /bin/systemctl start postgresql95-postgresql.service
o   Failed to start postgresql95-postgresql.service: Unit not found.

•   ls /etc/rc.d/init.d/ | grep postgresql
o   "Not found"

Moc Vám děkuji za případné rady. Mějte se.
« Poslední změna: 08. 02. 2019, 18:25:01 od Petr Krčmář »


Jose D

  • *****
  • 889
    • Zobrazit profil
Re:Instalace nejnovější PostgreSQL do CentOS 7
« Odpověď #1 kdy: 08. 02. 2019, 19:14:36 »
přijde mi, že postupuješ podle nějakého návodu pro RHEL6 - příkaz "service" je celkem podezřelý :).

Zkus to takhle:

Kód: [Vybrat]
[root@tasha-menden ~]# yum install centos-release-scl yum-utils
...
[root@tasha-menden ~]# yum-config-manager --enable rhel-server-rhscl-7-rpms
...
[root@tasha-menden ~]# /opt/rh/rh-postgresql95/root/usr/bin/postgresql-setup --initdb
...
[root@tasha-menden ~]# systemctl start rh-postgresql95-postgresql.service
...
[root@tasha-menden ~]# systemctl status rh-postgresql95-postgresql.service
● rh-postgresql95-postgresql.service - PostgreSQL database server
   Loaded: loaded (/usr/lib/systemd/system/rh-postgresql95-postgresql.service; disabled; vendor preset: disabled)
   Active: active (running) since Pá 2019-02-08 18:09:14 UTC; 6s ago
  Process: 24362 ExecStart=/opt/rh/rh-postgresql95/root/usr/libexec/postgresql-ctl start -D ${PGDATA} -s -w -t ${PGSTARTTIMEOUT} (code=exited, status=0/SUCCESS)
  Process: 24360 ExecStartPre=/opt/rh/rh-postgresql95/root/usr/libexec/postgresql-check-db-dir %N (code=exited, status=0/SUCCESS)
 Main PID: 24368 (postgres)
   CGroup: /system.slice/rh-postgresql95-postgresql.service
           ├─24368 /opt/rh/rh-postgresql95/root/usr/bin/postgres -D /var/opt/rh/rh-postgresql95/lib/pgsql/data
           ├─24369 postgres: logger process   
           ├─24371 postgres: checkpointer process   
           ├─24372 postgres: writer process   
           ├─24373 postgres: wal writer process   
           ├─24374 postgres: autovacuum launcher process   
           └─24375 postgres: stats collector process   
[root@tasha-menden ~]#

Re:Instalace nejnovější PostgreSQL do CentOS 7
« Odpověď #2 kdy: 08. 02. 2019, 19:18:18 »
Co vypíše příkaz:
rpm -ql rh-postgresql95

Jose D

  • *****
  • 889
    • Zobrazit profil
Re:Instalace nejnovější PostgreSQL do CentOS 7
« Odpověď #3 kdy: 08. 02. 2019, 19:33:37 »
Co vypíše příkaz:
rpm -ql rh-postgresql95
nic. to je prázdnej balík.. Obsahuje jen dependency na reálná rpm.

Kód: [Vybrat]
[root@tasha-menden ~]# rpm -ql rh-postgresql95
(contains no files)
[root@tasha-menden ~]#

Re:Instalace nejnovější PostgreSQL do CentOS 7
« Odpověď #4 kdy: 08. 02. 2019, 20:19:11 »
@Jose D: Výborně, děkuji, nečekal jsem až takovou trivialitu, zkoušel jsem předtím i systemctl, ale zřejmě špatně.

Kdyby se ti ještě chtělo dát mi radu, proč od standardní práce s postresql nefunguje uživatel postgres pro práci s databází? Při SC se s databází asi pracuje nějak jinak?

Problém je zase na obrázku, ale popíši ho i textově:

[root@postgresc2 ~]# sudo -i -u postgres
-bash-4.2$ psql
-bash: psql: command not found
-bash-4.2$

Zatímco u klasické instalace není problém:
[root@postgre ~]# sudo -i -u postgres
-bash-4.2$ psql -V
psql (PostgreSQL) 9.2.24
-bash-4.2$


Děkuji za nápad, jak zprovoznit funkčnost uživatele prostřednictvím kterého se ovládá databáze.


Jose D

  • *****
  • 889
    • Zobrazit profil
Re:Instalace nejnovější PostgreSQL do CentOS 7
« Odpověď #5 kdy: 08. 02. 2019, 21:57:47 »
vypiš si PATH pod uživatelem postgres a koukni jestli v někde v adresářích v ní je psql

spoiler: nebude.

koukni se pořádně na princip scl - všechno je mimo standardní adresáře.

Chceš udělat něco jako
Kód: [Vybrat]
scl enable $názevkolekce $tvůjshell, případně pokud to má být natrvalo, tak máme místa jako profile.d, bash.rc atp.

viz https://access.redhat.com/solutions/527703

Takhle, máš nějaký rozumný důvod proč používáš jinačí postgres než ten přímo od Postgresu? Kdyby to byl RHEL, tak chápu, support. Ale pokud je to CentOS, tak nevím..
« Poslední změna: 08. 02. 2019, 21:59:30 od Jose D »

Re:Instalace nejnovější PostgreSQL do CentOS 7
« Odpověď #6 kdy: 09. 02. 2019, 10:35:54 »
Ano, všiml jsem, si že jsou všechny adresáře jinde, když jsem hledal pg_hba.conf a našel ho v /var/opt/rh/rh-postgresql95/lib/pgsql/data/pg_hba.conf , nespíš pro možnost více verzí, které běží na serveru společně.

Důvod mám takový, že na jiném serveru mi to takhle funguje v pořádku a chci udělat skript, který bude zálohovat tu databázi pravidelně na obou serverech a potřebuji aby to probíhalo na obou serverech stejně univerzálně.

Nejsem si moc jistý, jestli je vhodné, aby se ten zálohovací script spouště pod rootem? Pokud by to ničemu nevadilo, tak bych asi toho "postgres" uživatele ani nepotřeboval.

Zde je NEpožadovaný výpis:
-bash-4.2$ echo $PATH
/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin
-bash-4.2$ printenv
XDG_SESSION_ID=50
HOSTNAME=postgresc2.test
SHELL=/bin/bash
TERM=xterm
HISTSIZE=1000
USER=postgres
LS_COLORS=blabla
SUDO_USER=root
SUDO_UID=0
USERNAME=postgres
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin
MAIL=/var/spool/mail/postgres
PWD=/var/lib/pgsql
LANG=en_US.UTF-8
HISTCONTROL=ignoredups
SHLVL=1
SUDO_COMMAND=/bin/bash
HOME=/var/lib/pgsql
LOGNAME=postgres
LESSOPEN=||/usr/bin/lesspipe.sh %s
SUDO_GID=0
_=/bin/printenv




Jose D

  • *****
  • 889
    • Zobrazit profil
Re:Instalace nejnovější PostgreSQL do CentOS 7
« Odpověď #7 kdy: 09. 02. 2019, 13:58:41 »
..když jsem hledal pg_hba.conf a našel ho v /var/opt/rh/rh-postgresql95/lib/pgsql/data/pg_hba.conf
nu, a to je ono. Když cesta k příkazu není v PATH, tak ho nejde volat bez absolutní cesty, a nebo bez přidání daného adresáře do PATH, a pak v závislosti na typu linkování dynamických knihoven LD_LIBRARY_PATH a spol.

Takže se koukni na ten příkaz scl enable a máš to.

Re:Instalace nejnovější PostgreSQL do CentOS 7
« Odpověď #8 kdy: 09. 02. 2019, 14:50:20 »
Ahá, já odesílal jen scl enable rh-postgresql95 bash, ale on je to zároveň i prostředek pro práci s databází např: scl enable rh-postgresql95 "pg_dumpall > db.out", kdy se pomocí toho dá s databází kompletně pracovat, vytvářet tabulky, správa uživatelů a dat, a všechno.

Takže ten uživatel postgres není až tak potřeba, ale kdybych chtěl zálohovací skript volat např uživatelem postgre, musel by odeslat následující (myšleno příkazy z fotografie v příloze) příkazy jako root nebo by je možná stačilo v tom volaném zálohovacím skriptu přidat do záhlaví sh/bash scriptu.

Moc si mi pomohl děkuji ti, snažil jsem se několik hodin přijít na to proč mi to nejde a tys mi to dokázal v pár zprávách skvěle vysvětlit. Děkuji ti dobrý muži.

Jose D

  • *****
  • 889
    • Zobrazit profil
Re:Instalace nejnovější PostgreSQL do CentOS 7
« Odpověď #9 kdy: 09. 02. 2019, 16:07:03 »
on je to zároveň i prostředek pro práci s databází např: scl enable rh-postgresql95 "pg_dumpall > db.out",

nó, prostředek.. Celý je to o tom, že bash musí vědět kde hledat příkaz co zadáváš. No a on se kouká do adresářů co jsou v proměnný $PATH. Takže v tomhle konkrétním případě jo, abys mohl pracovat s postgres příkazy, musíš shellu nějak říct kde to hledat. No a to dělá třeba ten scl enable.

zkus si zavolat příkaz
Kód: [Vybrat]
env jen tak, a pak ještě jednou po tomhle:
Kód: [Vybrat]
scl enable rh-postgresql95 bash - V PATH toho po enable tý kolekce bude víc - zejména cesty typu /blabla/rh-postgresql95/blabla.

Re:Instalace nejnovější PostgreSQL do CentOS 7
« Odpověď #10 kdy: 09. 02. 2019, 22:56:15 »
Cesty jsem přidal, ale stejně to nefunguje. Nicméně, mám pocit, že problém je stejně někde jinde.

Chápu ho tak, že se při instalaci vytvoří defaultní postgresql uživatel pomocí kterého lze databázi ovládat, jelikož se mu v rámci instalace přiřadí nějaká "role" a můj problém celou dobu spočívá spíše v tom, že potřebuji toho uživatele co má tu roli:

Správná situace:
Kód: [Vybrat]
[root@postgre ~]# sudo -i -u postgres
-bash-4.2$ psql
psql (9.2.24, server 9.5.14)
WARNING: psql version 9.2, server version 9.5.
         Some psql features might not work.
Type "help" for help.

postgres=#
postgres=# \conninfo
You are connected to database "postgres" as user "postgres" via socket in "/var/run/postgresql" at port "5432".
postgres=# \q
-bash-4.2$ env | grep PATH
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin
-bash-4.2$

Moje špatná situace:
Kód: [Vybrat]
[root@postgresc2 ~]# sudo -i -u postgres
-bash-4.2$ psql
-bash: psql: command not found
-bash-4.2$ env | grep PATH
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin
-bash-4.2$



Návod při běžné instalaci bez použití SC:
Kód: [Vybrat]
Using PostgreSQL Roles and Databases

By default, Postgres uses a concept called "roles" to aid in authentication and authorization. These are, in some ways, similar to regular Unix-style accounts, but Postgres does not distinguish between users and groups and instead prefers the more flexible term "role".

Upon installation Postgres is set up to use "ident" authentication, meaning that it associates Postgres roles with a matching Unix/Linux system account. If a Postgres role exists, it can be signed in by logging into the associated Linux system account.

The installation procedure created a user account called postgres that is associated with the default Postgres role. In order to use Postgres, we'll need to log into that account. You can do that by typing:

    sudo -i -u postgres

You will be asked for your normal user password and then will be given a shell prompt for the postgres user.

You can get a Postgres prompt immediately by typing:

    psql

You will be auto-logged in and will be able to interact with the database management system right away.

However, we're going to explain a little bit about how to use other roles and databases so that you have some flexibility as to which user and database you wish to work with.

Exit out of the PostgreSQL prompt by typing:

    \q

You should now be back in the postgres user command prompt.

moje nastavení, které se vždy po odpojení od uživatele resetuje na defaultní(PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin
):
Kód: [Vybrat]
[root@postgresc2 ~]# env | grep PATH
MANPATH=/opt/rh/rh-postgresql95/root/usr/share/man:
LIBRARY_PATH=/opt/rh/rh-postgresql95/root/usr/lib64
LD_LIBRARY_PATH=/opt/rh/rh-postgresql95/root/usr/lib64
CPATH=/opt/rh/rh-postgresql95/root/usr/include
PATH=/opt/rh/rh-postgresql95/root/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
PKG_CONFIG_PATH=/opt/rh/rh-postgresql95/root/usr/lib64/pkgconfig
[root@postgresc2 ~]# sudo -i -u postgres
-bash-4.2$ export PATH=/opt/rh/postgresql95/root/usr/bin${PATH:+:${PATH}}
-bash-4.2$ export LIBRARY_PATH=/opt/rh/postgresql95/root/usr/lib64${LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
-bash-4.2$ export LD_LIBRARY_PATH=/opt/rh/postgresql95/root/usr/lib64${LD_LIBRARY-PATH:+:${LD_LIBRARY_PATH}}
-bash-4.2$ export MANPATH=/opt/rh/postgresql95/root/usr/share/man:${MANPATH}
-bash-4.2$ env | grep PATH
MANPATH=/opt/rh/postgresql95/root/usr/share/man:
LIBRARY_PATH=/opt/rh/postgresql95/root/usr/lib64
LD_LIBRARY_PATH=/opt/rh/postgresql95/root/usr/lib64PATH:+:
PATH=/opt/rh/postgresql95/root/usr/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin
-bash-4.2$ export LD_LIBRARY_PATH=/opt/rh/postgresql95/root/usr/lib64
-bash-4.2$ env | grep PATH
MANPATH=/opt/rh/postgresql95/root/usr/share/man:
LIBRARY_PATH=/opt/rh/postgresql95/root/usr/lib64
LD_LIBRARY_PATH=/opt/rh/postgresql95/root/usr/lib64
PATH=/opt/rh/postgresql95/root/usr/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin
-bash-4.2$ psql
-bash: psql: command not found
-bash-4.2$

Re:Instalace nejnovější PostgreSQL do CentOS 7
« Odpověď #11 kdy: 11. 02. 2019, 09:56:21 »
Chtel bych jen upozornit, ze 9.5 neni nejnovejsi dostupna verze pro RH, ale je to 11.

Jose D

  • *****
  • 889
    • Zobrazit profil
Re:Instalace nejnovější PostgreSQL do CentOS 7
« Odpověď #12 kdy: 11. 02. 2019, 13:55:09 »
Cesty jsem přidal, ale stejně to nefunguje.

ty si je musíš přidat do shellu toho usera, pod kterým chceš používat danou collection.
Je to popsaný v tom článku od RH co jsem referoval výše.

-bash-4.2$ export PATH=/opt/rh/postgresql95/root/usr/bin${PATH:+:${PATH}}

proč tam dáváš to ${PATH:+:${PATH}} ?

když chceš něco přidat do path, tak se to dělá takhle:

export PATH=/cesta/kamkoliv:${PATH}

PS: Ty screenshoty jsou jen ztráta času. Jestli máš výstup konzole, postuj to sem jako text do tagu "code".
« Poslední změna: 11. 02. 2019, 13:59:28 od Jose D »

Re:Instalace nejnovější PostgreSQL do CentOS 7
« Odpověď #13 kdy: 12. 02. 2019, 17:01:06 »
Mastím sem na forum napsat, že už sem přišel na to v čem je problém, že ten scl enable rh-postgresql95 bash nestačí zapnout globálně, ale je nutné ho zapínat po každém přihlášení, aby se to přepnulo na správné prostředí a server tak věděl k jaké verzi postgre chci posílat další příkazy. :-)

Každopádně ti moc děkuji za rady a hlavně za tvůj čas. Jistě to bylo náročné, bývám dost natvrdlý. Měj se hezky.