-
Notifications
You must be signed in to change notification settings - Fork 13
/
PostgreSQL.txt
executable file
·1028 lines (630 loc) · 26.6 KB
/
PostgreSQL.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
=====================
Guía PostgreSQL by dM
=====================
===========
Instalacion
===========
Actualizar los repositorios
# aptitude update
-----
Buscar la version actual en los repositotios
# aptitude search postgresql
-----
Instalar la version de PostgreSQL
# aptitude install postgresql postgresql-server
-----
Reiniciar el servicio de PostgreSQL, para aplicar cambios etc.
$ sudo service postgresql restart
ó
$ sudo /etc/init.d/postgresql restart
=========
Monitoreo
=========
Ver el estatus del servidor de postgresql
$ service postgresql status
$ sudo /etc/init.d/postgresql restart
==================
Remover postgresql
==================
Los siguientes paquetes se instalan por defecto en Debin Jessie 8, por eso
los removemos manualmente, pero aplicará a las versiones que tenga instaladas,
lo sabremos con un $ aptitude search postgresql
# apt-get --purge remove postgresql-9.4 postgresql-client-9.4 postgresql-client-common postgresql-common
==================================
Entrar en la consola de postgresql
==================================
$ su
# su postgres
# psql // Entrar a posgresql
ó (sí está instalado sudo)
$ sudo su postgres
postgresql@xxx:$ psql
---
Al ver esto postgresql fue instalado correctamente
psql (9.x.x)
Type "help" for help.
-----
Conectarse diréctamente a una db desde la línea de comandos.
postgres@xxx:$ psql name_db
-----
Línea de comandos de postgresql
postgres=#
-----
postgres=# help // Ayuda de postgresql
Está usando psql, la interfaz de línea de órdenes de PostgreSQL.
Digite: \copyright para ver los términos de distribución
\h para ayuda de órdenes SQL
\? para ayuda de órdenes psql
\g o punto y coma («;») para ejecutar la consulta
\q para salir
postgres=#
-----
Salir de la consola de Postgres
# \q
-----
Salir de la consola de Postgres
# \quit
-----
Para ver los roles existentes (usuarios)
# \du
-----
Ver las bases de datos creadas
# \l
-----
# \s // Ver el historial de comandos usados en postgres
Ctrl + l // Limpiar la consola de postgres
-----
Muestra la fecha del sistema, para ver el formato de fecha de postgres.
# SELECT CURRENT_DATE;
-----
Crear usuario sin password, es mejor asignarle el pass
# CREATE USER nombre_usuario;
-----
Crear usuario y asignarle el password
# CREATE USER nombre_usuario PASSWORD 'p@s5w0rd';
-----
Asignarle o cambiarle el password a un usuario, debe estar creado
# ALTER USER usuario WITH PASSWORD 'nueva_password';
-----
Borrar un usuario
# DROP USER nombre_usuario;
-----
Crear una base de datos
# CREATE DATABASE nombre_db;
-----
Crear una copia de una database existente
# CREATE DATABASE new_db WITH TEMPLATE original_db OWNER db_user;
-----
Borrar una base de datos
# DROP DATABASE nombre_db;
-----
Creando una base de datos, debe estar creado el usuario
# CREATE DATABASE nombre_BaseDatosprueba OWNER nombre_usuario;
----
Conectarse a la base de datos creada
# \c name_db;
-----
Conectarse de nuevo a la db postgres con el usuario postgres
# \c postgres;
-----
Creacion de una tabla con un campo varchar de tamaño 20 y un campo para enteros.
name_db=# CREATE TABLE nombre_tabla (nombre varchar(20),edad int);
-----
Para ver la lista de relaciones de la db, se debe estar conectado a la db, se
pueden ver las tablas
name_db=# \d
-----
Para ver la descripción (nombre de columnas, tipo de datos de una tabla, etc.
namedb=# \d nombre_tabla
-----
Insertar datos en la tabla
namedb=# INSERT INTO nombre_tabla (nombre_campo, ..., nombre_campo) values (valor_campo, ..., valor_campo);
Ejemplo de Insertar datos en una tabla, las cadenas se expresan entre ('').:
namedb=# INSERT INTO usuario (nombre, nacionalidad, cedula) values ('vladimirov','V',12345678);
-----
Insertar datos, no se pueden dejar campos vacios.
namedb=# INSERT INTO usuarios VALUES ('mariana','V',12345678);
-----
Hacer una consulta a los datos de un campo especifico.
namedb=# SELECT nombre_campo FROM nombre_tabla;
-----
Hacer una consulta a los datos de varios campos especificos, separados por ",".
namedb=# SELECT nombre_campo,nombre_campo2 FROM nombre_tabla;
-----
Hacer una consulta de los datos de la tabla, (*) Significa que lea todas las
columnas de la tabla.
namedb=# SELECT * FROM nombre_tabla;
-----
Hacer una consulta a los registros de una tabla especificando el número de
registros a consultar donde n es un entero, ejemplo 5.
namedb=# select * from nombre_tabla limit n;
Consultar todos los registros de una tabla pero ordenándolos ascendentemente en
referencia a un campo (id) en este caso.
namedb=# SELECT * FROM name_table ORDER BY id;
-----
Consultar los registros de una tabla ordenandolos de manera ascendente en
referencia a un campo específico.
namedb=# SELECT * FROM name_table ORDER BY id ASC;
-----
Consultar los registros de una tabla ordenandolos de manera descendente en
referencia a un campo específico.
namedb=# SELECT * FROM name_table ORDER BY id DESC;
-----
Hacer una consulta de los datos de una tabla cuando coincida con el parametro
establecido, cadena
namedb=# SELECT * FROM nombre_tabla WHERE nombre_campo='valor';
-----
Hacer una consulta de los datos de una tabla cuando el registro contenga la
cadena o valor a buscar.
# SELECT * FROM auth_permission WHERE codename LIKE '%email%';
Resultado: Registros que contenienten la cadena 'email'.
id | name | content_type_id | codename
----+------------------+-----------------+--------------
1 | Can add email | 1 | add_email
2 | Can change email | 1 | change_email
3 | Can delete email | 1 | delete_email
4 | Can view email | 1 | view_email
-----
Hacer una consulta de los datos de una tabla cuando coincida con el parametro
establecido, entero
namedb=# SELECT * FROM nombre_tabla WHERE nombre_campo=3;
-----
Consultar los datos de una tabla que sean mayores o iguales que.
name_db=# SELECT * FROM name_table WHERE id >= 5;
-----
Ordenar ascendente los registros mayores que.
db_name=# select id from table where id>=25 order by id ASC;
-----
Listar los registros de una tabla que esten en el rango de 25 y 27.
db_name=# select id from table WHERE id IN ( 25, 27 );
-----
Listar los registros de una tabla exepto los que sean iguales a 25 y 27.
db_name=# select id from table WHERE id NOT IN ( 25, 27 );
-----
Listar los registro de una tabla cuyo valor del id esté entre 2 y 5 incluyéndo
los mismos.
db_name=# select * from table WHERE id BETWEEN 2 and 5;
-----
Listar todos los registros cuyo name inicie con la porción de cadena 'Pa'.
db_name=# SELECT * FROM table WHERE name LIKE 'Pa%';
-----
Listar todos los registros cuyo name inicie con la porción de cadena 'Pa'.
db_name=# SELECT name FROM table WHERE name LIKE 'Pa%';
-----
Hacemos una consulta a una tabla, pero usamos la palabra AS para crer un alias
para los nombres de los campos, muy util para generar consultas personalizadas y
crear un .csv para hacer una migración de datos, por ejemplo.
db_name=# select id as identificador,title as título from table_noticia;
------
Al crear un usuario podemos darle permisos a una base de datos existente.
postgres=# GRANT ALL PRIVILEGES ON DATABASE nombre_BaseDatos TO nombre_usuario;
-----
Cambiar los permisos de un usuario;
postgres=# ALTER ROLE name_user WITH SUPERUSER;
where option can be:
| SUPERUSER | NOSUPERUSER
| CREATEDB | NOCREATEDB
| CREATEROLE | NOCREATEROLE
| CREATEUSER | NOCREATEUSER
| INHERIT | NOINHERIT
| LOGIN | NOLOGIN
| CONNECTION LIMIT connlimit
| [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password'
| VALID UNTIL 'timestamp'
-----
Eliminar los registros de una tabla
nombredb=# DELETE FROM nombre_tabla;
-----
Borrar los datos de la columna de una tabla cuando se cumpla una condicion.
namedb=# DELETE FROM table_name WHERE condition;
-----
Eliminar los registros de un campo especifico
nombredb=# DELETE FROM nombre_tabla WHERE nombre_campo='xxx';
Ejemplo:
En este ejemplo eliminaremos los registros de una tabla usuarios pero solo de
los campos cuyo nombre sea igual a (vladimirov), por ello se usa la clausula
WHERE.
nombredb=# DELETE FROM usuario WHERE nombre='vladimirov';
-----
Vaciar los registros de una tabla, (elimina todos los registros de la tabla) y
vuelve a crear la tabla con la misma estructura.
nombredb=# TRUNCATE TABLE nombre_table;
La diferencia con "delete" es la velocidad, es más rápido "truncate table" que
"delete" (se nota cuando la cantidad de registros es muy grande) ya que éste
borra los registros uno a uno.
-----
Elimina una tabla asi como sus registros.
nombredb=# DROP TABLE nombre_tabla
-----
Agregar un nuevo campo a una tabla.
nombredb=# ALTER TABLE nombre_tabla ADD nombre_campo tipo_campo;
-----
En la base de datos prueba, agregamos a la tabla usuarios un nuevo campo cedula de tipo entero.
prueba=# ALTER TABLE usuarios ADD cedula int;
-----
Cambiar o renombrar el nombre de un campo creado.
nombredb=# ALTER TABLE nombre_tabla RENAME nombre_campo TO nuevo_nombre_campo;
-----
Para eliminar un campo o una columna de una tabla.
nombredb=# ALTER TABLE nombre_tabla DROP COLUMN nombre_columna;
-----
Para eliminar un campo o una columna de una tabla en cascada.
nombredb=# ALTER TABLE nombre_tabla DROP COLUMN nombre_columna CASCADE;
-----
Modificar el tipo de dato de una columna.
nombredb=# ALTER TABLE nombre_tabla ALTER COLUMN nombre_campo TYPE tipo_campo;
-----
Modificar el registro de un campo
nombredb=# UPDATE nombre_tabla SET nombre_campo='xxx' WHERE nombre_campo='xxxx';
Ejemplo:
En la base de datos prueba, vamos a actualizar un registro de la tabla usuarios
que corresponde a la columna o campo nombre, el registro que se modificara sera
el que corresponda con el parametro pasado con WHERE, sera el parametro de
busqueda en la columna, pero puede ser el id por ejemplo.
Prueba=# UPDATE usuarios SET nombre='Vitaly' WHERE cedula='12345678';
------
Cambiar el nombre de la database
# ALTER DATABASE name RENAME TO new_name
------
Cambiar el dueño de la database
# ALTER DATABASE name OWNER TO new_owner
-----
Creando columna de autoincremento #####
Para crear una columna de autoincremento, ideal para la columna (id) se usa el
tipo de dato (serial)
Ejemplo:
Creamos una tabla usuarios con dos campos, id que sera (serial) y otro campo
nombre de tamaño 20, el campo serial toma el valor por defecto de (1) al momento
de comenzar a introducir registros en los campos.
nombredb=# CREATE TABLE usuarios (id serial, nombre varchar(20));
Ejemplo:
prueba=# INSERT INTO usuarios (nombre) VALUES ('Kristina');
prueba=# INSERT INTO usuarios (nombre) VALUES ('Khalifa');
Introducimos los registros 'Kristina' y 'Khalifa' en la columna nombre, como
vemos no hace falta introducir el valor de la columna (id) puesto que lo toma
automaticamente autoincrementando en relacion al anterior registro. Si
observamos la tabla se vería asi:
prueba=# SELECT * FROM usuarios;
id | nombre
----+-------+
1 | Kristina |
2 | Khalifa |
(2 filas)
-------
Creando un campo id tipo clave primaria.
nombredb=# CREATE TABLE nombre_tabla (id serial primary key, nombre_campo varchar(20));
=============================================
Hacer un dump o respaldo de una base de datos
=============================================
Significa hacer una copia de seguridad de una base de datos, generando un
fichero .sql que contiene todos los comandos y sentencias para crear los
esquemas de una base de datos, además de albergar registros previos, si
existiesen.
$ pg_dump -U username -W -h host databasename > databasename.sql
Recomendado éste.
$ pg_dump -U username -W -h 127.0.0.1 databasename > basename.sql
$ pg_dump -U username db_name > db_ename.sql
$ pg_dump -U usuario -h 127.0.0.1 nombre_database > nombre_database.sql
postgresql dump ERROR: permiso denegado a la relación name_table
================================================================
A veces no deja hacer el dump, porque dice que el usuario no tiene permisos en
la tabla específica, entonces escribimos el siguiente comando:
name_db=# GRANT SELECT ON name_table TO PUBLIC;
======================================
Restaurar / Importar una base de datos
======================================
Para restaurar, Se debe tener creado el usuario con la contraseña y la base de
datos, luego el dump sustituirá a la bd creada
$ psql -h localhost -U nombre_usuario -d nombre_bd -f /ruta/al/archivo.sql
Parametros:
-h : Es la ip en donde esta el servidor de la base de datos, si esta trabajando
localmente entonces es localhost o 127.0.0.1
-U : Nombre de usuario propietario de la base de datos.
-d : Nombre de la base de datos.
-f : Ruta del archivo sql, si esta en el directorio no hay que poner la ruta
Ejemplo:
$ psql -h 127.0.0.1 -U usuario_cliente -d banco_db -f banco_db.sql
Otra forma
==========
Se debe tener creado el usuario con la contraseña y la base de datos, luego el
dump sustituirá a la bd creada
$ psql -U username -W -h localhost nombre_base < dump_base.sql
-U Se refiere al Usuario, en este caso puede ser el usuario propietario de la
base de datos o el usuario postgres
-W Con este parámetro conseguiremos que nos solicite el password del usuario
antes especificado
-h Con este indicamos cuál es el servidor PostgreSQL al que nos conectaremos
para obtener nuestro dump, si estamos local podemos colocar localhost sino
ponemos la IP del servidor PostgreSQL
databasename Este es el ultimo parámetro realmente en esta linea de comando, por
esa razon no tiene alguna letra que indique que el siguiente parámetro es el
nombre de la base de datos basename.sql Esta parte en realidad solo indica que
la salida de nuestro comando pg_dump la guarde en un archivo databasename.sql
========================================
Restaurando .sql desde psql command line
========================================
postgres=# \i [full path and file name with extension]
Desde la db postgres (por defecto) importamos el .sql que creará la db
automáticamente, con el nombre y el dueño originales
postgres=# \i /home/user/dump.sql
Conectado a la nueva db vacía, con el usuario y contraseña correctos, es decir,
los originales, hacemos la restauración.
name_db=# \i /home/user/dump.sql
===============================================
Restaurando datos de una tabla con archivo .sql
===============================================
$ psql -h localhost -U <username> -d <dbname> -1 -f <filename>.sql
===========================================
Copiar datos de una tabla a un fichero .csv
===========================================
Creamos un fichero .csv, en este ejemplo será "x.csv" y lo guardamos en el
/home/user/ luego le damos permisos con:
$ touch x.csv
$ sduo chmod 777 x.csv
Luego, desde la línea de comandos de postgres, nos conectamos a la db y ahí
ponemos el comando de copia de la tabla que queremos:
Nos pasará los datos de la name_tabla al fichero .csv, separando los datos por
filas y comas ",". Si se lanza de nuevo el comando el fichero se sobreescribe,
no se duplica la data.
db_name=# \copy name_table to 'x.csv' csv header;
-----
Pasándole la ruta absoluta del fichero.
db_name=# \copy name_table to '/home/user/x.csv' csv header;
-Nota: A veces falla en la copia: xxxxx.csv: Permiso denegado, por lo que se recomienda mover el .csv a /home/user/tmp/ para que no haya problema, y en el comando meter la ruta absoluta del fichero.
==========================================================
Copiar datos de una tabla where x='xxxx' a un fichero .csv
==========================================================
Copiando todos los campos.
db_name=# \COPY (select * from name_table WHERE x='xxxx') to 'x.csv' csv header;
-----
Especifícando un campo.
db_name=# \COPY (select id from name_table WHERE x='xxxx') to 'x.csv' csv header;
-----
Especifícando mas de un campo.
db_name=# \COPY (select id,username from name_table WHERE x='xxxx') to 'x.csv' csv header;
######################################################
##### Copiando columnas específicas de la tabla #####
######################################################
Crear el .csv y darle permisos.
db_name=# \COPY (select id from name_table) TO 'x.csv' DELIMITER ',' CSV HEADER;
db_name=# \COPY (select id,username from name_table) TO 'x.csv' DELIMITER ',' CSV HEADER; // Copiando dos columnas específicas en el .csv
Se puede usar el comando COPY sin "\" aunque a veces no permite las copias por los permisos insuficientes, asi que se usa "\".
##########################################################
##### Copiando datos de un .csv a una tabla de la db #####
##########################################################
El fichero csv debe contener la estructura adecuanda (campos), con las columnas y las comas así como la data, por ejemplo:
---
id,username
1,admin
---
db_name=# \COPY name_table FROM '/home/user/x.csv' CSV header;
#########################
##### Configuración #####
#########################
Los archivos de configuracion estan en:
--> /etc/postgresql/9.1/main
######################
##### phppgadmin #####
######################
PhpPgAdmin es una aplicación web, escrita en PHP, para administrar bases de datos PostgreSQL.
Es una aplicación web que provee una interfaz grafica a los usuarios para crear bases de datos, tablas, alterarlas y consultar
sus datos usando el lenguaje estándar SQL. phpPgAdmin estuvo basado en phpMyAdmin, pero hoy día ya no comparte código con él; incluso
provee las mismas funcionalidades y más a los usuarios del servidor de base de datos PostgreSQL.
Instalacion:
# aptitude install phppgadmin
http://localhost/phppgadmin/ // Interfaz grafica en el navegador web
El usuario y contraseña para conectarse debe ser un usaurio de postgres.
Por ahora me ha servido para reiniciar las secuencias de las tablas de django.
Si hay 3976 registros se debe configurar que el último valor es 3977 para que guarde bien en la tabla.
===========
pgadmin III
===========
pgAdmin is the leading graphical Open Source management, development and
administration tool for PostgreSQL.
# aptitude install pgadmin3
--
Cambiar la contraseña del usuario de postgres
postgres=# ALTER USER postgres WITCH PASSWORD '123456';
--
Pgadmin nos permite generar un json a partir de los datos de una tabla, con una
secuencia sql directamente:
SELECT array_to_json(array_agg(name_table)) FROM name_table;
##############################
##### Boolean Data Type ######
##############################
Valid literal values for the "true" state are:
TRUE
't'
'true'
'y'
'yes'
'on'
'1'
For the "false" state, the following values can be used:
FALSE
'f'
'false'
'n'
'no'
'off'
'0'
##########################################################################
##### Conversión de timestamp Unix a timestamp o date de PostgreSQL ######
##########################################################################
namedb=# select to_timestamp(1480973718);
########################
##### fichero .sql #####
########################
Los comentarios dentro un fichero .sql se escriben con:
-- Comentario línea 1
-- Comentario línea 2
############################################
##### Creando relaciones en las tablas #####
############################################
En el siguiente ejemplo tenemos dos tablas, una de entidades(estados) y otra de municipios, cada tabla tiene una llave
primaria, pero la tabla de municipios esta relacionada con la llave primaria de la tabla de entidades.
CREATE TABLE entidad (
codigo_entidad varchar(100) PRIMARY KEY,
nombre varchar(100));
CREATE TABLE municipio (
codigo_municipio varchar(100) PRIMARY KEY,
nombre varchar(100),
codigo_entidad integer REFERENCES entidad
);
Añadiendo la tabla parroquia a la secuencia de relaciones.
CREATE TABLE parroquia (
codigo_parroquia varchar(100) PRIMARY KEY,
nombre varchar(100),
codigo_municipio varchar REFERENCES municipio
);
====================================================
Cambiar codificación de una base de datos (encoding)
====================================================
postgres# update pg_database set encoding = pg_char_to_encoding('UTF8') where datname = 'database_name';
// Para LATIN9
postgres=# update pg_database set encoding=16 where datname='db_name';
// Para LATIN1
postgres=# update pg_database set encoding=16 where datname='db_name';
Instalando postgresql en chroot
Si sale el error:
psql: error: no se pudo conectar al servidor: no se pudo conectar con el
servidor: No existe el fichero o el directorio
Se debe reiniciar el servicio de postgresql
# service postgresql restart
=======
PostGIS
=======
PostGIS es un módulo para Postgresql.
PostGIS convierte al sistema de administración de bases de datos PostgreSQL en
una base de datos espacial mediante la adición de tres características: tipos de
datos espaciales, índices espaciales y funciones que operan sobre ellos. Debido
a que está construido sobre PostgreSQL, PostGIS hereda automáticamente las
características de las bases de datos empresariales, así como los estándares
abiertos que implementan un Sistema de Información Geográfica dentro del motor
de base de datos.
Ha sido desarrollado por la empresa canadiense Refraction Research,
especializada en productos "Open Source" entre los que habría que citar a Udig.
PostGIS es hoy en día un producto veterano que ha demostrado versión a versión
su eficiencia. En relación con otros productos, PostGIS ha demostrado ser muy
superior a la extensión geográfica de la nueva versión de MySQL, y a juicio de
muchos, es muy similar a la versión geográfica de la base de datos Oracle.
Un aspecto que debemos tener en cuenta es que PostGIS ha sido certificado en
2006 por el Open Geospatial Consortium (OGC) lo que garantiza la
interoperabilidad con otros sistemas también interoperables. PostGIS almacena la
información geográfica en una columna del tipo GEOMETRY, que es diferente del
homónimo "GEOMETRY" utilizado por PostgreSQL, donde se pueden almacenar la
geometría en formato WKB (Well-Known Binary), aunque hasta la versión 1.0 se
utilizaba la forma WKT (Well-Known Text).
============================================================================
Agregar el repositorio oficial de Postgresql para instalar últimas versiones
============================================================================
Create the file repository configuration:
$ sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
Import the repository signing key:
$ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
Update the package lists:
$ sudo apt-get update
Install the latest version of PostgreSQL.
$ sudo apt-get -y install postgresql
=================
La expresión LIKE
=================
LIKE devuelve verdadero si la cadena coincide con el patrón proporcionado.
(Como se esperaba, la expresión NOT LIKE devuelve falso si LIKE devuelve
verdadero, y viceversa.
Si el patrón no contiene signos de porcentaje o guiones bajos, entonces el
patrón solo representa la cadena en sí; en ese caso LIKE actúa como el operador
igual.
Algunos ejemplos:
'abc' LIKE 'abc' true
'abc' LIKE 'a%' true
'abc' LIKE '_b_' true
'abc' LIKE 'c' false
==========================
Los esquemas en postgresql
==========================
Los esquemas son como "agrupaciones" de tablas. Por ejemplo podrías tener un
sistema multicompañía, y en una misma base de datos pero con diferentes esquemas
mantener la infomación. Por ejemplo compania1.clientes y compañia2.clientes
Las tablas clientes tendrían la misma estructura y el mismo nombre pero
almacenadas en esquemas diferentes.
====================================
¿Cómo otorgar acceso a los usuarios?
====================================
Aquí hay algunas declaraciones comunes para otorgar acceso a un usuario de
PostgreSQL:
1) Otorgue CONNECT a la base de datos:
GRANT CONNECT ON DATABASE database_name TO username;
2) Otorgar USAGE en el esquema:
GRANT USAGE ON SCHEMA schema_name TO username;
3) Otorgar en todas las tablas para declaraciones DML: SELECT, INSERT, UPDATE,
DELETE:
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA schema_name TO username;
4) Otorgue todos los privilegios en todas las tablas del esquema:
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA schema_name TO username;
5) Otorgue todos los privilegios en todas las secuencias del esquema:
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA schema_name TO username;
6) Otorgue todos los privilegios en la base de datos:
GRANT ALL PRIVILEGES ON DATABASE database_name TO username;
7) Otorgue permiso para crear una base de datos :
ALTER USER username CREATEDB;
8.Convierta un usuario en superusuario :
ALTER USER myuser WITH SUPERUSER;
9) Eliminar el estado de superusuario :
ALTER USER username WITH NOSUPERUSER;
Esas declaraciones anteriores solo afectan las tablas existentes actuales
Para aplicar a tablas recién creadas, debe usar alter default Por ejemplo:
ALTER DEFAULT PRIVILEGES
FOR USER username
IN SCHEMA schema_name
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO username;
Fuente
======
https://tableplus.com/blog/2018/04/postgresql-how-to-grant-access-to-users.html
======================
Booleano en PostgreSQL
======================
Hay tres tipos de valores booleanos: VERDADERO, FALSO y NULO. Donde NULL
significa desconocido.
Booleano En SQL, puede usar VERDADERO y FALSO sin comillas, y también puede usar
caracteres entre comillas que representan verdadero y falso, como: 'sí', 'no',
'1', '0'.
Ejemplo
=======
1. Construir una mesa
CREATE TABLE test (
id int,
coll boolean,
collName varchar(20)
);
2. Insertar datos
insert into test values(1,TRUE,'TRUE');
insert into test values(2,FALSE,'FALSE');
insert into test values(3,true,'true');
insert into test values(4,false,'false');
insert into test values(5,'yes','''yes''');
insert into test values(6,'no','''no''');
insert into test values(7,'1','''1''');
insert into test values(8,'0','''0''');
3. Consultar datos
# select * from test;