Adatbázis: SQL, XML DB

[Megoldva] MySQL kérdés

Van két táblám:
1: mid(int, autoincrement), mparent(char(32)), msub(char(32)), morder(int)
2: gid(char(32), unique), gname(varchar(255))

Az 1. táblában az mparent, msub a 2. tábla gid mezején keresztül hivatkozik a gname-ra.

A feladat: kilistázni az 1. tábla tartalmát úgy, hogy az mparent, msub helyére a megfelelő gname kerüljön. Belezavarodtam nagyon, segítség kéne...

pgsql karakterkódolás

Sziasztok!

Adott egy SLES 10-es szerver (SP1-es) amelyre telepítésre került egy Postgres Sql szerver és hozzá tartozó odbc driver.

A szerveren van még egy Lotus Domino szerver, amely bizonyos adatokat kiír Postgres SQL szerverre ODBC-n keresztül.

A kiírás majdnem tökéletes működik a karakterkódlást leszámítva.

A Lotus Domino-nál az utf8-as kódolás fixen beégetett.

A Postgres SQL szervernél az adatbázis utf8-as készítettü le.

Ha nem állítunk az odbc kapcsolódás után karakterkódolást vagy utf8-at adjuk meg, akkor a következő hibaüzenetet kapjuk minden sql parancs esetén:

Error: [unixODBC]Error while executing the query;
ERROR: invalid byte sequence for encoding "UTF8": 0xf6fcf33f
HINT: This error can also happen if the byte sequence does not match the encoding expected by the server, which is controlled by "client_encoding"., Connector 'odbc2', Method -Execute- (7) External Text: [unixODBC]Error while executing the query;
ERROR: invalid byte sequence for encoding "UTF8": 0xf6fcf33f

Ha mondjuk a karakter kódolást át állítjuk latin2-re a kapcsolódás után, akkor minden sql parancsot megért az SQL szerver csak a őűŐŰ karakterek helyett kérdőjel található és visszaolvasás után is karakterkódolástól függetlenül.

Mit és hol kéne beállítani, hogy a őűŐŰ karakterek normálisan legyenek elmentve?

Zsolti

Postgres restore más role-al

Sziasztok!

Az alábbi problémára szeretnék megoldást találni:
Van egy postgres 8.2 adatbázisom. Ezt pgadminIII-al kidumpolom, majd szeretném egy _másik_ ugyanezen a szerveren futó adatbázisba beletenni.

A cél, hogy a teszt adatbázist feltöltsem a produktív rendszer adataival.

A gond az, hogy mivel a prod adatbázisnak a prod_role, a teszt adatbázisnak a test_role a tulajdonosa, a prod-ról készített dump elszáll, ha a test-re akarom visszaállítani.

Keresgéltem már, de nem igazán találtam értékelhető megoldást.

Köszi a segítséget előre is!
pentike

sql segítség lekérdezéshez

Lehet én néztem be nagyon valamit, de megpróbálol elmondani egyszerűen.
Vagy adatbázik a lekérdezés számára fontos táblákkal.
user_menu (user_id,menu_id) - melyik user melyik menühöz van rendelve
menu (id,menu_group_id) - melyik menü melyik menücsoporban van
menu_group (id,name,...) - a menücsoportok
user_group(menu_id,group_id) - melyik csoporthoz milyen menük tartoznak
own_group(user_id,group_id) - melyik user melyik csoporthoz van rendelve

kb ennyi lenne ami fontos a dologban, hogy elmondhassam
szeretném megtudni, hogy hány menu_group található egy user adott alatt.

A lekérdezés így néz ki:

select menu_group.* from user_menu,menu,menu_group,user_group,own_group where menu_group.id=menu.menu_group_id and (user_menu.menu_id=menu.id or user_group=menu.id) and own_group.group_id=user_group.group_id) and owen_group.user_id=2 and user_menu.user_id=2 group by menu_group.id

lehetnek egyes user_id-nak saját menüjük és a csoporban lévő menükhöz is hozzáférhetnek, aminek tagjuk, így a kapott menülista alapján elméletileg kijönne hogy az adott menük milyen menücsoporban vannak, és magkapnám, hogy adott user hány menücsoporthoz tartozik és melyek ezek.

A gondom az, hogy a user egy csoporthoz sem tartozik, viszok vannak saját menüi, akkor üres eredményt kapok, ha akár 1 csoporjoz is tartozik, márik megkapom az összes eredményt.

Kérlek segítsetek egy helyes select megadásában.

mysql-log-rotate

Kedves fórum társak,

mysql szervert használok (5.0.51.-et) Solaris 10-en, a logolás használom (kell), meg van adva a my.cnf ben a

expire_logs_days=5 (Ez hatástalan beállítás és ha jól értem akkor csak a bináris logra működik)
log=mysql.log

a logfile mérete kb 2 hét alatt 40G -re hízik, van egy saját log rotate scriptje a mysqlnek :

# This logname can be set in /etc/my.cnf
# by setting the variable "err-log"
# in the [safe_mysqld] section as follows:
#
# [safe_mysqld]
# err-log=/var/db/mysql/mysqld.log
#
# If the root user has a password you have to create a
# /root/.my.cnf configuration file with the following
# content:
#
# [mysqladmin]
# password =
# user= root
#
# where "" is the password.
#
# ATTENTION: This /root/.my.cnf should be readable ONLY
# for root !

/var/db/mysql/mysqld.log {
# create 600 mysql mysql
notifempty
daily
rotate 3
missingok
compress
postrotate
# just if mysqld is really running
if test -x /usr/local/bin/mysqladmin && \
/usr/local/bin/mysqladmin ping &>/dev/null
then
/usr/local/bin/mysqladmin flush-logs
fi
endscript
}

amit szeretnék beüzemelni, hátha meg lehet oldani szebben is a mysql logrotálást mint saját scriptből mysqld leállítás nélkül is, van valaki aki beüzemelte már a fenti mysql-log-rotate scriptet?

MySQL ROLLBACK konkurens műveleteknél?

Azzal a problémával futottam össze, hogy webes környezetben 1 DBuser alatt fut minden felhasználó adatbázis művelete.
Ez önmagában még nem jelent gondot, viszont ha van egy műveletsorom amit egy menet közbeni megszakadás miatt rollbackelnem kellene, egy másik (webes)user konkurrens műveletének commitja miatt ezt már nem tudom megtenni.

A műveletsort nem tudom pl tárolt eljárásként egységbe szervezni, mert tömböt, pláne többdimenziósat a mysql nem tud inputként bevenni, a workaround(egybefűzöm, majd a SP-n belül szétbontom a delimiter jelek mentén) meg egy méret felett már nem megoldható. Szóval kénytelen vagyok a tömböt az sql-en kívül bejárni, az pedig iterációhoz vezet.

Van-e valamilyen ötletetek a szituációra, ami nem jár a tábla lockolásával(ami a konkurens juzerek munkáját blokkolja), illetve nem vezet be minden webes usernek egy DBusert (ami megszívatja az adminisztrációt)?

Előre is köszönöm!

PL/pgSQL fv.

Sziasztok!

Egy PL/pgSQL függvényt próbálok írni, de eddig sajnos kevés sikerrel.

Az eredeti táblák több mezőt tartalmaznak, a problémát egyszerűsítve fogalmazom meg.

Adottak a T1, T2 és T3 táblák, melyek sémája különböző. Valamint van egy T tábla, melyben a Tn (n=1,2,3) táblák rekordjainak egy sorozata van tárolva (nem minden rekord szerepel benne, egy rekord többször is előfordulhat).
A T sémája:
id (primary key)
t (melyik Tn táblában van a rekord)
t_id (a rekord Tn táblabeli azonosítója)
elozo (az előző rekord T.id-je a sorozatban, első rekordnál 0)

Ebből szeretném lekérdezni a Tn táblabeli rekordokat a T táblában meghatározott sorrendben.

PL/pgSQL nélkül csak több query küldésével tudtam megoldani, ami nem szép:
1. lekérdezem a T-ből azt a rekordot, melyre az elozo=0
2. T.t táblából T.t_id-jű rekord lekérdezése (elágazás)
3. elozo=T.elozo; goto 1
Vége ha az 1. pontban szereplő lekérdezés eredménye üres.

Ezt szeretném egy PL/pgSQL függvénnyel helyettesíteni.
Cursor használatával próbáltam megoldani de nem sikerült.

Van javaslatotok arra, hogy a fenti táblaszerkezettel hogyan lehet ezt a lekérdezést szépen és hatékonyan megírni?

Előre is köszönöm a válaszokat!

Mysql lekérdezés

Sziasztok!

Egy olyan gondom van, hogy adott egy webáruház. Lehetőség van arra, hogy a kiválasztott kategóriákat bizonyos feltétel szerint rendezzzük. Az egyik ilyen feltétel, hogy "Az akciós termékek elől".
Ezt szeretném megoldani valahogyan, hogy az akciós termékek elől legyenek értékük szerint növekvőben majd utána a maradék termék pl. ABC sorrendben.
Ezt meg lehet oldani egy lekérdezésben?

Debian mysqldump: table crashed

Hello!

Egy debian szerveren a mysqldump az alábbi hibát dobja:

mysqldump: Error 1194: Table 'tablaneve' is marked as crashed and should be repaired when dumping table `tablaneve` at row: 33

Mindeközben a készült dump, és az illető tábla is hibátlan.

Nyomtam már rá REPAIR TABLE-t, látszólag hibátlanul lefutott, de továbbra is hibajelzést ad. Próbáltam kidumpolni a táblát, majd törölni, és visszarakni dump-ból, ennek ellenére még mindig megvan a hibajelzés. Mi okozhatja ezt?

Petya

[Megoldva] MySQL syntax error SELECT-nél

Sziasztok!

Ezt a hibaüzenetet kaptam egy lekérdezéskor:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' 'username')' at line 2

A hibát ez a két sor okozza:

$sql = "select felh_nev from felhasznalok where felh_nev=\'$nev\' ";
$eredmeny = mysql_query($sql, $ossz) or die (mysql_error());

Kipróbáltam többféle módon a szintaxist, aposztrófokkal, idézőjelekkel (ilyenkor adta ezt a hibát), és azok nélkül is, akkor egy másik hibaüzenet jött.
phpMyAdmin-ban kiadva ezt a lekérdezést, működött, PHP kódban nem jó.
Találkozott már valaki hasonló hibával? Mi okozhatja, hogyan lehet elhárítani?

Válaszaitokat előre is köszönöm.