Adatbázis: SQL, XML DB

pgAdmin III alternatíva (jobb nincs, de javítgatják)

Sziasztok.

Egy project-ben elkövettem azt a hibát, hogy postgresql választottam adatbázis kezelőnek. (Megtetézve azzal, hogy kihasználom az enyhén szólva is átgondolatlan/kidolgozatlan fícsöreit is. Valószínűleg ez az igazi hiba, nem maga a postgresql.)
Ebbe a csőbe már bementem, nem igazán tudok rajta változtatni.
Amíg nincsenek készen az adatmanipuláló GUI-k, addig elég sokat kell matatni az adatbázist, jobb híján a pgAdmin III-mal.
Régóta keresek valamilyen alternatívát a pgAdmin III-ra, linux alá, de nem igazán találok. Nehezen tudom elhinni, hogy semmilyen más GUI nincs Linux alá, csak ez a hihetetlenül kényelmetlen bug halmaz.
(Mondjuk simán megkaphatná az ISO minősítést, mert ha kiakad valamitől, azt következetesen teszi, ha véletlenül van frissítés, utána is.)

Hierarchikus adattárolás, egyetlen szülő lekérdezése

Üdv,

Előrebocsátom, hogy nem vagyok SQL-szakértő (sem).
A következőre futottam rá egy program írása során:

Van egy adatbázis tábla, mondjuk a következő mezőkkel:

index, value, option

Az index egy unique érték, a value egy integer, ami nem unique, az option pedig lehet 0 vagy 1.

A feladatom az volna, hogy minden olyan rekordhoz, amelynek az option értéke 0 találjam meg azt a rekordot, aminek a value értéke megegyezik a saját value-éval (tehát itt történik egy self join) és az option értéke 1, az indexe pedig kisebb a sajét indexnél. Eddig még rendben is volna, self-joinnal megkapom az összeset.

Viszont nekem csak egy darab kéne, mégpedig a legnagyobb ilyen indexű.

A legelső, legnaivabb megoldásnak az tűnik, hogy lekérdezem az összes ilyet, utána egy sort segítségével megkeresem a legnagyobbat. És ezt egyesével elvégzem minden olyan rekordra, amelynek 0 az option mezője. Nyilván lassú.

Hogyan lehetne ezt kulturáltan megcsinálni? Alapvetően körülbelül 500000 rekordhoz kéne megcsinálni ezt a párosítást.
Egy SQLite adatbázisról van szó.

MYSQL ORDER BY

Sziasztok!

Segítséget kérek!
Van egy lekérdezésem:

SELECT o.id, o.username, o.name, o.avatar_url
FROM felhasznalok AS o
WHERE profile_statusz LIKE '%0%'
AND block='0'
AND o.group_id='2'
ORDER BY o.avatar_url LIMIT 0, 3600

Azt szeretném, hogy o.name szerint rendezze az eredményt, de vegye előre azokat akiknek az o.avatar_url mezőjében van valami. Ezen belül is o.name alapján rendezzen. GROUP BY nem jó, mert akinek üres az avatar mezője azokat összevonja.

SQL export

Sziasztok!

Van-e olyan SQL utasítás, amellyel adatokat lehet exportálni (fájlba írni)?
Mivel csak ugatom az SQL-t, fogalmam sincs hogyan csináljam.

LIKE BINARY kérdés

Sziasztok, hátha valaki tudja csípőből.
Lassan az örületbe kerget a MySQL, és bizonyára én vagyok süsü, de nem jövök rá a nyitjára.
A feladat az lenne, hogy szövegegyezést kell keresni egy tábla adott oszlopán, úgy hogy az ékezetes betűket különböztesse meg, és működik is a LIKE BINARY-val:
SELECT 'Ski amadé' LIKE BINARY '%amadé%'

1-et ad vissza.

Míg a

SELECT 'Ski amadé' LIKE BINARY '%amade%'

0-át, ez rendben is van.

Ha ugyanezt egy táblán futtatom le:

SELECT filename FROM fileok WHERE filename LIKE BINARY '%amadé%'

akkor üres lesz az eredményhalmaz.

Míg ha lefuttatom a

SELECT filename FROM fileok WHERE filename LIKE BINARY '%amade%'

akkor az eredményben megkapom:
Ski amadé

Pont fordítva szeretném. A tábla és az oszlopok is utf8_general_ci illesztésre vannak rakva, a filename oszlop VARCHAR(255) tipusú. Mit rontok el?

MYSQL date_format ??!![MEGOLDVA]

Sziasztok ,

egy adatsort dolgoztam fel , aminek közel 5 millió rekordja van , ezeket szépen beleraktam egy mysql adattáblába .a hiba csak ott van , hogy mivel nem konvencionális az egyes sorokban található dátum ,és az általam ismert beépített phps függvények csődöt mondtak a feldolgozás során , gyors megoldásként text mezőben tároltam (ne kövezzetek meg érte :)). Ezt szeretném átforgatni datetime típusra, csak nem igazán akar összejönni . A dátum formátum (00:30 14/06/00 ). amikkel próbálkoztam :
- UPDATE `nyersadat` SET datum2= STR_TO_DATE(datum, '%H:%I %M/%D/%Y');
-php : date_parse,DateTime::format

update során vannak eredményes sorok , azonban nem mind , lehet ,hogy whitespace miatt nem konvertálódik minden sor ? (most a kérdés közben jutott eszembe)

szval evvel kapcsolatban szeretném kérni a tanácsotokat s előre is köszi a segítséget.

MySQL: nagy adatbázis visszaállítása dump-ból

Sziasztok!

Lenne egy olyan problémám, hogy anno mysqldump-al kimentettem magamnak egy 2GB-os adatbázist (ebből 1 tábla kb 2 GB, a több pár MB helyet foglal).
Próbáltam mostanában visszaállítani, nem sok sikerrel, a következő hibát kaptam:

Error 2013: Lost connection to MySQL server during query

Rákerestem, sok helyen írták, hogy ilyen problémát tapasztaltak, de a megoldások közül egyik sem működött nekem.

Valakinek van esetleg ötlete, tapasztalata, hogyan tudnám visszaállítani az adatbázist?
Előre is köszönök minden segítséget!

--update--

Pár plusz infó:

my.conf:
port = 3306
socket = /tmp/mysql.sock
key_buffer = 256M
max_allowed_packet = 4096M
table_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M

SHOW GLOBAL VARIABLES LIKE '%timeout%':
connect_timeout
10
delayed_insert_timeout
300
innodb_lock_wait_timeout
50
innodb_rollback_on_timeout
OFF
interactive_timeout
28800
lock_wait_timeout
31536000
net_read_timeout
30
net_write_timeout
60
slave_net_timeout
3600
wait_timeout
28800

SELECT @ @max_allowed_packet:
@@max_allowed_packet
1073741824

egy auto_increment id-t tartalmazo, brutal nagy tabla tobb gepen futo mysql-en hogyan

Egy olyan problemara keresek megoldast, amikor egy sok millio rekordot tartalmazo (es igy akar potencilisan tobb TB meretu) tablat kell tobb gep kozott szetteriteni. Itt a hangsuly nem a sok million van (amit akar 1 sql szerver is elvisz), hanem a tobb gep kozott valo szetosztason.

A shard-olasra gondoltam eloszor, hogy pl. 10M rekord host1-en, a kovetkezo 10M rekord host2-n, stb. Termeszetesen mindegyik host-on ugyanaz az adatbazis, a tabla neve ill. szerkezete.

2 kerdesem van:

a) hogy lehet megoldani azt, hogy host1-en az auto_increment id sorszamozasa 1-tol induljon (OK, ez mar keszen van :-)), de host2-n ne 1-tol, hanem 10,000,001-tol?

b) hogy lehet azt megoldani, hogy ha van egy 3. gep, akkor onnan egyben lathassam az igy feldarabolt tablat, azaz ertelmes eredmenyt adjon vissza az a query ami azt a 200 rekordot keresi, aminek elso fele a host1-en levo 10M utolso 100 rekordja, mig a masodik fele a host2-n levo 10M elso 100 rekordja.

*az auto_increment feature-hoz nem ragaszkodom mindenaron.

Ha a problema megoldasa egyszerubb, ha maskent fogalmazzuk ujra, arra is nyitott vagyok.

DBDesigner 4 (MySQL)

Van-e tudomásotok arról, hogy klasszikus darabjegyzéket hogyan lehet tervezni a DBDesigner 4-gyel (ha lehet egyáltalán), kérdezném áldott, békés, boldog új esztendőt kívánva kérdezem.

Ami valahogy így nézne ki (MySQL):

CREATE TABLE `RESZEGYSEG` (
`ReszegysegID` bigint(8) unsigned NOT NULL AUTO_INCREMENT,
`Megnevezes` varchar(64) DEFAULT NULL,
PRIMARY KEY (`ReszegysegID`)
) ENGINE=InnoDB;

CREATE TABLE `DARABJEGYZEK` (
`TartalmazoID` bigint(8) unsigned NOT NULL,
`TartalmazottID` bigint(8) unsigned NOT NULL,
`Mennyi` int(11) DEFAULT NULL,
PRIMARY KEY (`TartalmazoID`,`TartalmazottID`),
KEY `DARABJEGYZEK_ibfk_2` (`TartalmazottID`),
CONSTRAINT `DARABJEGYZEK_ibfk_2` FOREIGN KEY (`TartalmazottID`)
REFERENCES `RESZEGYSEG` (`ReszegysegID`),
CONSTRAINT `DARABJEGYZEK_ibfk_1` FOREIGN KEY (`TartalmazoID`)
REFERENCES `RESZEGYSEG` (`ReszegysegID`)
) ENGINE=InnoDB;

Szemléletesen: két darab 1:N (opci) tyúkláb a két tábla között.

Apró kiegészítés: az Export SQL create script által létrehozott file egyetlen sorvége jelet tartalmaz, pedig van valami 22 tábla, kapcsolatokkal.

Köszönettel:
KEA.

MSSQL és PGSQL adatok szinkronban tartása

Sziasztok,

A következő szituáció megoldása lenne a feladatom, melyre igazi átfogó ötlet még nem született a fejemben. Remélem Ti tudtok segíteni.

Adott két szerver:
1) Win + MSSQL
2) Linux + PGSQL

Jelenleg az 1)-es szerver szolgálja ki a cég vállalatirányítási rendszerét, pontosabban az ahhoz szükséges adatbázist. Itt egy kb 2Gb-s adatbázisról beszélünk, melyben a kb 60 alkalmazott napi 8 órában folyamatosan dolgozik (számlázás, megrendelések kezelése stb.).
A cég a vállalatirányítási rendszer újraírását tűzte ki célul. Az új rendszert a 2)-es szerver fogja kiszolgálni.

Az átállás modularizált lesz, tehát nem lesz minden alkalmazott orra alá odadugva az új vállalatirányítási rendszer, hanem szép fokozatosan fog áttérni mindenki az új rendszerre. Éppen ezért elengedhetetlen, hogy az adatok a két adatbázisban tökéletesen azonosak legyenek.

Van arra mód és lehetőség, hogy a két adatbázist szinkronban tartsam valahogy? A dolog szépsége, hogy bár az adatok ugyan azok, de az adatbázis felépítése nem minden ponton egyezik meg, mivel a régi rendszer tartalmazott néhány tervezési hibát. Többek között ezért is döntött a cég a váltás mellett.

Félek erre nem igazán létezik megoldás, úgy viszont érdekelne, hogy mégis hogyan szokás egy ilyen átállást megoldani. Az teljesen nyilván való, hogy egyik napról a másikra nem lehet kihúzni az 1)-es szervert és a 2)-est üzembe állítani, mert az új rendszer tartalmazhat rejtett hibákat, amelyek a cég szempontjából érzékeny adatokat (készlet stb) érzékenyen érinthetik, ami nem elfogadható. Tehát nem volna jó, hogyha minden részlegen egyszerre átállna az új rendszerre mindenki, mert az komoly kockázatot jelentene. Mégis mi lehet ilyen esetben a megoldás? Tudom... Olyan programkódot kell csinálni, ami már nem tartalmaz gyermek betegségeket, vagy tesz adatokon tesztelni kell a rendszert. Ezzel nincs is gond, de aki programozott már valaha az tudja, hogy ilyet lehetetlen készíteni. A hibák előfordulását és az okozott kárt jó teszt unitokkal minimalizálni lehet, de 100%osan kizárni nem.

Remélem csinált már valaki hasonlót és tud segíteni, hogy a lehető leghatékonyabban elvégezhető legyen az átállás.
Köszi mindenki!!