PostgreSQL Table ‚xxxi‘ does not exist

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
dj.kure
Člen | 70
+
0
-

Ahoj,

trošku se tu mořím s projektem u kterého jsem byl donucen využít namísto MySQL databázi PgSQL.
Příklad modelu pro výpis zákazníků:

	public function __construct(Nette\Database\Context $database)
{
    $this->database = $database;
}

public function vypisZakazniku()
{
    //$seznam = $this->database->query("SELECT * FROM admina.default.zakaznici ORDER BY id")->fetchAll();
    $seznam = $this->database->table('zakaznici')->fetchAll();
    return $seznam;
}

Když se podíváte na zakomentovaný řádek s „query“, tak ten funguje, správně vrátí obsah databáze, ale případ s využitím „table(‚zakaznici‘)“ nikoliv. Proč? Samozřejmě jsem zkoušel všechny možné kombinace názvů tabulky, jako „admina.default.zakaznici, default.zakaznici, …“.

Jen doplním, že „admina“ je databáze, „default“ je schéma a „zakaznici“ je tabulka.

Netušíte, co dělám špatně? :-( S MySQL jsem nikdy problém neměl.

Děkuji za rady.

iguana007
Člen | 970
+
0
-

Já bych po připojení do DB zavolal:

SET search_path TO default

příp. to v DB nastavit přímo uživateli:

ALTER USER user SET search_path TO default

Editoval iguana007 (1. 2. 2016 10:31)

dj.kure
Člen | 70
+
0
-

Děkuji za nakopnutí, nakonec jsem to vyřeši úpravou konfigurace, přímo v Postgresu, doplnil jsem toto:

search_path = '"$user",public,default'

a zrestartoval DB. Od té doby to dělá přesně to, co chci :-)

zdick
Člen | 4
+
0
-

Přidávám rozšíření problému – Table 'xxxi' does not exist nastává pokud je tabulka se stejným názvem ve dvou schématech, která mám zařazená do search_path.
Tozn. tabulka xxxi existuje ve schématu schema1 a schema2. Dotaz $db->table('schema1.xxxi')->get($id); pak skončí chybou, místo aby se načetla data tabulky ze zadaného schématu. Pokud mám v search_path jenom schema1 nebo schema2, pak vše funguje bez problému.

CZechBoY
Člen | 3608
+
0
-

@zdick Takže pracuješ s 2 databázema v jednom spojení? Nešlo by používat 2 instance?