PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Używanie .pgpass z Apache libphp5.so

Mimo że php ma PGPASSFILE w środowisku dziedziczy z Apache, co udowodnił getenv("PGPASSFILE") , wygląda na to, że to środowisko nie jest tym, które jest dostępne dla współdzielonej libpq biblioteka, która ostatecznie obsługuje .pgpass . Dlatego to ustawienie jest ignorowane.

Rozwiązaniem jest ponowne wprowadzenie do środowiska zmiennej, która już tam jest, w php przed połączeniem z bazą danych:

if (getenv("PGPASSFILE")!="")
  putenv("PGPASSFILE=".getenv("PGPASSFILE"));

Wyraźne putenv wypchnie zmienną w taki sposób, aby była dostępna dla libpq wywołania funkcji getenv() . To dziwne, ponieważ zwykle proces ma tylko jedno środowisko, ale wydaje się, że działa.

Zapytałem o problem niezgodności środowiska między rozszerzeniami a rdzeniem php w osobnym pytaniu:Dlaczego potrzebne jest putenv() na już zdefiniowanej zmiennej środowiskowej?




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sqlalchemy powielił klauzulę WHERE do FROM

  2. Funkcje agregujące na tablicach

  3. Spring JPA + dynamicznie przełączaj źródło danych między schematami w postgresql

  4. Odpowiednik funkcji FOUND_ROWS() w Postgresql

  5. Więcej SQL, mniej kodu, z PostgreSQL