Új hozzászólás Aktív témák
-
-
Ispy
veterán
Szerintem ilyenkor nem natív formátumban van tárolva az adat, de az sql szerver felismeri és átkonvertálja, ezért jó a datediff.
Én is tapasztaltam már sebesség problémát, amikor nvarchart simán számként használtam, ha ' jelek közé raktam javult a sebessége, de gondolom akkor a leggyorsabb, ha nem kell találgatnia a motornak az adattípust.
[ Szerkesztve ]
"Debugging is like being the detective in a crime movie where you're also the murderer."
-
Male
nagyúr
-
Petium001
csendes tag
A Mysql-nek rajta kell lennie, nincs net csatlakozás, volt, hogy napokig nem volt internet, és működött... viszont finn gomb sincs hogyan kell elindítani a repair table-t....
ha lenne command, mint a winfosban vagy valami, akkor oké, de a shift-re csak a recovery menü jön ki, a root passt nem tudom, a net-dinner-re keresve semmi nem jön elő a neten, csak egy cég aki azt sem tudja miről van szó....nem ők írták a szoftvert, pedig ilyennel foglalkoznak. Olyan, mintha böngészőre lenne írva a szoftver. Az eredeti üzemeltetők közül az első meghalt, a második eltűnt.Petium
-
-
Male
nagyúr
válasz bambano #4360 üzenetére
Ha a neten van, és nem tudja az elérhetőséget meg a user/passt, mert hardkódolva van a programban? Legalábbis feltételezem, hogy a program felhasználói felülete nem olyan, hogy a pincérek gépelgethetik be az SQL utasításokat, és egy sima config szövegfile sem tuti hogy van ezekről amiből kinézhetné.
...de már lényegtelen, mert kiderült, a gépen van az SQL szerver nála. -
baracsi
tag
válasz Petium001 #4359 üzenetére
el tudod indítani a MySQL-t úgy, hogy nem fog kérni autorizációs adatokat, illetve kér, de bármit megadhatsz
skip-grant-tables
beállításnak nézz utána, ezt lehet parancssorosan is megadni, de be tudod állítani az /etc/mysql/my.cnf részben is (írtad, hogy linux-ról van szó, de lehet, hogy ott máshol van a config fájl), utána újra kell indítani a mysql service-t, ezt követően bármilyen login névvel / jelszóval be tudsz lépni, rá tudod engedni arepair table
-t, után szerintem érdemes kivenni a beállítást, hogy ne tudja más hack-elni[mysqld]
skip-grant-tables
port=3306[ Szerkesztve ]
-
Petium001
csendes tag
válasz baracsi #4362 üzenetére
Köszi
Na ez nekem magas mint békának a hokedli... hogy jutok el a
skip-grant-tables
beállításhoz? a recovery menüig jutok el max, oda is csak 10-ből 1x mert nem tudom mikor kell a shift-et nyomni... ott azután végleg megáll a tudomány én csak a winfost nyúzom 99%-banKöszi
Petium
-
baracsi
tag
válasz Petium001 #4363 üzenetére
Ennek semmi köze a szoftverhez, SHIFT meg recovery menü feltételezem a szofftver szolgáltatása, azt biztos, hogy nem a MySQL-é. A cél a MySQL-ben található sérült tábla rendbetétele.
1. keresd meg a linux-on a MySQL konfig fájlját, ez alapból
/etc/mysql/my.cnf
, de lehet, hogy azon a gépen máshol van, ezt neked kell kideríteni
2. szerkeszd a konfig-fájlt és keresd meg a [mysqld] részt és alá írd be askip-grant-tables
szöveget
3. indítsd újra a MySQL szolgáltatást:/etc/init.d mysql restart
4. csatlakozz a MySQL-hez:mysql -u root -p
üss egy ENTER-t, jelszónak írjál be valamit, mindegy, hogy mit, mert askip-grant-tables
miatt nem fog foglalkozni a jelszó ellenőrzésével
5. írd be eztuse bores
majd üss egy ENTER-t, a hibaüzenet abores
sématetel
nevű táblájára vonatkozik
6. írd be eztREPAIR TABLE tetel;
majd üss egy ENTER-tHa működik a szoftver ezt követően, akkor szedd ki a
skip-grant-tables
részt és ismét indítsd újra a MySQL szolgáltatást[ Szerkesztve ]
-
Petium001
csendes tag
-
baracsi
tag
válasz Petium001 #4365 üzenetére
Szia,
lehet kívülről, de csak akkor ha ez nincs benne a my.cnf-ben, vagy ki van kommentezve:
bind-address=127.0.0.1
, ugyanis ha benne van, akkor csak localhost-on lehet csatlakozni (web-szervereknél van értelme, nem lehet kívülről támadni a MySQL-t)Tölts le egy MySQL GUI Tools-t, ez egy régi program, annak a MySQL Administrator programjával próbálj meg csatlakozni a linux által kapott IP-címre, szerencséd van, akkor a port-ot nem változtatták
ha az sem megy és nem tudod szerkeszteni a my.cnf-et, akkor aki írta, az a sírba vitt magával minden info-t, ami szükséges
ha sikerült, akkor az alábbi módon tudod javítani
1. bal oldal válaszd ki a
bores
sémát a Schemata rész alatt
2. táblán jobb klikk Maintenance \ Repair table, egyébként piros lesz ez a tábla a listában, mert sérült szegény[ Szerkesztve ]
-
kw3v865
senior tag
Sziasztok!
PostgreSQL-ből szeretnék sémát exportálni pg_dump-pal. Annyi bonyolultság van, hogy a pg_dump.exe-t egy C#-ban megírt alkalmazás indítja el. A cél az lenne, hogy tudassam a felhasználóval, hogy sikeres volt-e a dump-olás. Van-e arra lehetőség, hogy kiírja a pd_dump az exit code-ot?
"-v"-vel kiír sok mindent, de vajon lehet-e olyat csinálni, hogy exit code 0 vagy 1-et kiírjon?
Vagy másképpen megközelítve a dolgot: ha "-v" nélkül futtatom és sikeresen lefut az exportálás, akkor nem ír ki semmit. Erre lehetne alapozni? Azaz, ha nem ír ki semmit, akkor tekinthető sikeresnek az exportálás?[ Szerkesztve ]
-
Petium001
csendes tag
válasz baracsi #4366 üzenetére
Szia!
A saját hálózatomra tettem, próbáltam elérni hálózaton keresztül a http://192.168.0.100:7501/ címen, az sikerült, viszont ez jött ki:
távolról meg lehet nyitni, az működik...Petium
-
I02S3F
őstag
Sziasztok! Hogyan termel anyagi hasznot egy open source adatbázis szoftver, rendszer, például a MariaDB? Hogy tartja magát működőképesen? Miből van erőforrása fejleszteni, tesztelni, support-álni?
A válasz egy cikk is lehet!
-
martonx
veterán
Úgy hogy ezek mögött valójában cégek vannak / olyan felhasználó cégek akik a supportért fizetnek.
Azaz attól, hogy magából a szoftver licenszből nincs bevételük, még egy csomó mindenből lehet.
Lásd Firefox böngésző, ahol a Mozilla abból létezik, hogy google / Microsoft időnként beléjük tol pár millió EUR - t.
Én kérek elnézést!
-
Male
nagyúr
válasz baracsi #4375 üzenetére
Win alól utoljára én is több éve csináltam ilyet, akkor még ext2fs kellett hozzá, meg volt valami totalcommander plugin, amivel fel lehetett csatolni a linuxos partíciót win alól is.... de az talán csak olvasni tudott. Szóval ebben olyan sokat én sem tudok hozzátenni, lehegy, hogy a Live Linux egyszerűbb lenne, bebootolja, és onnan írkál rá.
-
kw3v865
senior tag
Sziasztok!
PostgreSQL-ben írok egy függvényt, melynek az egyik insert-jével van probléma, de nem tudok rájönni, hogy mi ennek az oka. Azért kell az execute, mert a séma neve a függvény egyik bemenő paramétere ($1). Az id és a name pedig változók.
EXECUTE 'INSERT INTO '||$1||'.table (azonosito, nev) SELECT '||id||','||name;
Ezt a hibaüzenetet kapom: column "xyz" does not exist (itt az "xyz" a name változó értéke)
SQL state: 42703Ha függvényen kívül csak simán lefuttatom ezt:
INSERT INTO tesztsema.table (azonosito, nev) SELECT 2332,'xyz';
Akkor tökéletesen működik.
Vajon mi lehet a gond?
-
Lortech
addikt
válasz kw3v865 #4377 üzenetére
'INSERT INTO '||$1||'.table (azonosito, nev) SELECT '||id||','||name;
>>
kiértékelés után: INSERT INTO abc.table (azonosito, nev) SELECT id_erteke, name_erteke;
Hiányzik tehát id és name változó értékei körül az aposztróf, különben azt hiszi, hogy nem egy literál, hanem egy oszlop, azért nem találja. (az id azért oké, mert number típus gondolom)
Aposztróf escape-eléséhez duplázni kell.[ Szerkesztve ]
Thank you to god for making me an atheist
-
kw3v865
senior tag
válasz Lortech #4379 üzenetére
Köszi, igaz azóta már találtam egy megoldást, format-tal, nem túl szép megoldás, de működik:
EXECUTE format('INSERT INTO '||$1||'.table(azonosito, nev) VALUES($1,$2);') using id, name;
Egyébként a te megoldásodhoz miért kell aposztróf, ha egy változóról van szó? Tehát nem közvetlenül értékeket illesztek be, hanem változónak a nevét írom be.
Ami viszont ismét kifogott rajtam, az egy függvényargumentumban megadott nevű séma (plusz a benne lévő fix nevű tábla) létezésének ellenőrzése.
IF (EXECUTE 'SELECT to_regclass('''||$1||'.tablename'')')
ERROR: type "execute" does not exist
Tehát már az eleje is rossz.
Mit ronthattam el? -
Lortech
addikt
válasz kw3v865 #4380 üzenetére
Mert a formatos megoldásod dollar quotingot használ, ami a jobban olvasható, biztosabb, egyszóval a javasolt megoldás.
Ha visszamegyünk az eredeti statikus, működő insert statementedhez:
INSERT INTO tesztsema.table (azonosito, nev) SELECT 2332,'xyz';
Az volt a cél, hogy ezt a stringet dinamikusan előállítsd, és átadd az EXECUTE statementnek.
Azt pedig úgy tudod megtenni, hogy aposztrófokat is odateszed a példában az xyz köré.
A '||name csak annyit csinál, hogy a name értékét hozzáfűzi a stringhez, de aposztrófok ettől még nem lesznek körülötte, és text típusnál ez szükséges. Szóval, vagy te fűzöd oda (nem javasolt, csak a probléma megértéséért említettem az előző hozzászólásomban), vagy dollar quotingot vagy quote_literal() / quote_ident() fgv-t használsz.Másikhoz. Ilyen szerkezet nincs, hogy IF EXECUTE
Olyan tudsz csinálni, hogy
EXECUTE STATEMENT into VAR és a VAR értékét vizsgálod IF-fel.[ Szerkesztve ]
Thank you to god for making me an atheist
-
Petium001
csendes tag
válasz baracsi #4364 üzenetére
Szia!
7végenként van időm a gép elé kerülni, letöltöttem egy live ubuntu-t és pendrive-ről elindítottam, bejön a desktop, amikor rákattintottam a hdd-re (38 gb volume) az írta, nem lehet hozzáférni, nincs jogosultságom... újraindítottam a linuxot, és be tudtam lépni.
az első olyan lehetőség [mysqld] alá ami volt beírtam askip-grant-tables
szöveget
"3. indítsd újra a MySQL szolgáltatást:/etc/init.d mysql restart
" ezt hol?[ Szerkesztve ]
Petium
-
kw3v865
senior tag
Üdv!
Van egy PostgreSQL-ben megírt függvényem (ennek tartalma most szerintem lényegtelen), melynek a teljesítményét kívánom tesztelni. Ez a függvény meg lesz majd hívva folyamatosan egymás után több ezerszer, értelemszerűen változó argumentumokkal. Ennek a teljesítményét szeretném most tesztelni. A lényeg: valahogy szimulálni akarom, hogy a valóságban nagyjából milyen gyorsan fut majd le a folyamat, ha több 1000-szer meghívom egymás után a függvényt.
Ehhez rendelkezésemre áll egy tábla, melyben a benne lévő adatokkal tudnám is tesztelni a függvényt. Tehát a terv az lenne, hogy írok egy függvényt, ami végigmegy egy FOR-ral az összes rekordon, kiszedi a felhasznákalandó értékeket változókba, és minden alkalommal meghívja a függvényemet úgy, hogy argumentumként ezeket a változókat adom meg.Szerintetek jó az elgondolás?
Íme kódom:
CREATE OR REPLACE FUNCTION sqlteszt()
RETURNS void
LANGUAGE 'plpgsql'
AS $BODY$
DECLARE
i integer;
x double precision;
y double precision;
datetime timestamp without time zone;
BEGIN
FOR i IN SELECT id FROM proba
LOOP
SELECT p.x, p.y, p.datetime FROM proba p WHERE p.id=i
INTO x, y, weedpercent, datetime;
PERFORM masikfuggveny(x,y,datetime,true,false,false,true,false);
END LOOP;
END;
$BODY$;
Nem csinál semmit így, azaz lefut, de semmi hatása nincs (egyébként insert-eket is csinál, de az most lényegtelen). Ha a "masikfuggveny"-t csak simán meghívom tetszőleges bemeneti paraméterekkel, akkor tökéletesen működik.
Ha a PERFORM helyett SELECT-tel hívom meg a "masikfuggveny"-t, akkor ezt a hibaüzenetet kapom (pedig az is void, azaz nincs visszatérési értéke):
ERROR: query has no destination for result data
HINT: If you want to discard the results of a SELECT, use PERFORM instead.Van valami ötletetek mi okozhatja a problémát?
-
Petium001
csendes tag
válasz baracsi #4387 üzenetére
Szia!
Pendrive-ról indítottam a live ubuntut, ott a hdd-re kattintva megkerestem a my.cnf-et, szerkesztettem, és már nem engedte menteni, csak más néven.
Live alól is lehet mysql restartot indítani? ha külső progival van indítva, gondolom akkor nem fut...Köszi
[ Szerkesztve ]
Petium
-
kw3v865
senior tag
Sziasztok!
Fejlesztek egy alkalmazást (C#-ban, WinForm-os alkalmazás, Npgsql NuGet package használatával), amely a működése során a localhost-on lévő PostgreSQL adatbázisba ír adatokat (insert-el egy táblába). Jelenleg ez teljesen offline módon történik. Azonban felmerült egy olyan igény, hogy ez egy távoli PostgreSQL szervhez tudjon kapcsolódni, azaz ne kelljen állandóan menteni a táblákat, majd átvinni a másik gépre és ott betölteni, hanem közvetlenül a távoli adatbázishoz tudjon kapcsolódni.
Szerintetek ez mennyire biztonságos megoldás, ha "kiengedem" a netre a pg-t? Sajnos ilyen téren nincsenek tapasztalataim. Ebben az esetben mit javasolnátok? Esetleg VPN-nel biztonságos tudna lenni? -
martonx
veterán
-
válasz kw3v865 #4390 üzenetére
a postgresql is tud olyat, hogy ip címre vagy tartományra korlátozni a klienseket, illetve ugyanezt tűzfallal is meg lehet oldani. ez akkor jó, ha a klienseknek ismert az ip címtartománya.
elvileg használ ssl-t, tehát akár azt is meg lehet csinálni, hogy csak ismert kulcsú klienseket beengedni.
hogy ez mennyire biztonságos, az attól is függ, hogy milyen adatokat teszel bele.
a másik lehetőség, én valószínűleg ezt választanám, hogy az insert utasításokat kiírom egy text fájlba, azt rsync+ssh-val szinkronizálnám a szerverre, és ott betölteném adatbázisba.
A db-ben hosztolt adatbázisról meg annyit, hogy a benne tárolt adatok fajtájától és a hozzá tartozó szabályzatoktól, eljárásrendtől függően (úgy értem: ezek nem elegendően precíz meghatározása esetén) akár 2 év börtönnel fenyegetett bűncselekmény is lehet felhőbe adatbázist rakni.
Az api api hátán api-val megbolondítva típusú túltervezettségről továbbra is az a véleményem, hogy semmi értelme, mert egy saját fejlesztésű apiban nagyobb valószínűséggel lesz bug, mint egy postgresql net protokollban, vagyis olyan plusz energiabefektetés, ami sose térül meg, csak ront a helyzeten.
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
-
kw3v865
senior tag
válasz bambano #4392 üzenetére
Köszönöm mindkettőtöknek a válaszokat! Több érdekes dolgot írtatok, az API-s megoldást elvetném, mert nem sok fogalmam van róla. Kicsit bővebben is kifejtem, mi lenne a cél: adott néhány kliens gép (jelenleg 3-4 db), ezek folyamatosan gyűjtik az adatokat és eltárolják egy táblában (localhoston). A cél az lenne, hogy szinkronizálni lehessen ezeket, azaz minden egyes gépen futó szoftver elérhesse (read only) a többi által rögzített táblák tartalmát. A szinkronizációnak nem szükséges valós időben megtörténnie, hiszen az is előfordulhat, hogy éppen nincs internet elérésük (földrajzilag mozgásban vannak a gépek). A gyakorlatban ez úgy nézne ki, hogy ha végeztek egy adott feladattal, akkor történne meg a szinkronizálás (néhány óránként).
Így, hogy alaposabban is tágondoltam, tulajdonképpen nem is szükséges ehhez, hogy PostgreSQL fusson a szerveren, ha az rsync-es megoldást használnám. Persze lenne egy szerver, melyre szinkronizálva lennének a táblák, és a kliensek innen szednék le a frissített txt-ket is, és ezután lennének frissítve a táblák a klieneseken. Vajon ez így működhet?
-
BuktaSzaki
tag
Sziasztok, egy kis sql help kéne.
Adott egy tábla amiben szerződésszámok vannak. ezekhez tartoznak szolgáltatások, egy szerződéshez akármennyi, ezeknek van egy azonosítója. azokat a szerződésszámokat szeretném leszűrni, ahol (hibásan) egy szerződéshez 2x van egy szolgáltatás hozzárendelve (azonos az szol. azonjuk) -
Apollo17hu
őstag
válasz BuktaSzaki #4395 üzenetére
SELECT tabla.szerzszam, tabla.szolgazon
FROM tabla
GROUP BY tabla.szerzszam, tabla.szolgazon
HAVING COUNT(*) > 1
Ezzel azokat is megkapod, ha 2-nél többször van hozzárendelve ugyanaz a szolgáltatás.
-
BuktaSzaki
tag
válasz Apollo17hu #4396 üzenetére
Szia, köszi, én is erre gondoltam, de valamiért nem működik. Most olyanokat ad vissza, hogy egy szolgazon többször fordul elő, de nem ugyanazon a szerzodeszam-on, hanem az összesen
-
Apollo17hu
őstag
válasz BuktaSzaki #4397 üzenetére
Pontosan mi a kodod? Nem lehet, hogy vannak olyan szolgaltatasok, amelyek - azon felul, hogy hibasan duplikalva vannak bizonyos szerzodesekhez - tobb szerzodeshez is kapcsolodnak?
-
BuktaSzaki
tag
válasz Apollo17hu #4398 üzenetére
Több szerződésen is rajta lehetnek, de csak 1x
-
Apollo17hu
őstag
válasz BuktaSzaki #4399 üzenetére
Akkor, amit #4397 -ben írtál, az rendben van. Vagy nem értem. Példák kellenének.