martes, 31 de diciembre de 2013

Un DBA MySQL mira PostgreSQL

Original post: http://anothermysqldba.blogspot.com/2013/12/a-mysql-dba-looks-at-postgresql.html

Así que este es un viaje del / a MySQL DBA mirar en PostgreSQL . No es un ataque sólo observaciones y ejemplos. 

El uso de CentOS 6.5 de 64 bits: 

rpm-ivh http://yum.postgresql.org/9.3/redhat/rhel-6.5-x86_64/pgdg-centos93-9.3-1.noarch.rpm

ñam groupinstall "Base de datos PostgreSQL Server 9.3 PGDG" 
Se instalarán ---> Paquete postgresql93.x86_64 0:9.3.2-1PGDG. RHEL6 
---> Se instalará postgresql93-contrib.x86_64 Paquete 0:9.3.2-1PGDG. RHEL6 
---> Se instalará postgresql93-libs.x86_64 Paquete 0:9.3.2-1PGDG. RHEL6 
 
---> Se instalará Paquete postgresql93-server.x86_64 0:9.3.2-1PGDG. RHEL6 

yum install postgresql93-servidor 

servicio postgresql-9.3 initdb 
Base de datos Inicialización: [OK] 
postgresql-9.3 puesta en servicio 
A partir postgresql-9.3 servicio: [OK] 
chkconfig postgresql-9.3 en 

Todos los siguientes ejemplos se basan en el PostgreSQL Wiki 
# Su - postgres 
-Bash-4.1 $ psql 
 
psql (9.3.2) 

postgres = # CREAR USUARIO CONTRASEÑA testuser '1234 '; 
CREATE ROLE 
postgres = # GRANT ALL ON SCHEMA prueba por TestUser; 
GRANT 

postgres = # GRANT ALL ON todas las tablas de prueba SCHEMA por TestUser; 
GRANT 
postgres = # \ q
-Bash-4.1 $ exit
logout
# Su testuser

$ Pwd 
/ Home / testuser 
$ psql-d postgres 
psql (9.3.2) 

Escriba "help" para obtener ayuda. 
postgres => CREATE test.test MESA (varchar COLTEST (20));
CREATE TABLE
postgres => insertan en test.test valores (COLTEST) ('It works!');
INSERT 0 1
postgres => SELECT * FROM test.test;
COLTEST
-----------
¡Funciona!
(1 row)

postgres => test.test DROP TABLE;
DROP TABLE
postgres =>

Me di cuenta de que estas declaraciones de subvención trabajaron bien con 9.3 pero la distro originalmente instalado una versión 8. * Y algunos de los comandos fallé. 

Por cierto ... Usted, por supuesto, todavía tiene las características que usted esperaría de un sistema RDBM estable.Concedidos estos son ejemplos sencillos. 

postgres => EXPLAIN SELECT * de test.test; 
PLAN DE CONSULTA 
-------------------------------------------------- ------ 
Sec. Scan en la prueba (cost = 0.00 .. 19.20 rows = 920 width = 58) 

Mostrar bases de datos == \ l 
postgres-> \ l 
postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | 
template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | = c / postgres + 
| | | | | Postgres = TACc / postgres 
template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | = c / postgres + 

| | | | | Postgres = TACc / postgres 

USO es el estándar SQL: 
postgres-> Usar postgres 

Enumerar todos los esquemas: 

postgres-> \ dn 
públicas | postgres 

prueba | postgres 

SHOW CREATE TABLE y etc, son un poco más de trabajo. Concedido un DBA MySQL lo verá como más trabajo, porque de lo que estamos acostumbrados a hacer. PostgreSQL utiliza espacios de tabla más de usuarios de MySQL están acostumbrados a hacer.

  postgres => CREATE sometable MESA (varchar SomeField (255), varchar anotherfield (150), fecha datefield); 
  CREATE TABLE 
  postgres => INSERT INTO VALORES sometable (SomeField, anotherfield, DateField) ('fubar', 'rabuf', '2013-12-30 '); 
  INSERT 0 1 
  postgres => INSERT INTO VALORES sometable (SomeField, anotherfield, DateField) ('fubar', 'rabuf', NOW ()); 
  INSERT 0 1 
  postgres => INSERT INTO VALORES sometable (SomeField, anotherfield, DateField) ('fubar2', 'rabuf2', NOW ()); 
  INSERT 0 1 
  postgres => select * from sometable; 
   SomeField | anotherfield | datefield   
  ----------- + -------------- + ------------ 
   fubar | rabuf | 30/12/2013 
   fubar | rabuf | 30/12/2013 
   fubar2 | rabuf2 | 12/30/2013 
  (3 filas) 

postgres => select * from sometable DONDE SomeField = 'fubar'; SomeField | anotherfield | datefield ----------- + -------------- + ---- -------- fubar | rabuf | 30/12/2013 fubar | rabuf | 12/30/2013 (2 filas)

postgres => \? <- La ayuda que le mostrará cómo navegar alrededor.

Mostrar las tablas == \ dt

postgres => \ dt
Lista de las relaciones
Esquema | Nombre | Tipo | Propietario
-------- + ----------- + ------- + ----------
público | sometable | Mesa | testuser

postgres => ALTER TABLE ADD COLUMN sometable intfield int [11]; ALTER TABLE

postgres => select * from sometable; SomeField | anotherfield | datefield | intfield ----------- + -------------- + -------- ---- + ---------- fubar | rabuf | 12/30/2013 | fubar | rabuf | 12/30/2013 | fubar2 | rabuf2 | 12/30/2013 | (3 filas)

Mostrar create table == \ d + nombre de tabla
postgres => \ d + sometable
Tabla "public.sometable"
Columna | Tipo | Modificadores | Almacenamiento | Estadísticas destino | Descripción
-------------- + ------------------------ + ---------- - + ---------- + -------------- + -------------
SomeField | carácter variable (255) | | ampliada | |
anotherfield | carácter variable (150) | | ampliada | |
datefield | Fecha | | llano | |
intfield | entero [] | | ampliada | |
Tiene OID: no


Para ayudar a que más puede instalar pgadmin
yum install pgadmin3_93

Conseguir que para trabajar y cómo funciona podría ser otro post entero blog.

Hasta ahora .... Me quedo con MySQL, pero esto es sólo un ejemplo simplista de usar PostgreSQL. Esto puede ayudarle a empezar a usted puede evaluar por sí mismo.

Enlaces Útiles abajo. Por favor refiérase a estos, ya que tienen más experiencia con PostgreSQL que yo.

sábado, 7 de diciembre de 2013

ERROR 1356 (HY000)

Original post:  http://anothermysqldba.blogspot.com/2013/12/error-1356-hy000.html


Lo más importante de entender cuando viene sobre un error es tomar un momento y relajarse. 
A veces la gente se encuentra con un error y se vuelven nerviosos y frustrados. Tome una respiración profunda y relajarse. A veces, " La locura es como la gravedad. Todo lo que necesita es un poco de empuje "y" A veces las preguntas son complicadas y las respuestas son simples . " 

¿Qué es todo esto? Bueno, por ejemplo, se me pidió recientemente para ayudar a resolver un problema que preocupaba otra DBA. Nada significaba en la falta de respeto a todos a que DBA pero estar en un pueblo de acometidas apenas dan a la respuesta que está en frente de ellos y en lugar de espiral hacia abajo en la locura . 

Este es el concepto general de la situación. 

Después de hacer un mysqldump de una base de datos que el usuario se mudó a otra base de datos para que otros puedan ser pruebas. La importación funcionaba bien. Sin embargo, los usuarios comenzaron a aparecer errores al tratar de consultar desde un punto de vista pre-compilados. 

mysql> select * from límite <nombre_vista> 1; 

ERROR 1356 (HY000): View '. <nombre_bd> <viewname>' Referencias mesa (s) inválida o columna (s) o la función (s) o definidor / invocador de vista de los derechos carecen de usarlos 

La primera reacción fue pensar que el que algo salió mal con la importación. Hizo la vista o en realidad las tablas relacionadas se corrompen? 

No. 

Para solucionar este error lo primero que TODO era: mysql> SHOW CREATE vista <nombre_vista> \ G 

Es probable que vea algo que comienza así: 
*************************** 1. fila *************************** 
Vista: Visitantes 
 
Crear vista: CREATE ALGORITMO = DEFINER UNDEFINED = `<Some_user>` @ `<Some_host_or_IP>` SQL SECURITY DEFINER VISTA 

Después de ver que el definidor es: `<Some_user>` @ `<Some_host_or_IP>` que puedas ver las subvenciones para ese usuario. 

mysql> SHOW GRANTS para `<Some_user>` @ `<Some_host_or_IP>`; 

Resulta que la solución era sólo lo que dijo el error en el primer lugar: "definidor / invocador de los derechos de vista la falta usarlos" 

Para hacer más fácil que usted puede hacer un show subvenciones en la base de datos en el que ya trabaja y copiar la instrucción de concesión, o puede revisar qué tipo de permisos que necesita para implementar en la nueva base de datos para que el fin de reunir los datos necesarios. 

Una simple actualización de los permisos para el usuario y el error se había ido. 

" A veces las respuestas son sencillas . "