|
Some checks are pending
NordaBiz Tests / Unit & Integration Tests (push) Waiting to run
NordaBiz Tests / E2E Tests (Playwright) (push) Blocked by required conditions
NordaBiz Tests / Smoke Tests (Production) (push) Blocked by required conditions
NordaBiz Tests / Send Failure Notification (push) Blocked by required conditions
Brave Search matched unrelated companies by name token (e.g. VINDOR matched vindorclothing, vindormusic, beautybyneyador). Social media profiles are now sourced only from website scraping and manual admin entry. - Disabled BraveSearcher initialization and call in audit_company() - Removed Brave Search step from audit progress animation - Updated missing profile message with explanation and link to profile editor - Added migration 071 to clean up existing brave_search entries Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| migrations | ||
| add-users-and-chat.sql | ||
| fix-search-trigger.sql | ||
| forum_categories_attachments.sql | ||
| improve-search-schema.sql | ||
| migrate_news_tables.sql | ||
| migrate-json-to-pg.js | ||
| README.md | ||
| schema.sql | ||
Norda Biznes - Database Setup
📦 Struktura
database/
├── schema.sql # Pełny schemat bazy danych PostgreSQL
├── migrate-json-to-pg.js # Skrypt migracji z JSON do PostgreSQL
├── README.md # Ten plik
└── .env.example # Przykładowa konfiguracja połączenia
🚀 Instalacja na NORDABIZ-01
Krok 1: Instalacja PostgreSQL
# SSH do serwera
ssh root@10.22.68.249
# Aktualizacja pakietów
apt update
# Instalacja PostgreSQL 15
apt install -y postgresql-15 postgresql-contrib-15
# Sprawdzenie statusu
systemctl status postgresql
# Włączenie autostartu
systemctl enable postgresql
Krok 2: Konfiguracja PostgreSQL
# Przełącz się na użytkownika postgres
sudo -u postgres psql
# W psql:
CREATE DATABASE nordabiz;
CREATE USER nordabiz_app WITH PASSWORD 'your_secure_password_here';
GRANT ALL PRIVILEGES ON DATABASE nordabiz TO nordabiz_app;
# Wyjdź z psql
\q
Krok 3: Utworzenie schematu
# Jako użytkownik postgres
sudo -u postgres psql -d nordabiz -f /var/www/nordabiznes/database/schema.sql
Krok 4: Weryfikacja
# Połącz się jako nordabiz_app
psql -U nordabiz_app -d nordabiz -h localhost
# W psql sprawdź tabele:
\dt
# Powinno pokazać wszystkie tabele:
# companies, categories, services, competencies, etc.
# Sprawdź dane referencyjne:
SELECT * FROM categories;
SELECT * FROM data_sources;
\q
📊 Schemat Bazy Danych
Główne tabele:
companies
Podstawowe dane firm (NIP, REGON, KRS, adres, kontakt)
categories
Kategorie branżowe (IT, Produkcja, Handel, etc.)
services
Usługi oferowane przez firmy (Many-to-Many przez company_services)
competencies
Kompetencje i technologie (Many-to-Many przez company_competencies)
certifications
Certyfikaty i uprawnienia firm
awards
Nagrody i wyróżnienia (Gazele Biznesu, Diamenty Forbesa, etc.)
financial_data
Historyczne dane finansowe (przychody, zyski, aktywa)
social_media
Profile społecznościowe (Facebook, LinkedIn, Instagram)
data_sources
Źródła danych (ALEO.com, strony WWW, etc.)
collection_log
Log aktywności agenta zbierającego dane
Widoki:
- v_companies_full - kompletny widok firm ze wszystkimi relacjami
- v_data_quality_stats - statystyki jakości danych
- v_companies_incomplete - firmy z brakującymi danymi
Funkcje:
- calculate_data_quality(company_id) - oblicza poziom jakości danych
- update_all_data_quality() - aktualizuje jakość dla wszystkich firm
🔄 Migracja Danych z JSON
Wymagania:
# W katalogu projektu
npm install pg
Konfiguracja połączenia:
Utwórz plik .env w katalogu głównym projektu:
DB_HOST=localhost
DB_PORT=5432
DB_NAME=nordabiz
DB_USER=nordabiz_app
DB_PASSWORD=your_secure_password_here
Lub eksportuj zmienne środowiskowe:
export DB_HOST=localhost
export DB_PORT=5432
export DB_NAME=nordabiz
export DB_USER=nordabiz_app
export DB_PASSWORD=your_secure_password_here
Uruchomienie migracji:
# Dry run - sprawdzenie bez zmian
node database/migrate-json-to-pg.js --dry-run
# Migracja z verbose output
node database/migrate-json-to-pg.js --verbose
# Standardowa migracja
node database/migrate-json-to-pg.js
Przykładowy output:
🤖 Norda Biznes - JSON → PostgreSQL Migration
============================================================
📂 Wczytywanie danych JSON...
✅ Załadowano 10 firm z companies-full.json
🔌 Łączenie z bazą danych...
Host: localhost:5432
Database: nordabiz
✅ Połączono: 2025-11-23 19:00:00
📦 Migracja 10 firm...
[1] PIXLAB
✅ Dodano: PIXLAB (ID: 1)
🔗 Usługi: 4
🔗 Kompetencje: 3
[2] KORNIX
✅ Dodano: KORNIX (ID: 2)
🔗 Usługi: 4
🔗 Kompetencje: 3
💰 Dane finansowe: 1
...
============================================================
📊 RAPORT MIGRACJI
============================================================
📋 Firmy:
✅ Dodane: 10
🔄 Zaktualizowane: 0
❌ Błędy: 0
🔧 Usługi:
🔗 Połączone: 40
💡 Kompetencje:
🔗 Połączone: 30
🏆 Certyfikaty: 5
🥇 Nagrody: 15
💰 Dane finansowe: 10
📱 Social media: 8
============================================================
✅ Migracja zakończona pomyślnie!
🔍 Przydatne Zapytania SQL
Statystyki ogólne:
-- Liczba firm według kategorii
SELECT c.name as category, COUNT(*) as count
FROM companies co
JOIN categories c ON co.category_id = c.id
GROUP BY c.name
ORDER BY count DESC;
-- Jakość danych
SELECT * FROM v_data_quality_stats;
-- Firmy z brakującymi danymi
SELECT * FROM v_companies_incomplete
LIMIT 20;
Wyszukiwanie:
-- Pełnotekstowe wyszukiwanie
SELECT id, name, category_id, description_short
FROM companies
WHERE search_vector @@ plainto_tsquery('polish', 'oprogramowanie IT');
-- Firmy z konkretną usługą
SELECT co.name, s.name as service
FROM companies co
JOIN company_services cs ON co.id = cs.company_id
JOIN services s ON cs.service_id = s.id
WHERE s.slug = 'custom-software-development';
-- Firmy z konkretną kompetencją
SELECT co.name, c.name as competency
FROM companies co
JOIN company_competencies cc ON co.id = cc.company_id
JOIN competencies c ON cc.competency_id = c.id
WHERE c.slug = 'php';
Raporty:
-- Top 10 firm po przychodach
SELECT co.name, fd.revenue, fd.year
FROM companies co
JOIN financial_data fd ON co.id = fd.company_id
ORDER BY fd.revenue DESC
LIMIT 10;
-- Firmy z najwi ększą liczbą certyfikatów
SELECT co.name, COUNT(ce.id) as cert_count
FROM companies co
LEFT JOIN certifications ce ON co.id = ce.company_id
GROUP BY co.name
ORDER BY cert_count DESC;
-- Pokrycie źródeł danych
SELECT ds.name, COUNT(cds.company_id) as companies_count
FROM data_sources ds
LEFT JOIN company_data_sources cds ON ds.id = cds.source_id
GROUP BY ds.name
ORDER BY companies_count DESC;
🔐 Backup i Restore
Backup:
# Pełny backup bazy
pg_dump -U nordabiz_app -d nordabiz -F c -f nordabiz_backup_$(date +%Y%m%d).dump
# Tylko dane (bez schematu)
pg_dump -U nordabiz_app -d nordabiz --data-only -F c -f nordabiz_data_$(date +%Y%m%d).dump
# Tylko schemat (bez danych)
pg_dump -U nordabiz_app -d nordabiz --schema-only -f nordabiz_schema.sql
Restore:
# Restore z dump
pg_restore -U nordabiz_app -d nordabiz_new nordabiz_backup_20251123.dump
# Restore z SQL
psql -U nordabiz_app -d nordabiz < nordabiz_schema.sql
Automatyczny backup (cron):
# Dodaj do crontab:
crontab -e
# Backup codziennie o 3:00
0 3 * * * pg_dump -U nordabiz_app -d nordabiz -F c -f /backup/nordabiz_$(date +\%Y\%m\%d).dump
# Czyszczenie starych backupów (starsze niż 30 dni)
0 4 * * * find /backup -name "nordabiz_*.dump" -mtime +30 -delete
📈 Monitoring
Rozmiar bazy:
SELECT
pg_size_pretty(pg_database_size('nordabiz')) as database_size;
SELECT
schemaname,
tablename,
pg_size_pretty(pg_total_relation_size(schemaname||'.'||tablename)) as size
FROM pg_tables
WHERE schemaname = 'public'
ORDER BY pg_total_relation_size(schemaname||'.'||tablename) DESC;
Aktywne połączenia:
SELECT
datname,
usename,
application_name,
client_addr,
state,
query
FROM pg_stat_activity
WHERE datname = 'nordabiz';
Performance:
-- Najczęściej używane tabele
SELECT
schemaname,
tablename,
seq_scan,
idx_scan
FROM pg_stat_user_tables
ORDER BY seq_scan + idx_scan DESC;
-- Wolne zapytania (jeśli włączone logowanie)
SELECT
query,
mean_exec_time,
calls
FROM pg_stat_statements
ORDER BY mean_exec_time DESC
LIMIT 10;
🛠️ Maintenance
Vacuum:
-- Pełny vacuum analyze
VACUUM ANALYZE;
-- Dla konkretnej tabeli
VACUUM ANALYZE companies;
Reindex:
-- Reindeksowanie bazy
REINDEX DATABASE nordabiz;
-- Dla konkretnej tabeli
REINDEX TABLE companies;
🐛 Troubleshooting
Połączenie odmówione:
# Sprawdź czy PostgreSQL działa
systemctl status postgresql
# Sprawdź port
sudo netstat -plnt | grep 5432
# Sprawdź logi
sudo tail -f /var/log/postgresql/postgresql-15-main.log
Uprawnienia:
-- Nadaj wszystkie uprawnienia
GRANT ALL PRIVILEGES ON DATABASE nordabiz TO nordabiz_app;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO nordabiz_app;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO nordabiz_app;
Reset hasła:
-- Jako postgres
ALTER USER nordabiz_app WITH PASSWORD 'new_secure_password';
📚 Dokumentacja
- PostgreSQL: https://www.postgresql.org/docs/
- Node.js pg: https://node-postgres.com/
- Full-text search: https://www.postgresql.org/docs/current/textsearch.html
Wersja: 1.0 Ostatnia aktualizacja: 2025-11-23 Autor: Norda Biznes Partner Development Team