Podłączanie hurtowni Postgres
Ten przewodnik prowadzi Cię przez podłączanie bazy PostgreSQL do Saiku Cloud, end-to-end. Pięć minut, jeśli Twoja hurtownia jest już publiczna; dziesięć, jeśli musisz skonfigurować rolę tylko do odczytu.
Wpływ na poziom: każdy poziom Saiku Cloud (Starter, Team, Business) obsługuje Postgres BYOC.
Czego będziesz potrzebować
- Instancji PostgreSQL 12+ osiągalnej z publicznego adresu IPv4. Klienci hostowanego Saiku Cloud na Starter/Team/Business tego potrzebują — klienci Enterprise z prywatnym ustawieniem VPC peering (zobacz PrivateLink do Postgresa klienta) dostają osiągalność prywatną zamiast.
- Dostępu admina do hurtowni, byś mógł utworzyć rolę tylko do odczytu (lub poświadczeń istniejącej).
- Pięciu minut.
Krok 1 — Wpisz nasze egress IP do allowlisty
Zapytania Saiku Cloud do Twojej hurtowni wszystkie pochodzą z jednego statycznego IP:
87.99.153.244Dodaj to do allowlisty firewalla / security group / sieci Twojej hurtowni przed testem połączenia. Kreator połączeń wyświetli to samo IP w momencie testu, więc możesz je skopiować jeszcze raz stamtąd — ale zrobienie tego z wyprzedzeniem unika błędu HOST_UNREACHABLE, który zobaczyłbyś inaczej w pierwszym teście.
Typowe miejsca allowlisty:
- AWS RDS: Reguła ruchu wejściowego VPC security group → port 5432 → źródło
87.99.153.244/32. - Google Cloud SQL: Connectivity → Authorized networks → dodaj
87.99.153.244/32. - Azure Postgres: Networking → Firewall rules → dodaj regułę pozwalającą
87.99.153.244do87.99.153.244. - Self-hosted: wpis host w
pg_hba.conf, plus jakikolwiek firewall przed (UFW, iptables, krawędź dostawcy chmury).
IP jest stabilne — przeżywa rebooty i przebudowy obrazów. Zobowiązujemy się do minimum 30 dni uprzedzenia przed jakąkolwiek rotacją. Pełna polityka: zobacz nasze zobowiązanie do stabilności egress IP.
Krok 2 — Utwórz rolę tylko do odczytu w Postgresie
Saiku Cloud tylko czyta z Twojej hurtowni — nigdy nie pisze, nigdy nie zmienia schem, nigdy nie tworzy obiektów. Kształt najmniejszych uprawnień to dedykowana rola tylko do odczytu:
-- Jako superuser Postgres (lub ktoś z CREATEROLE):CREATE ROLE saiku_read LOGIN PASSWORD 'pick-something-strong-here';
-- Nadaj dostęp do schem + tabel, które chcesz, by Saiku widziało.-- Dostosuj 'public' do schem, w których żyją Twoje dane.GRANT USAGE ON SCHEMA public TO saiku_read;GRANT SELECT ON ALL TABLES IN SCHEMA public TO saiku_read;GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO saiku_read;
-- Przyszłe tabele tworzone w tej schemie też powinny być czytelne.ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO saiku_read;Jeśli Twoje dane są rozsiane po wielu schemach, powtórz bloki GRANT USAGE + GRANT SELECT dla każdej.
Krok 3 — Zbuduj JDBC URL
Kształt:
jdbc:postgresql://<host>:<port>/<database>?sslmode=requireKonkretne przykłady:
- AWS RDS:
jdbc:postgresql://mydb.abc123.us-east-1.rds.amazonaws.com:5432/sales?sslmode=require - Google Cloud SQL:
jdbc:postgresql://1.2.3.4:5432/sales?sslmode=require(użyj publicznego IP z konsoli Cloud SQL) - Azure Postgres:
jdbc:postgresql://mydb.postgres.database.azure.com:5432/sales?sslmode=require - Self-hosted:
jdbc:postgresql://db.yourcompany.com:5432/sales?sslmode=require
Kluczowe parametry:
sslmode=requirejest gorąco zalecane dla każdej hurtowni osiągalnej przez publiczny internet. Większość zarządzanych usług Postgres i tak wymusza SSL;requiresprawia, że klient odrzuca fallback plaintext.sslmode=verify-fulljest ściślejszy — weryfikuje też, że hostname certyfikatu serwera pasuje. Użyj, jeśli root CA Twojej hurtowni jest w naszym trust store (większość zarządzanych usług używa Let’s Encrypt lub znanej CA, więc to działa od ręki).- Pomiń
?currentSchema=fooi podobne podkręcenia sterownika, chyba że masz konkretny powód; Saiku odpytuje z w pełni kwalifikowanymi odwołaniamischema.tablew całości.
Krok 4 — Podłącz przez kreator Saiku Cloud
-
Zaloguj się na
https://cloud.saiku.bi/. -
Idź do Połączenia na lewym pasku bocznym.
-
Pod 1. Wybierz typ hurtowni kliknij kafelek Postgres.
-
Uzupełnij:
- JDBC URL — URL z Kroku 3.
- Username —
saiku_read(lub jakkolwiek nazwałeś rolę w Kroku 2). - Password — hasło z Kroku 2.
-
Kliknij Testuj połączenie.
Jeśli wszystko jest podłączone poprawnie, zobaczysz zielony banner wyniku: ✓ Connection successful plus wykrytą wersję Postgresa. Przejdź do Kroku 5.
Jeśli widzisz czerwony banner wyniku, zobacz Rozwiązywanie problemów poniżej dla macierzy triażu trybów awarii.
Krok 5 — Zapisz połączenie
Po udanym teście kreator renderuje sekcję 3. Zapisz połączenie. Uzupełnij:
- Password (wpisz ponownie do zapisu) — to samo hasło, którym testowałeś. Nie przechowujemy hasła z formularza testu, by nie krążyć poświadczeniem przez stan strony.
- Label — czytelna nazwa typu
Production warehouselubMarketing analytics. Pokazywana na liście połączeń + w designerze kostek.
Kliknij Zapisz połączenie. Przekierujemy Cię do schema designera, gdzie możesz albo zaproponować kostkę przez przepływ inferencji AI, albo wgrać XML schemy Mondrian.
Rozwiązywanie problemów
✗ Connection failed (HOST_UNREACHABLE) lub (TIMEOUT)
Nie mogliśmy sięgnąć hosta na porcie, który podałeś. Najczęstsze przyczyny:
- Firewall / allowlist — Krok 1 nie był zrobiony lub nie był zrobiony dla właściwego IP. Potwierdź, że
87.99.153.244/32jest w allowliście Twojej hurtowni + zastosowane (niektóre firewalle wymagają restartu / ponownego zastosowania). - DNS — hostname w JDBC URL nie rozwiązuje się lub rozwiązuje się na prywatne IP. Zweryfikuj z laptopa:
nslookup <host>. Odmawiamy łączenia z adresami RFC1918 / loopback / link-local ze względów ochrony przed SSRF —HOST_DENIED(nieHOST_UNREACHABLE) to powierzchnia w tym przypadku. - Zły port — Postgres domyślnie 5432, ale zarządzane usługi czasem używają niestandardowego portu (Heroku Postgres używa 5432, ale wewnątrz tunelu; niektóre wdrożenia on-prem używają 5433+).
✗ Connection failed (AUTH_FAILED)
Nazwa użytkownika lub hasło jest złe. Kreator celowo nie rozróżnia „zły użytkownik” od „złe hasło” — to obrona przed atakami credential-stuffing.
- Sprawdź dwukrotnie nazwę użytkownika — nazwy ról Postgres są case-sensitive (
saiku_read≠Saiku_Read). - Spróbuj połączyć się z laptopa przez
psql "<JDBC URL minus prefiks jdbc:>", by potwierdzić, że poświadczenia działają poza Saiku. - Jeśli niedawno resetowałeś hasło, upewnij się, że zatwierdziłeś zmianę w Postgresie (
ALTER ROLE saiku_read PASSWORD '...';) i ponownie połączyłeś każdy pooler, który mógłby buforować stary hash.
✗ Connection failed (DATABASE_NOT_FOUND)
Host akceptuje Twoje poświadczenia, ale nazwa bazy w JDBC URL nie istnieje. Zweryfikuj nazwę bazy — Postgres zwykle ma zarówno postgres, jak i Twoją bazę aplikacyjną; chcesz tej drugiej.
-- Z psql, jako dowolny użytkownik z loginem:\l -- lista baz danych✗ Connection failed (DIALECT_UNSUPPORTED)
URL nie zaczyna się od jdbc:postgresql:. Jeśli wkleiłeś URL jdbc:postgres: (bez -ql), resolver dialektu nie pasuje — sterownik JDBC Postgres wymaga tokenu postgresql. Używaj kształtów URL z Kroku 3 dosłownie.
Cokolwiek innego
Zrób zrzut ekranu kreatora z widocznym czerwonym bannerem wyniku (linia Kind: ... w szczególności) i wyślij na support@saiku.bi. Pole Kind mówi nam, w jakiej klasie awarii jesteśmy; podpowiedź Try this pod spodem daje nasze najlepsze przypuszczenie poprawki.
Enterprise: sieć prywatna {#enterprise-private-network}
Dla klientów Enterprise z ustawieniem sieci prywatnej powyższa reguła egress IP jest zastępowana peeringiem VPC lub PrivateLink do Twojej instancji Postgres. Reszta przepływu kreatora połączeń jest identyczna — wklej prywatny JDBC URL, przetestuj, zapisz. Skontaktuj się z zespołem konta, by zaprowidować peering.
Spróbuj z FoodMart
Chcesz przetestować Saiku Cloud z tym dialektem przed podłączeniem własnych danych? Pobierz przykładowy zbiór FoodMart spakowany dla Postgres: