Przejdź do głównej zawartości

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.244

Dodaj 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.244 do 87.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=require

Konkretne 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=require jest gorąco zalecane dla każdej hurtowni osiągalnej przez publiczny internet. Większość zarządzanych usług Postgres i tak wymusza SSL; require sprawia, że klient odrzuca fallback plaintext.
  • sslmode=verify-full jest ś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=foo i podobne podkręcenia sterownika, chyba że masz konkretny powód; Saiku odpytuje z w pełni kwalifikowanymi odwołaniami schema.table w całości.

Krok 4 — Podłącz przez kreator Saiku Cloud

  1. Zaloguj się na https://cloud.saiku.bi/.

  2. Idź do Połączenia na lewym pasku bocznym.

  3. Pod 1. Wybierz typ hurtowni kliknij kafelek Postgres.

  4. Uzupełnij:

    • JDBC URL — URL z Kroku 3.
    • Usernamesaiku_read (lub jakkolwiek nazwałeś rolę w Kroku 2).
    • Password — hasło z Kroku 2.
  5. 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 warehouse lub Marketing 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:

  1. Firewall / allowlist — Krok 1 nie był zrobiony lub nie był zrobiony dla właściwego IP. Potwierdź, że 87.99.153.244/32 jest w allowliście Twojej hurtowni + zastosowane (niektóre firewalle wymagają restartu / ponownego zastosowania).
  2. 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 (nie HOST_UNREACHABLE) to powierzchnia w tym przypadku.
  3. 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_readSaiku_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:

Przykładowy zbiór FoodMart dla Postgres