Portál AbcLinuxu, 14. května 2025 05:06
Řešení dotazu:
CREATE TABLE uzivatel(nick text); INSERT INTO uzivatel values ('Wall'); INSERT INTO uzivatel values ('wall'); INSERT INTO uzivatel values ('WaLl'); INSERT INTO uzivatel values ('Wal'); INSERT INTO uzivatel values ('wal'); INSERT INTO uzivatel values ('wAl'); SELECT * FROM uzivatel WHERE nick ILIKE 'wal';
ILIKE
lze použít i operátor ~~*
CREATE EXTENSION "citext";
CREATE EXTENSION "citext";
?
su su postgres psql vasedb CREATE EXTENSION "citext";Postgres neběží s právy roota jelikož by to bylo bezpečnostní riziko - takže má vlastního "roota" čímž je uživatel Postgres. Původně jsem to tady nechtěl vytahovat, ale možná by Vám pomohlo školení - 23. října - PostgreSQL efektivne - Základní administrace PostgreSQL, vysvětlení základních funkcí PostgreSQL ovlivňujících chování MVCC, TOAST - cílem školení je vysvětlit nejdůležitější funkce PostgreSQL, tak aby účastník školení dokázal efektivně nasadit a provozovat PostgreSQL (ROOT). Školím pro iinfo.
postgres=# create database nova_database encoding 'utf8' owner hunt;
CREATE DATABASE
postgres=# CREATE EXTENSION "citext";
CREATE EXTENSION
postgres=#
a pak jsem se přihlásil na hunt a chtěl jsem udělat
nick_uzivatele CITEXT UNIQUE not null,
což by měl bejt stejnej postup ne? Nebo já už nevim, začínám toužit po MySQL.
psql postgres postgres=# create database nova_database encoding 'utf8' owner hunt; CREATE DATABASE --- prepnout se do cilove db \c nova_database CREATE EXTENSION "citext"; CREATE EXTENSIONJakmile se v pg rozkoukáte, tak to je v pohodě - úplně nejhorší na Postgresu je, že to nemá stejné ovládání jako MySQL. Jak vidím, měl bych do článku http://postgres.cz/wiki/P%C5%99echod_z_MySQL přidat ještě část o case sensitivity
SMALLINT unsigned
nebo i INT unsigned
a nechci databázi velkou jak kráva( rýpu?), štve mě to a už několikrát jsem byl nešťastný, že se mi DB sakramentsky zvětšila (bo právě proto byly použity 2^16 a 2^32 datové typy, bo to je pro aplikaci platný rozsah).CREATE TABLE tx ( x SMALLINT, PRIMARY KEY (x)); INSERT INTO tx (x) VALUES(32767); SELECT x*2 AS val FROM tx;To jsou tři věci, které jsem tam nenašel, a které mě při migraci často zabolí (pominu-li, že mysql akceptuje INSERT bez INTO líní lidé jsou…).
GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER } [, ...] | ALL [ PRIVILEGES ] } ON { [ TABLE ] table_name [, ...] | ALL TABLES IN SCHEMA schema_name [, ...] } TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT SELECT ON ALL TABLES IN SCHEMA xxxx TO GROUP nejaka_grupa
případně:
do $$ declare users text[] = ARRAY['pavel','postgres']; u varchar; r record; begin for r in select * from information_schema.tables where table_schema = 'public' loop for u in select * from unnest(users) loop execute format('grant select on %I.%I to %I', r.table_schema, r.table_name, u); end loop; end loop; end;$$ ;Kdybych z nějakého důvodu nemohl použít skupiny (třeba z vlastní lenosti). 99% z MySQL lze do Pg nějak převést - to 1 procento nejde - v několika málo ohledech tyhle dvě databáze mají úplně jinou filozofii, jiná řešení a měly (a mají) jiné priority vývoje.
Myslel jsem aby jsi to doplnil na wiki, bo to jsou věci, s kterými se přechodník setká a potrápí jej
Ad. unsigned - dík, zajímavé řešení, ale jen pro situace kdy tabulka obsahuje velké rozpětí hodnot (tedy spíše spoustu malých a pár velkých) jinak je to nastejno jak užití vyššího datového typu nebo je to o kus horší (už 15bits ve 4B blééé)…
Ad. Vím - jsem to musel už řešit několikrát, stojí za zmínku i ALTER DEFAULT PRIVILEGES IN SCHEMA…
- což je už konečně to co je „třeba“ :), ale chtěl jsem napsat verzi < 9 (, ale nějak se mi pomíchali > < ), člověku dělající v MySQL to přijde velmi neohrabané a je zmaten - obdobnou fci používám, jen má nevýhodu, že po každém doplnění tabulek, se nesmí zapomenout ji použít.
Ad. případ (třešnička) implicitního ne-přetypování na vyšší typ, tak na to spousta „obyčejných“ lidí co dělali jen s MySQL čučí jak čáp do trubky…
Ju. Aby jsme si rozuměli, nechtěl jsem rozbíhat nic ve smyslu MySql vs. PostgreSql a obhajobu či hanění řešení. Jen když jsi zmínil doplnění wiki, já si ji přečetl, tak jsem navrhl doplnit další rozdíly, které považuji za důležité.
Přiznávám, že absence unsigned nedokážu brát s nadhledem a jsem schopen/ochoten flejmovat na toto téma .
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.