Operaciones de base de datos
Contenido de la columna :
- análisis del código fuente del kernel postgresql
- Toadb de base de datos manuscrita
- Programación concurrente
Contribuciones de código abierto :
Página de inicio personal : Mi página de inicio
Comunidad de gestión : Base de datos de código abierto
Lema: Cuando el cielo es fuerte, un caballero se esfuerza por superarse; cuando el terreno es bueno, un caballero porta grandes virtudes.
Serie de artículos
- Empezando
- infraestructura postgrersql
- Rápido de usar
- Inicializar el clúster
- Gestión de servicios de base de datos.
- uso del cliente psql
- Crear base de datos
- Operaciones de base de datos
Prefacio
La base de datos postgresql es un dato relacional general que es comparable a los datos comerciales en bases de datos de código abierto y se está volviendo cada vez más popular en la industria.
Debido a que es una base de datos de código abierto, no solo divulga el código fuente, sino que también tiene muchos casos de uso y complementos fáciles de usar, por lo que gradualmente se ha convertido en el pionero y estándar de las bases de datos. entenderlo desde el uso hasta los principios;
Si está aprendiendo programación, también puede adquirir una gran cantidad de conocimientos de programación, estructuras de datos y habilidades de programación. También hay muchos diseños arquitectónicos exquisitos, ideas en capas e ideas que se pueden personalizar de manera flexible.
Esta columna presenta principalmente el uso básico de postgresql, el mantenimiento y la administración de bases de datos. A través de estos usos, puede comprender los principios de la base de datos y comprender lentamente qué tipo de base de datos es postgresql, qué puede hacer y cómo proporcionar una buena servicios. Lo más importante es que este conocimiento esté todo en la entrevista. Elementos requeridos.
Descripción general
Este artículo comparte principalmente la base de datos, la unidad de gestión más básica del sistema de base de datos, y su serie de operaciones de gestión, principalmente desde los siguientes aspectos:
- Consultar todas las bases de datos.
- Ingrese la base de datos especificada
- Crear base de datos
- Modificar base de datos
- Eliminar base de datos
- Ver estadísticas de la base de datos
Ver todas las bases de datos
Al realizar el mantenimiento como DBA, necesitamos saber cuántas bases de datos hay en el clúster actual, los siguientes métodos se utilizan comúnmente para verlas;
- Consultar diccionario de datos vía SQL
- Ver la lista de resumen de la base de datos mediante el comando psql
Ver diccionario de datos a través de SQL
En el sistema de base de datos, toda la información organizativa de los datos se denomina colectivamente diccionario de datos. La forma lógica presentada por el diccionario de datos es una serie de tablas. Debido a que el sistema de base de datos la genera y mantiene automáticamente, también se le llama diccionario. tabla del sistema.
La información sobre la base de datos también se registra en una tabla del sistema, pg_database
primero echemos un vistazo a los campos de su tabla;
postgres=# \d pg_database
Table "pg_catalog.pg_database"
Column | Type | Collation | Nullable | Default
----------------+-----------+-----------+----------+---------
oid | oid | | not null |
datname | name | | not null |
datdba | oid | | not null |
encoding | integer | | not null |
datlocprovider | "char" | | not null |
datistemplate | boolean | | not null |
datallowconn | boolean | | not null |
datconnlimit | integer | | not null |
datfrozenxid | xid | | not null |
datminmxid | xid | | not null |
dattablespace | oid | | not null |
datcollate | text | C | not null |
datctype | text | C | not null |
daticulocale | text | C | |
daticurules | text | C | |
datcollversion | text | C | |
datacl | aclitem[] | | |
Indexes:
"pg_database_oid_index" PRIMARY KEY, btree (oid), tablespace "pg_global"
"pg_database_datname_index" UNIQUE CONSTRAINT, btree (datname), tablespace "pg_global"
Tablespace: "pg_global"
El significado de cada campo se explica a continuación:
Nombre del campo | describir |
---|---|
oid |
El identificador único de la base de datos, que el sistema utiliza internamente; |
datname |
El nombre de la base de datos; |
datdba |
El OID de usuario (identificador de objeto) del propietario de la base de datos; |
encoding |
La codificación de caracteres utilizada por la base de datos; |
datlocprovider |
Proveedor de configuración regional para esta base de datos: =libc, =icuci; |
datistemplate |
Esta es una bandera que indica si la base de datos es una plantilla. Si es verdadero, cualquier usuario con permiso puede clonar esta base de datos; si es falso, solo el superusuario o el propietario de la base de datos puede clonarla. |
datallowconn |
Si es falso, nadie podrá conectarse a esta base de datos. Esto se utiliza para proteger la base de datos de cambios. |
datconnlimit |
Este es el límite actual en la cantidad de conexiones abiertas a la base de datos. -1 significa que no hay límite, -2 significa que la base de datos no es válida. |
datfrozenxid |
Todos los ID de transacciones en esta base de datos mayores que este valor han sido reemplazados por ID de transacciones congeladas, un mecanismo de reciclaje para números de transacciones; |
datminmxid |
Todos los ID multixactos en esta base de datos que son mayores que el valor cotizado han sido reemplazados por ID de transacciones, un mecanismo de reciclaje para números de transacciones; |
dattablespace |
El OID (identificador de objeto) del espacio de tabla utilizado por la base de datos. |
datcollate |
LC_COLLATE para esta base de datos; |
datctype |
LC_CTYPE de esta base de datos; |
daticulocale |
El ID local de la UCI de esta base de datos; |
daticurules |
Cotejo de la UCI para esta base de datos; |
datcollversion |
Versión de clasificación específica del proveedor. Esto se registra cuando se crea la base de datos y luego se verifica cuando se utiliza la base de datos para detectar cambios en la definición de intercalación que pueden causar corrupción de datos. |
datacl |
permiso de acceso; |
Concéntrese en comprender algunos campos. Cada objeto de base de datos dentro del sistema tiene un OID de identificación único, que es un número, correspondiente a un espacio de tabla, que es el nivel de almacenamiento; también existen restricciones en los derechos de acceso y no todos pueden acceder a ellos. a voluntad,
especialmente Sí, necesitamos saber quién es el propietario de la base de datos, es decir, el campo datdba, porque es el jefe de esta base de datos;
Bien, después de entenderlo, es muy simple, podemos saber cuántas bases de datos tiene el sistema de base de datos actual mediante una consulta;
db_factory=> select oid,datname,datdba,dattablespace , datacl from pg_database ;
oid | datname | datdba | dattablespace | datacl
-------+-------------+--------+---------------+------------------------------------------------
5 | postgres | 10 | 1663 |
1 | template1 | 10 | 1663 | {
=c/senllang,senllang=CTc/senllang}
4 | template0 | 10 | 1663 | {
=c/senllang,senllang=CTc/senllang}
16446 | db_factory1 | 10 | 1663 |
16445 | db_factory | 16451 | 1663 | {
=Tc/manager,manager=CTc/manager,hr=C/manager}
(5 rows)
Acabamos de hablar de los permisos de acceso, en cuanto a los permisos de acceso a las tablas del sistema, por ser diccionarios, todos los usuarios tienen permisos por defecto;
psql ver lista de bases de datos
psql es un cliente de línea de comandos de uso común. Proporciona muchos comandos de operación simples, como ver la lista de bases de datos. Se ha \l
usado muchas veces en intercambios anteriores;
db_factory=> \l
List of databases
Name | Owner | Encoding | Locale Provider | Collate | Ctype | ICU Locale | ICU Rules | Access privileges
-------------+----------+----------+-----------------+-------------+-------------+------------+-----------+-----------------------
db_factory | manager | UTF8 | icu | en_US.UTF-8 | en_US.UTF-8 | en-US | | =Tc/manager +
| | | | | | | | manager=CTc/manager +
| | | | | | | | hr=C/manager
db_factory1 | senllang | UTF8 | icu | en_US.UTF-8 | en_US.UTF-8 | en-US | |
postgres | senllang | UTF8 | icu | en_US.UTF-8 | en_US.UTF-8 | en-US | |
template0 | senllang | UTF8 | icu | en_US.UTF-8 | en_US.UTF-8 | en-US | | =c/senllang +
| | | | | | | | senllang=CTc/senllang
template1 | senllang | UTF8 | icu | en_US.UTF-8 | en_US.UTF-8 | en-US | | =c/senllang +
| | | | | | | | senllang=CTc/senllang
(5 rows)
Puede ver los resultados de la ejecución. El número es el mismo, pero la información es pg_database
menor que la que encontró. Proporciona principalmente información resumida. Si necesita información detallada, aún debe verificarla en la tabla del sistema.
Ingrese la base de datos especificada
Cada vez que inicia sesión, debe especificar una base de datos; por supuesto, el método de inicio de sesión puede ser un cliente gráfico, una conexión JDBC o psql; por ejemplo, para
ingresar a la base de datos a través de psql db_factory
, el usuario es hr
;
[senllang@hatch bin]$ ./psql -d db_factory -U hr
psql (16beta1)
Type "help" for help.
db_factory=>
Crear base de datos
CREATE DATABASE db_factory;
Los pasos y aspectos detallados de la creación de una base de datos se han compartido antes y no se repetirán aquí. Consulte el contenido de esta columna;
Modificar base de datos
Pocas personas modifican las propiedades de la base de datos, porque la base de datos generalmente se planifica con anticipación y el impacto es relativamente grande. Pero como DBA, debe comprender qué atributos se pueden modificar y cuál será el impacto de la modificación.
La base de datos se puede modificar en los siguientes tipos principales:
- Modificar las propiedades de la base de datos;
- Modificar el nombre de la base de datos;
- Modificar el espacio de la tabla de la base de datos;
- Modificar el propietario de la base de datos;
- Parámetros de tiempo de ejecución de la base de datos
Por supuesto, al realizar estas operaciones, el usuario actual de la base de datos es el usuario o propietario superadministrador;
Modificación de propiedades de la base de datos
Se pueden modificar los siguientes valores en las propiedades de la base de datos.
- ALLOW_CONNECTIONS propiedades de conexión;
- LÍMITE DE CONEXIÓN límite de número de conexión;
- Atributos de plantilla IS_TEMPLATE
Estos parámetros sonpg_database
los contenidos enumerados en las tablas del sistema y afectan el acceso a la base de datos;
Modificación del nombre de la base de datos
Cambio de nombre de base de datos
postgres=# \c postgres manager
You are now connected to database "postgres" as user "manager".
postgres=> alter database db_factory rename to db_factory2;
ALTER DATABASE
manager
El usuario tiene createdb
permisos y también es db_factory
el propietario; el nombre de la base de datos de inicio de sesión actual no se puede modificar, por lo que iniciamos sesión en otras bases de datos y luego ejecutamos la instrucción SQL de cambio de nombre.
Cambios en el espacio de tablas al que pertenece la base de datos.
Al compartir espacio de almacenamiento, se menciona que el espacio de tabla es en realidad la ubicación de almacenamiento físico de la base de datos; luego, cambiar el espacio de tabla también significa mover la base de datos, lo que suena problemático.
También hay muy pocos escenarios de aplicación para este comando. Solo cuando el espacio de almacenamiento del espacio de tabla actual es insuficiente o cuando el disco correspondiente al espacio de tabla actual necesita mantenimiento, la base de datos debe moverse a una nueva ubicación. Los datos en la base de datos son críticos, la copia de seguridad y el archivado deben realizarse con anticipación.
En primer lugar, el usuario que realiza la modificación debe tener permiso para usar el espacio de tabla correspondiente. Todavía usamos manager
operaciones de usuario para otorgarle al usuario todos los permisos manager
sobre el espacio de tabla .tblspc_test1
postgres=# grant all ON tablespace tblspc_test1 TO manager ;
GRANT
Cambie a iniciar sesión como manager
usuario y cambie db_factory2
el espacio de tabla, que originalmente estaba en el espacio de tabla predeterminado;
postgres=# \c postgres manager
You are now connected to database "postgres" as user "manager".
postgres=> alter database db_factory2 set tablespace tblspc_test1 ;
ALTER DATABASE
Cambio de propietario de la base de datos
El propietario es el propietario de todos los permisos de esta base de datos. Después del reemplazo, el usuario propietario original perderá los permisos;
Antes de que se pueda ejecutar, el ejecutor puede ser un superadministrador, o el usuario propietario actual y un miembro del nuevo usuario propietario, de lo contrario no se puede ejecutar, es decir, el nuevo propietario y el antiguo propietario serán efectivo después de la ejecución. Los mismos permisos; si el antiguo usuario propietario no es necesario, él o ella puede ser expulsado de la membresía; esta restricción garantiza un proceso de cambio sin problemas;
Supongamos que desea cambiar db_factory2
el propietario a usuario;manager
vp
- Primero cree un nuevo usuario como superadministrador
vp
y otorguecreatedb
permisos;
postgres=# create user vp createdb password '123456';
CREATE ROLE
- será
manager
miembro del nuevo usuario
postgres=# grant manager to vp;
GRANT ROLE
- Luego
manager
inicie sesión en la base de datos con el usuariodb_factory2
y cambie de propietario.
postgres=# \c db_factory2 manager
You are now connected to database "db_factory2" as user "manager".
db_factory2=> alter database db_factory2 owner to vp;
ALTER DATABASE
Modificación de parámetros de tiempo de ejecución
Hay muchos parámetros en la base de datos, puede consultar el archivo de configuración para obtener más detalles.
db_factory2
Por ejemplo, para deshabilitar el escaneo de índices en la base de datos , puede ejecutar el siguiente SQL
ALTER DATABASE db_factory2 SET enable_indexscan TO off;
Eliminar base de datos
Cuando no necesitemos una base de datos, podemos eliminarla para liberar el espacio en disco correspondiente y evitar que el servicio de base de datos en segundo plano escanee constantemente bases de datos abandonadas y realice tareas de mantenimiento;
Para eliminar la base de datos, dropdb
puede utilizar comandos o declaraciones SQL;
Comando para eliminar base de datos
En el directorio bin debajo del directorio de instalación, puede ver dropdb
el comando. Vea la ayuda de la siguiente manera:
[senllang@hatch bin]$ ./dropdb --help
dropdb removes a PostgreSQL database.
Usage:
dropdb [OPTION]... DBNAME
Options:
-e, --echo show the commands being sent to the server
-f, --force try to terminate other connections before dropping
-i, --interactive prompt before deleting anything
-V, --version output version information, then exit
--if-exists don't report error if database doesn't exist
-?, --help show this help, then exit
Connection options:
-h, --host=HOSTNAME database server host or socket directory
-p, --port=PORT database server port
-U, --username=USERNAME user name to connect as
-w, --no-password never prompt for password
-W, --password force password prompt
--maintenance-db=DBNAME alternate maintenance database
Report bugs to <[email protected]>.
PostgreSQL home page: <https://www.postgresql.org/>
Como puede ver, de forma predeterminada, el parámetro es el nombre de la base de datos.
Esta es también la forma recomendada de eliminar una base de datos sin iniciar sesión en ella;
SQL eliminar base de datos
postgresql también proporciona el modo SQL, que no está incluido en el estándar SQL;
DROP DATABASE db_factory2;
Por supuesto, esto lo realiza el administrador y el propietario, cuando hay una conexión a la base de datos, la ejecución fallará;
- Tenga en cuenta que la eliminación de la base de datos no se puede deshacer, así que tenga cuidado;
Ver estadísticas de la base de datos
Por supuesto, durante el mantenimiento, también podemos verificar algunos indicadores en la base de datos, es decir, información estadística, para medir el estado de la base de datos;
Esta información está en pg_stat_database
esta tabla del sistema.
postgres=# select * from pg_stat_database where datname='db_factory2';
datid | datname | numbackends | xact_commit | xact_rollback | blks_read | blks_hit | tup_returned | tup_fetched | tup_inserted | tup_updated | tup_deleted | conflicts | temp_files | temp_bytes | deadlocks | che
cksum_failures | checksum_last_failure | blk_read_time | blk_write_time | session_time | active_time | idle_in_transaction_time | sessions | sessions_abandoned | sessions_fatal | sessions_killed | stats_reset
-------+-------------+-------------+-------------+---------------+-----------+----------+--------------+-------------+--------------+-------------+-------------+-----------+------------+------------+-----------+----
---------------+-----------------------+---------------+----------------+--------------+-------------+--------------------------+----------+--------------------+----------------+-----------------+-------------
16445 | db_factory2 | 0 | 6339 | 19 | 218 | 244990 | 2750338 | 52930 | 134 | 12 | 94 | 0 | 0 | 0 | 0 |
| | 0 | 0 | 56623309.239 | 253.288 | 0 | 29 | 0 | 0 | 0 |
(1 row)
El prefijo es la tabla del sistema pg_stat_, que es un tipo de tabla de registro de información estadística. Puede ver algunas estadísticas del estado de ejecución, como la cantidad de conexiones en las estadísticas de la base de datos, la cantidad de confirmaciones y reversiones de transacciones, etc. Esta información se presentará en detalle cuando se utilice más adelante.
Resumir
Espero que al compartir este artículo pueda tener una mejor comprensión de la base de datos. En cuanto al ID Diyi de la base de datos en el sistema y los permisos del propietario, tiene todos los permisos de la base de datos. Al mismo tiempo, cada base de datos está en el ubicación de almacenamiento, correspondiente a la tabla Espacio, esta información se puede conocer en detalle iniciando sesión, consultando el diccionario del sistema de la base de datos y la información estadística.
fin
Muchas gracias por tu apoyo. No olvides dejar tus valiosos comentarios mientras navegas. Si crees que es digno de aliento, dale me gusta y guárdalo. ¡Trabajaré más duro!
Correo electrónico del autor: [email protected]
Si hay algún error u omisión, indíquelo y aprenda unos de otros.
Nota: ¡No se permite la reproducción sin permiso!