Релиз NetBeans IDE 7.0
На днях увидела свет новая версия, пожалуй, лучшей бесплатной IDE. Нового в этой версии: поддержка HTML5 Поддержка Git 1.7.х PHP Rename Refactoring Line wrapping и различные другие плюшки
Setting up mysql-server-5.1 (5.1.49-3) ...
Stopping MySQL database server: mysqld.
110128 17:10:57 [Note] Plugin 'FEDERATED' is disabled.
110128 17:10:57 InnoDB: Started; log sequence number 0 44233
110128 17:10:57 InnoDB: Starting shutdown...
110128 17:11:03 InnoDB: Shutdown completed; log sequence number 0 44233
Starting MySQL database server: mysqld . . . . . . . . . . . . . . failed!
invoke-rc.d: initscript mysql, action "start" failed.
dpkg: error processing mysql-server-5.1 (--configure):
subprocess installed post-installation script returned error exit status 1
dpkg: dependency problems prevent configuration of mysql-server:
mysql-server depends on mysql-server-5.1; however:
Package mysql-server-5.1 is not configured yet.
dpkg: error processing mysql-server (--configure):
dependency problems - leaving unconfigured
configured to not write apport reports
configured to not write apport reports
Errors were encountered while processing:
mysql-server-5.1
mysql-server
E: Sub-process /usr/bin/dpkg returned an error code (1)
А лечится всё предельно просто: в папке /etc/mysql переименуйте текущий my.cnf в my.cnf.backup (или просто удалите), а на его место поставьте my.cnf.dpkg-dist, находящийся в этой-же папке.
linuxdebianmysqlбазы данных0 коммент.Роли в PostgreSQL
Мигрируя с MySQL на PostgreSQL у многих возникает проблема с пониманиями ролей (roles) в PostgreSQL. Роли - это не прямой аналог пользователей (users) в MySQL, хотя они и могут использоваться в том числе и для авторизации пользователей.
В целом роли можно разделить на 2 категории: групповые роли роли, используемые для входа
При создании роли ключевой момент - это передаваемые параметры (атрибуты), они и определяют какого типа будет эта роль, и какими привилегиями она будет располагать. Основные атрибуты:
SUPERUSER | NOSUPERUSER - Указывает, что данная роль имеет статус «суперпользователя», который позволяет осуществлять операции администрирования без каких-либо ограничений. К этим операциям относится доступ, создание/удаление, модификация(изменение) ролей и объектов баз данных. Соответственно, опция SUPERUSER — разрешает, а NOSUPERUSER — запрещает. По умолчанию установлена NOSUPERUSER.
CREATEDB | NOCREATEDB - Разрешает или запрещает роли создавать БД. По умолчанию: NOCREATEDB.
CREATEROLE | NOCREATEROLE - Разрешает или запрещает создавать/удалять роли. По умолчанию: NOCREATEROLE.
INHERIT | NOINHERIT - Определяет, что роль может наследовать привилегии другой роли, членом которой она является. Роль с атрибутом INHERIT будет иметь те же привилегией доступа к объектам БД, что и та роль, которая является её владельцем, потому что первая является членом последней. По умолчанию: INHERIT.
LOGIN | NOLOGIN - Позволяет роли открывать соединения. Один из ключевых моментов, который следует понять в ролях: если роль не может авторизовываться (т.е. открывать соединения от своего имени), то единственная её функция - это настройка прав доступа к бд для других ролей, и такая роль называется групповой. По умолчанию: NOLOGIN.
CONNECTION LIMIT connlimit - устанавливает лимит открытых соединений на роль, -1 - значение по умолчанию и в данном случае соответствует бесконечности.
[ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password' - этот параметр, как несложно догадаться, отвечает за пароль. Есть 2 ньюанса: во-первых пароль имеет смысл указывать только для ролей, используемых для входа, а во-вторых обратите внимание на параметр ENCRYPTED | UNENCRYPTED. Смысл его в том, чтобы указать в каком виде хранить пароль в базе данных: в зашифрованном или нет, по-умолчанию, естественно, пароль шифруется в md5.
IN ROLE rolename - позволяет включить создаваемую роль в существующую роль.
Групповые роли создаются, как должно быть понятно из названия, для описания особого набора привелегий, который впоследствии могут унаследовать роли, используемые для входа и включённые в созданную групповую роль. Но это всё слова, лучше них скажет небольшой пример:
#создаём групповую роль
CREATE ROLE group NOSUPERUSER NOINHERIT NOCREATEDB NOCREATEROLE;
# создаём роль для входа (пользователь) и включаем её в групповую роль
CREATE ROLE user LOGIN ENCRYPTED PASSWORD 'userpassword' INHERIT IN ROLE group;
# даём групповой роли права на таблицу
# права автоматически получит и пользователь
GRANT ALL ON table TO group
# закрываем всем остальным доступ к таблице
REVOKE ALL ON TABLE table FROM PUBLIC
Надеюсь этот небольшой материал поможет пользователям, мигрирующим с MySQL на PostgreSQL, получше понять систему ролей в PostgreSQL.
postgresqlpgsqlбазы данныхвеб-программирование0 коммент.Нестандартная сотировка выборки из MySQL
Ещё одна небольшая проблемка, которую удалось решить, а решением поделиться со всеми. Представьте себе ситуацию: игра в покер, есть стол, и таблица игроков. За столом, допустим, 8 мест, а играют 5 игроков, притом позиции у всех разные, допустим 1, 3, 4, 6, 8. В каждом новом хенде выбирается дилер, предположим, что сейчас это игрок на 4 позиции, соответственно мне надо выбрать всех игроков за текущим столом, но по порядку, начиная с дилера, т.е. чтобы в выборке было 4, 6, 8, 1, 3.
Сначала я хотел сделать это через usort, но проблема в том, что функцию сравнения передаётся только 2 параметра, а нужен был 3й - дилер. Можно, конечно, было написать класс в котором и была бы прописана функция сравнения, а дилер устанавливался как свойство при создании объекта, но как оказалось есть куда более элегантное решение:
SELECT * FROM `players` WHERE `table`='id стола' ORDER BY `position`<4, `position`
Вот такой вот незамысловатый запрос сразу вернёт строки в нужном расположении, а всё благодаря тому, что MySQL поддерживает логические выражения в ORDER BY.
Вместе с тем стояла задача сортировать эти записи по номеру офиса, и вот здесь возникла проблема: сортировка, как и следовало ожидать, шла как строки, т.е. по каждому следующему символу. Поэтому запрос: SELECT `onum` FROM `offices` ORDER BY `onum` ASC выдавал 1, 109, 12, 146, когда я, конечно же, хотел бы видеть 1, 12, 109, 146.
Немножко погуглив решение таки было найдено: функция CAST. И вот уже запрос SELECT `onum` FROM `offices` ORDER BY CAST(`onum` AS UNSIGNED) возвращал всё как надо. Другие возможные конвертации для CAST:
BINARY[(N)] CHAR[(N)] DATE DATETIME DECIMAL[(M[,D])] SIGNED [INTEGER] TIME UNSIGNED [INTEGER]