Postgres Nuts and BoltsThis module explores the building blocks of a Postgres database in greater detail. DocumentationDocumentation for all supported versions of PostgreSQL is available from https://www.postgresql.org/docs/ . There are subtle differences between how different versions are implemented, so it is advisable to use the appropriate version for the database you are working with. Within the documentation is a comprehensive reference for all SQL commands including a synopsis, description, parameter list, anticipated output, and use examples. Data HierarchySchemas are the equivalent of folders in a file system, supporting the organisation of other database objects into logical groups (for example planning, education, highways). All tables must be inside a schema, and schemas also hold function and views. Within a schema, tables store the records or rows which make up your data, and have rows and columns like a spreadsheet. Tables have columns which define the structure of the data stored in a table, including name, datatype (string, integer, date etc.) and size. Create Schema schema and TabletableCreate a new schema in pgAdmin by navigating in your database to Schemas, then right-click > Create > Schema… Give the schema a name (for example training) and keep the owner as postgis, then click Save to create it Now recreate the structure of an existing table in the new schema Navigate to crime > neighbourhood_crime, and click SQL in the toolbar at the top of the window - you will see the SQL needed to create the table on the right
Copy the SQL from the window on the right, and click the Query Tool button in the toolbar, then paste the SQL into the Query window Delete the last four statements (TABLESPACE, ALTER TABLE, GRANT ALL) Edit the references to the crime schema in the SQL to reference your new schema name, then click the Execute/Refresh (Play) button in the toolbar to create the new table Click on the new table in the new schema, and click the View Data button in the toolbar In the Data Output window at the bottom, click the Add Row button, then double-click on a cell to add data - try both valid and invalid data to see the result When you are done, click the Save Data Changes button to commit your changes You now have a new table with a row of data
In the next exercise, we’ll look in more detail at a table, the objects within it, and how to manage them in pgAdmin. Add a columnNavigate to crime > street_crime and open the Columns node You will see that there is a wkb_geometry column - click on this and look at the Properties tab for it on the right - the data type is geometry, meaning that it is a spatial table and so can be used in GIS applications and analysed spatially Right-click on street_crime > View/Edit Data > All Rows to examine the data In QGIS, navigate to the same table under your PostgreSQL node in the Browser, and double-click to load it into QGIS Right-click > Open Attribute Table on the new layer in the Layers panel - you will see the same data as you saw in pgAdmin In pgAdmin, click on Columns > right-click > Create > Column Create a new column called officer - this will hold the name of the officer who dealt with the crime In the Definition tab, set: Data type: character varying Length/Precision: 200
Click Save to add the column Open QGIS, right-click > Refresh on the connection and load the table again - you should see the new column
Other objects can be created in a similar way - note also that most objects can either be created from the right-click menu in pgAdmin, or by running SQL in the Query tootool. Review Primary Key and IndexUnder street_crime, open the Constraints node and look at , and click on street_crime_pk Click on the Properties tab on the right Note that the key icon in the object tree indicates that this is a primary key, and the Columns field on the Properties tab indicates that ogc_fid is the key Compare the Properties with the SQL (in the SQL tab) used to create the primary key Under Indexes, look at the street_crime_sidx properties in the same way You see that the index properties include Access Method (gist, a spatial index) and the Column indexed (wkb_geometry) If you want to edit these values, click the Edit the Object button in the toolbar on the Properties tab to launch the edit dialog
Access ControlLogin and Group Roles control access to database objects. This allows for the creation of Groups with certain privileges, and members of groups (i.e. individual users) who inherit those privileges. The screenshot below shows that the postgis user is a member of the postgis group, and is able to create databases and inherit from its parent.
The next exercise grants access a table to another group. Access ControlcontrolRight-click on street_crime and go to Properties In the Security tab, click in the field under the Privileges column to see the permissions granted to postgis_groupon the + sign to the right of Privileges to add a Grantee Under Grantee, select qgis_group, then under Privileges, check ALL to grant all privileges to the group, then click Save From the Servers node, register a new Server, using the same settings as for the database you created at the beginning of the course but with user/password qgis/qgis Navigate to one of the tables and attempt to view the dateAs the qgis user does not have these permissions, access will be deniedthe crime schema, and see which tables you can view and which you can’t In your original server connection, look at the SQL for the tables in the crime schema and note the differences
|